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