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