xref: /aosp_15_r20/external/protobuf/objectivec/Tests/GPBExtensionRegistryTest.m (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1*1b3f573fSAndroid Build Coastguard Worker// Protocol Buffers - Google's data interchange format
2*1b3f573fSAndroid Build Coastguard Worker// Copyright 2017 Google Inc.  All rights reserved.
3*1b3f573fSAndroid Build Coastguard Worker// https://developers.google.com/protocol-buffers/
4*1b3f573fSAndroid Build Coastguard Worker//
5*1b3f573fSAndroid Build Coastguard Worker// Redistribution and use in source and binary forms, with or without
6*1b3f573fSAndroid Build Coastguard Worker// modification, are permitted provided that the following conditions are
7*1b3f573fSAndroid Build Coastguard Worker// met:
8*1b3f573fSAndroid Build Coastguard Worker//
9*1b3f573fSAndroid Build Coastguard Worker//     * Redistributions of source code must retain the above copyright
10*1b3f573fSAndroid Build Coastguard Worker// notice, this list of conditions and the following disclaimer.
11*1b3f573fSAndroid Build Coastguard Worker//     * Redistributions in binary form must reproduce the above
12*1b3f573fSAndroid Build Coastguard Worker// copyright notice, this list of conditions and the following disclaimer
13*1b3f573fSAndroid Build Coastguard Worker// in the documentation and/or other materials provided with the
14*1b3f573fSAndroid Build Coastguard Worker// distribution.
15*1b3f573fSAndroid Build Coastguard Worker//     * Neither the name of Google Inc. nor the names of its
16*1b3f573fSAndroid Build Coastguard Worker// contributors may be used to endorse or promote products derived from
17*1b3f573fSAndroid Build Coastguard Worker// this software without specific prior written permission.
18*1b3f573fSAndroid Build Coastguard Worker//
19*1b3f573fSAndroid Build Coastguard Worker// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20*1b3f573fSAndroid Build Coastguard Worker// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21*1b3f573fSAndroid Build Coastguard Worker// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22*1b3f573fSAndroid Build Coastguard Worker// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23*1b3f573fSAndroid Build Coastguard Worker// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24*1b3f573fSAndroid Build Coastguard Worker// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25*1b3f573fSAndroid Build Coastguard Worker// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26*1b3f573fSAndroid Build Coastguard Worker// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27*1b3f573fSAndroid Build Coastguard Worker// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28*1b3f573fSAndroid Build Coastguard Worker// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29*1b3f573fSAndroid Build Coastguard Worker// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*1b3f573fSAndroid Build Coastguard Worker
31*1b3f573fSAndroid Build Coastguard Worker#import "GPBTestUtilities.h"
32*1b3f573fSAndroid Build Coastguard Worker
33*1b3f573fSAndroid Build Coastguard Worker#import "GPBExtensionRegistry.h"
34*1b3f573fSAndroid Build Coastguard Worker#import "google/protobuf/Unittest.pbobjc.h"
35*1b3f573fSAndroid Build Coastguard Worker
36*1b3f573fSAndroid Build Coastguard Worker@interface GPBExtensionRegistryTest : GPBTestCase
37*1b3f573fSAndroid Build Coastguard Worker@end
38*1b3f573fSAndroid Build Coastguard Worker
39*1b3f573fSAndroid Build Coastguard Worker@implementation GPBExtensionRegistryTest
40*1b3f573fSAndroid Build Coastguard Worker
41*1b3f573fSAndroid Build Coastguard Worker- (void)testBasics {
42*1b3f573fSAndroid Build Coastguard Worker  GPBExtensionRegistry *reg = [[[GPBExtensionRegistry alloc] init] autorelease];
43*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNotNil(reg);
44*1b3f573fSAndroid Build Coastguard Worker
45*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg extensionForDescriptor:[TestAllExtensions descriptor]
46*1b3f573fSAndroid Build Coastguard Worker                               fieldNumber:1]);
47*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg extensionForDescriptor:[TestAllTypes descriptor]
48*1b3f573fSAndroid Build Coastguard Worker                               fieldNumber:1]);
49*1b3f573fSAndroid Build Coastguard Worker
50*1b3f573fSAndroid Build Coastguard Worker  [reg addExtension:[UnittestRoot optionalInt32Extension]];
51*1b3f573fSAndroid Build Coastguard Worker  [reg addExtension:[UnittestRoot packedInt64Extension]];
52*1b3f573fSAndroid Build Coastguard Worker
53*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1] ==
54*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot optionalInt32Extension]); // ptr equality
55*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg extensionForDescriptor:[TestAllTypes descriptor]
56*1b3f573fSAndroid Build Coastguard Worker                               fieldNumber:1]);
57*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91] ==
58*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot packedInt64Extension]); // ptr equality
59*1b3f573fSAndroid Build Coastguard Worker}
60*1b3f573fSAndroid Build Coastguard Worker
61*1b3f573fSAndroid Build Coastguard Worker- (void)testCopy {
62*1b3f573fSAndroid Build Coastguard Worker  GPBExtensionRegistry *reg1 = [[[GPBExtensionRegistry alloc] init] autorelease];
63*1b3f573fSAndroid Build Coastguard Worker  [reg1 addExtension:[UnittestRoot optionalInt32Extension]];
64*1b3f573fSAndroid Build Coastguard Worker
65*1b3f573fSAndroid Build Coastguard Worker  GPBExtensionRegistry *reg2 = [[reg1 copy] autorelease];
66*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNotNil(reg2);
67*1b3f573fSAndroid Build Coastguard Worker
68*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1] ==
69*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot optionalInt32Extension]); // ptr equality
70*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1] ==
71*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot optionalInt32Extension]); // ptr equality
72*1b3f573fSAndroid Build Coastguard Worker
73*1b3f573fSAndroid Build Coastguard Worker  // Message class that had registered extension(s) at the -copy time.
74*1b3f573fSAndroid Build Coastguard Worker
75*1b3f573fSAndroid Build Coastguard Worker  [reg1 addExtension:[UnittestRoot optionalBoolExtension]];
76*1b3f573fSAndroid Build Coastguard Worker  [reg2 addExtension:[UnittestRoot optionalStringExtension]];
77*1b3f573fSAndroid Build Coastguard Worker
78*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:13] ==
79*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot optionalBoolExtension]); // ptr equality
80*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:14]);
81*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:13]);
82*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:14] ==
83*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot optionalStringExtension]); // ptr equality
84*1b3f573fSAndroid Build Coastguard Worker
85*1b3f573fSAndroid Build Coastguard Worker  // Message class that did not have any registered extensions at the -copy time.
86*1b3f573fSAndroid Build Coastguard Worker
87*1b3f573fSAndroid Build Coastguard Worker  [reg1 addExtension:[UnittestRoot packedInt64Extension]];
88*1b3f573fSAndroid Build Coastguard Worker  [reg2 addExtension:[UnittestRoot packedSint32Extension]];
89*1b3f573fSAndroid Build Coastguard Worker
90*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg1 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91] ==
91*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot packedInt64Extension]); // ptr equality
92*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg1 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:94]);
93*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg2 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91]);
94*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg2 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:94] ==
95*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot packedSint32Extension]); // ptr equality
96*1b3f573fSAndroid Build Coastguard Worker
97*1b3f573fSAndroid Build Coastguard Worker}
98*1b3f573fSAndroid Build Coastguard Worker
99*1b3f573fSAndroid Build Coastguard Worker- (void)testAddExtensions {
100*1b3f573fSAndroid Build Coastguard Worker  GPBExtensionRegistry *reg1 = [[[GPBExtensionRegistry alloc] init] autorelease];
101*1b3f573fSAndroid Build Coastguard Worker  [reg1 addExtension:[UnittestRoot optionalInt32Extension]];
102*1b3f573fSAndroid Build Coastguard Worker
103*1b3f573fSAndroid Build Coastguard Worker  GPBExtensionRegistry *reg2 = [[[GPBExtensionRegistry alloc] init] autorelease];
104*1b3f573fSAndroid Build Coastguard Worker
105*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg2 extensionForDescriptor:[TestAllExtensions descriptor]
106*1b3f573fSAndroid Build Coastguard Worker                                fieldNumber:1]);
107*1b3f573fSAndroid Build Coastguard Worker
108*1b3f573fSAndroid Build Coastguard Worker  [reg2 addExtensions:reg1];
109*1b3f573fSAndroid Build Coastguard Worker
110*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1] ==
111*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot optionalInt32Extension]); // ptr equality
112*1b3f573fSAndroid Build Coastguard Worker
113*1b3f573fSAndroid Build Coastguard Worker  // Confirm adding to the first doesn't add to the second.
114*1b3f573fSAndroid Build Coastguard Worker
115*1b3f573fSAndroid Build Coastguard Worker  [reg1 addExtension:[UnittestRoot optionalBoolExtension]];
116*1b3f573fSAndroid Build Coastguard Worker  [reg1 addExtension:[UnittestRoot packedInt64Extension]];
117*1b3f573fSAndroid Build Coastguard Worker
118*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:13] ==
119*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot optionalBoolExtension]); // ptr equality
120*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg1 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91] ==
121*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot packedInt64Extension]); // ptr equality
122*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:13]);
123*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg2 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91]);
124*1b3f573fSAndroid Build Coastguard Worker
125*1b3f573fSAndroid Build Coastguard Worker  // Confirm adding to the second doesn't add to the first.
126*1b3f573fSAndroid Build Coastguard Worker
127*1b3f573fSAndroid Build Coastguard Worker  [reg2 addExtension:[UnittestRoot optionalStringExtension]];
128*1b3f573fSAndroid Build Coastguard Worker  [reg2 addExtension:[UnittestRoot packedSint32Extension]];
129*1b3f573fSAndroid Build Coastguard Worker
130*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:14]);
131*1b3f573fSAndroid Build Coastguard Worker  XCTAssertNil([reg1 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:94]);
132*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:14] ==
133*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot optionalStringExtension]); // ptr equality
134*1b3f573fSAndroid Build Coastguard Worker  XCTAssertTrue([reg2 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:94] ==
135*1b3f573fSAndroid Build Coastguard Worker                [UnittestRoot packedSint32Extension]); // ptr equality
136*1b3f573fSAndroid Build Coastguard Worker}
137*1b3f573fSAndroid Build Coastguard Worker
138*1b3f573fSAndroid Build Coastguard Worker@end
139