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 <Foundation/Foundation.h> 9#import <XCTest/XCTest.h> 10 11#import "GPBDictionary.h" 12#import "GPBDictionary_PackagePrivate.h" 13#import "GPBTestUtilities.h" 14 15#pragma mark - GPBAutocreatedDictionary Tests 16 17// These are hand written tests to double check some behaviors of the 18// GPBAutocreatedDictionary. The GPBDictionary+[type]Tests files are generate 19// tests. 20 21// NOTE: GPBAutocreatedDictionary is private to the library, users of the 22// library should never have to directly deal with this class. 23 24@interface GPBAutocreatedDictionaryTests : XCTestCase 25@end 26 27@implementation GPBAutocreatedDictionaryTests 28 29- (void)testEquality { 30 GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; 31 32 XCTAssertTrue([dict isEqual:@{}]); 33 XCTAssertTrue([dict isEqualToDictionary:@{}]); 34 35 XCTAssertFalse([dict isEqual:@{@"foo" : @"bar"}]); 36 XCTAssertFalse([dict isEqualToDictionary:@{@"foo" : @"bar"}]); 37 38 [dict setObject:@"bar" forKey:@"foo"]; 39 40 XCTAssertFalse([dict isEqual:@{}]); 41 XCTAssertFalse([dict isEqualToDictionary:@{}]); 42 XCTAssertTrue([dict isEqual:@{@"foo" : @"bar"}]); 43 XCTAssertTrue([dict isEqualToDictionary:@{@"foo" : @"bar"}]); 44 XCTAssertFalse([dict isEqual:@{@"bar" : @"baz"}]); 45 XCTAssertFalse([dict isEqualToDictionary:@{@"bar" : @"baz"}]); 46 47 GPBAutocreatedDictionary *dict2 = [[GPBAutocreatedDictionary alloc] init]; 48 49 XCTAssertFalse([dict isEqual:dict2]); 50 XCTAssertFalse([dict isEqualToDictionary:dict2]); 51 52 [dict2 setObject:@"mumble" forKey:@"foo"]; 53 XCTAssertFalse([dict isEqual:dict2]); 54 XCTAssertFalse([dict isEqualToDictionary:dict2]); 55 56 [dict2 setObject:@"bar" forKey:@"foo"]; 57 XCTAssertTrue([dict isEqual:dict2]); 58 XCTAssertTrue([dict isEqualToDictionary:dict2]); 59 60 [dict2 release]; 61 [dict release]; 62} 63 64- (void)testCopy { 65 { 66 GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; 67 68 NSDictionary *cpy = [dict copy]; 69 XCTAssertTrue(cpy != dict); // Ptr compare 70 XCTAssertTrue([cpy isKindOfClass:[NSDictionary class]]); 71 XCTAssertFalse([cpy isKindOfClass:[GPBAutocreatedDictionary class]]); 72 XCTAssertEqual(cpy.count, (NSUInteger)0); 73 74 NSDictionary *cpy2 = [dict copy]; 75 XCTAssertTrue(cpy2 != dict); // Ptr compare 76 XCTAssertTrue(cpy2 != cpy); // Ptr compare 77 XCTAssertTrue([cpy2 isKindOfClass:[NSDictionary class]]); 78 XCTAssertFalse([cpy2 isKindOfClass:[GPBAutocreatedDictionary class]]); 79 XCTAssertEqual(cpy2.count, (NSUInteger)0); 80 81 [cpy2 release]; 82 [cpy release]; 83 [dict release]; 84 } 85 86 { 87 GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; 88 89 NSMutableDictionary *cpy = [dict mutableCopy]; 90 XCTAssertTrue(cpy != dict); // Ptr compare 91 XCTAssertTrue([cpy isKindOfClass:[NSMutableDictionary class]]); 92 XCTAssertFalse([cpy isKindOfClass:[GPBAutocreatedDictionary class]]); 93 XCTAssertEqual(cpy.count, (NSUInteger)0); 94 95 NSMutableDictionary *cpy2 = [dict mutableCopy]; 96 XCTAssertTrue(cpy2 != dict); // Ptr compare 97 XCTAssertTrue(cpy2 != cpy); // Ptr compare 98 XCTAssertTrue([cpy2 isKindOfClass:[NSMutableDictionary class]]); 99 XCTAssertFalse([cpy2 isKindOfClass:[GPBAutocreatedDictionary class]]); 100 XCTAssertEqual(cpy2.count, (NSUInteger)0); 101 102 [cpy2 release]; 103 [cpy release]; 104 [dict release]; 105 } 106 107 { 108 GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; 109 dict[@"foo"] = @"bar"; 110 dict[@"baz"] = @"mumble"; 111 112 NSDictionary *cpy = [dict copy]; 113 XCTAssertTrue(cpy != dict); // Ptr compare 114 XCTAssertTrue([cpy isKindOfClass:[NSDictionary class]]); 115 XCTAssertFalse([cpy isKindOfClass:[GPBAutocreatedDictionary class]]); 116 XCTAssertEqual(cpy.count, (NSUInteger)2); 117 XCTAssertEqualObjects(cpy[@"foo"], @"bar"); 118 XCTAssertEqualObjects(cpy[@"baz"], @"mumble"); 119 120 NSDictionary *cpy2 = [dict copy]; 121 XCTAssertTrue(cpy2 != dict); // Ptr compare 122 XCTAssertTrue(cpy2 != cpy); // Ptr compare 123 XCTAssertTrue([cpy2 isKindOfClass:[NSDictionary class]]); 124 XCTAssertFalse([cpy2 isKindOfClass:[GPBAutocreatedDictionary class]]); 125 XCTAssertEqual(cpy2.count, (NSUInteger)2); 126 XCTAssertEqualObjects(cpy2[@"foo"], @"bar"); 127 XCTAssertEqualObjects(cpy2[@"baz"], @"mumble"); 128 129 [cpy2 release]; 130 [cpy release]; 131 [dict release]; 132 } 133 134 { 135 GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; 136 dict[@"foo"] = @"bar"; 137 dict[@"baz"] = @"mumble"; 138 139 NSMutableDictionary *cpy = [dict mutableCopy]; 140 XCTAssertTrue(cpy != dict); // Ptr compare 141 XCTAssertTrue([cpy isKindOfClass:[NSMutableDictionary class]]); 142 XCTAssertFalse([cpy isKindOfClass:[GPBAutocreatedDictionary class]]); 143 XCTAssertEqual(cpy.count, (NSUInteger)2); 144 XCTAssertEqualObjects(cpy[@"foo"], @"bar"); 145 XCTAssertEqualObjects(cpy[@"baz"], @"mumble"); 146 147 NSMutableDictionary *cpy2 = [dict mutableCopy]; 148 XCTAssertTrue(cpy2 != dict); // Ptr compare 149 XCTAssertTrue(cpy2 != cpy); // Ptr compare 150 XCTAssertTrue([cpy2 isKindOfClass:[NSMutableDictionary class]]); 151 XCTAssertFalse([cpy2 isKindOfClass:[GPBAutocreatedDictionary class]]); 152 XCTAssertEqual(cpy2.count, (NSUInteger)2); 153 XCTAssertEqualObjects(cpy2[@"foo"], @"bar"); 154 XCTAssertEqualObjects(cpy2[@"baz"], @"mumble"); 155 156 [cpy2 release]; 157 [cpy release]; 158 [dict release]; 159 } 160} 161 162@end 163