• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Protocol Buffers - Google's data interchange format
2// Copyright 2017 Google Inc.  All rights reserved.
3//
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file or at
6// https://developers.google.com/open-source/licenses/bsd
7
8#import "GPBExtensionRegistry.h"
9#import "GPBTestUtilities.h"
10#import "objectivec/Tests/Unittest.pbobjc.h"
11
12@interface GPBExtensionRegistryTest : GPBTestCase
13@end
14
15@implementation GPBExtensionRegistryTest
16
17- (void)testBasics {
18  GPBExtensionRegistry *reg = [[[GPBExtensionRegistry alloc] init] autorelease];
19  XCTAssertNotNil(reg);
20
21  XCTAssertNil([reg extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1]);
22  XCTAssertNil([reg extensionForDescriptor:[TestAllTypes descriptor] fieldNumber:1]);
23
24  [reg addExtension:[UnittestRoot optionalInt32Extension]];
25  [reg addExtension:[UnittestRoot packedInt64Extension]];
26
27  XCTAssertTrue([reg extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1] ==
28                [UnittestRoot optionalInt32Extension]);  // ptr equality
29  XCTAssertNil([reg extensionForDescriptor:[TestAllTypes descriptor] fieldNumber:1]);
30  XCTAssertTrue([reg extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91] ==
31                [UnittestRoot packedInt64Extension]);  // ptr equality
32}
33
34- (void)testCopy {
35  GPBExtensionRegistry *reg1 = [[[GPBExtensionRegistry alloc] init] autorelease];
36  [reg1 addExtension:[UnittestRoot optionalInt32Extension]];
37
38  GPBExtensionRegistry *reg2 = [[reg1 copy] autorelease];
39  XCTAssertNotNil(reg2);
40
41  XCTAssertTrue([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1] ==
42                [UnittestRoot optionalInt32Extension]);  // ptr equality
43  XCTAssertTrue([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1] ==
44                [UnittestRoot optionalInt32Extension]);  // ptr equality
45
46  // Message class that had registered extension(s) at the -copy time.
47
48  [reg1 addExtension:[UnittestRoot optionalBoolExtension]];
49  [reg2 addExtension:[UnittestRoot optionalStringExtension]];
50
51  XCTAssertTrue([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:13] ==
52                [UnittestRoot optionalBoolExtension]);  // ptr equality
53  XCTAssertNil([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:14]);
54  XCTAssertNil([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:13]);
55  XCTAssertTrue([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:14] ==
56                [UnittestRoot optionalStringExtension]);  // ptr equality
57
58  // Message class that did not have any registered extensions at the -copy time.
59
60  [reg1 addExtension:[UnittestRoot packedInt64Extension]];
61  [reg2 addExtension:[UnittestRoot packedSint32Extension]];
62
63  XCTAssertTrue([reg1 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91] ==
64                [UnittestRoot packedInt64Extension]);  // ptr equality
65  XCTAssertNil([reg1 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:94]);
66  XCTAssertNil([reg2 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91]);
67  XCTAssertTrue([reg2 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:94] ==
68                [UnittestRoot packedSint32Extension]);  // ptr equality
69}
70
71- (void)testAddExtensions {
72  GPBExtensionRegistry *reg1 = [[[GPBExtensionRegistry alloc] init] autorelease];
73  [reg1 addExtension:[UnittestRoot optionalInt32Extension]];
74
75  GPBExtensionRegistry *reg2 = [[[GPBExtensionRegistry alloc] init] autorelease];
76
77  XCTAssertNil([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1]);
78
79  [reg2 addExtensions:reg1];
80
81  XCTAssertTrue([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:1] ==
82                [UnittestRoot optionalInt32Extension]);  // ptr equality
83
84  // Confirm adding to the first doesn't add to the second.
85
86  [reg1 addExtension:[UnittestRoot optionalBoolExtension]];
87  [reg1 addExtension:[UnittestRoot packedInt64Extension]];
88
89  XCTAssertTrue([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:13] ==
90                [UnittestRoot optionalBoolExtension]);  // ptr equality
91  XCTAssertTrue([reg1 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91] ==
92                [UnittestRoot packedInt64Extension]);  // ptr equality
93  XCTAssertNil([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:13]);
94  XCTAssertNil([reg2 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:91]);
95
96  // Confirm adding to the second doesn't add to the first.
97
98  [reg2 addExtension:[UnittestRoot optionalStringExtension]];
99  [reg2 addExtension:[UnittestRoot packedSint32Extension]];
100
101  XCTAssertNil([reg1 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:14]);
102  XCTAssertNil([reg1 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:94]);
103  XCTAssertTrue([reg2 extensionForDescriptor:[TestAllExtensions descriptor] fieldNumber:14] ==
104                [UnittestRoot optionalStringExtension]);  // ptr equality
105  XCTAssertTrue([reg2 extensionForDescriptor:[TestPackedExtensions descriptor] fieldNumber:94] ==
106                [UnittestRoot packedSint32Extension]);  // ptr equality
107}
108
109@end
110