// Protocol Buffers - Google's data interchange format // Copyright 2017 Google Inc. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file or at // https://developers.google.com/open-source/licenses/bsd #import #import #import "GPBDictionary.h" #import "GPBDictionary_PackagePrivate.h" #import "GPBTestUtilities.h" #pragma mark - GPBAutocreatedDictionary Tests // These are hand written tests to double check some behaviors of the // GPBAutocreatedDictionary. The GPBDictionary+[type]Tests files are generate // tests. // NOTE: GPBAutocreatedDictionary is private to the library, users of the // library should never have to directly deal with this class. @interface GPBAutocreatedDictionaryTests : XCTestCase @end @implementation GPBAutocreatedDictionaryTests - (void)testEquality { GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; XCTAssertTrue([dict isEqual:@{}]); XCTAssertTrue([dict isEqualToDictionary:@{}]); XCTAssertFalse([dict isEqual:@{@"foo" : @"bar"}]); XCTAssertFalse([dict isEqualToDictionary:@{@"foo" : @"bar"}]); [dict setObject:@"bar" forKey:@"foo"]; XCTAssertFalse([dict isEqual:@{}]); XCTAssertFalse([dict isEqualToDictionary:@{}]); XCTAssertTrue([dict isEqual:@{@"foo" : @"bar"}]); XCTAssertTrue([dict isEqualToDictionary:@{@"foo" : @"bar"}]); XCTAssertFalse([dict isEqual:@{@"bar" : @"baz"}]); XCTAssertFalse([dict isEqualToDictionary:@{@"bar" : @"baz"}]); GPBAutocreatedDictionary *dict2 = [[GPBAutocreatedDictionary alloc] init]; XCTAssertFalse([dict isEqual:dict2]); XCTAssertFalse([dict isEqualToDictionary:dict2]); [dict2 setObject:@"mumble" forKey:@"foo"]; XCTAssertFalse([dict isEqual:dict2]); XCTAssertFalse([dict isEqualToDictionary:dict2]); [dict2 setObject:@"bar" forKey:@"foo"]; XCTAssertTrue([dict isEqual:dict2]); XCTAssertTrue([dict isEqualToDictionary:dict2]); [dict2 release]; [dict release]; } - (void)testCopy { { GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; NSDictionary *cpy = [dict copy]; XCTAssertTrue(cpy != dict); // Ptr compare XCTAssertTrue([cpy isKindOfClass:[NSDictionary class]]); XCTAssertFalse([cpy isKindOfClass:[GPBAutocreatedDictionary class]]); XCTAssertEqual(cpy.count, (NSUInteger)0); NSDictionary *cpy2 = [dict copy]; XCTAssertTrue(cpy2 != dict); // Ptr compare XCTAssertTrue(cpy2 != cpy); // Ptr compare XCTAssertTrue([cpy2 isKindOfClass:[NSDictionary class]]); XCTAssertFalse([cpy2 isKindOfClass:[GPBAutocreatedDictionary class]]); XCTAssertEqual(cpy2.count, (NSUInteger)0); [cpy2 release]; [cpy release]; [dict release]; } { GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; NSMutableDictionary *cpy = [dict mutableCopy]; XCTAssertTrue(cpy != dict); // Ptr compare XCTAssertTrue([cpy isKindOfClass:[NSMutableDictionary class]]); XCTAssertFalse([cpy isKindOfClass:[GPBAutocreatedDictionary class]]); XCTAssertEqual(cpy.count, (NSUInteger)0); NSMutableDictionary *cpy2 = [dict mutableCopy]; XCTAssertTrue(cpy2 != dict); // Ptr compare XCTAssertTrue(cpy2 != cpy); // Ptr compare XCTAssertTrue([cpy2 isKindOfClass:[NSMutableDictionary class]]); XCTAssertFalse([cpy2 isKindOfClass:[GPBAutocreatedDictionary class]]); XCTAssertEqual(cpy2.count, (NSUInteger)0); [cpy2 release]; [cpy release]; [dict release]; } { GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; dict[@"foo"] = @"bar"; dict[@"baz"] = @"mumble"; NSDictionary *cpy = [dict copy]; XCTAssertTrue(cpy != dict); // Ptr compare XCTAssertTrue([cpy isKindOfClass:[NSDictionary class]]); XCTAssertFalse([cpy isKindOfClass:[GPBAutocreatedDictionary class]]); XCTAssertEqual(cpy.count, (NSUInteger)2); XCTAssertEqualObjects(cpy[@"foo"], @"bar"); XCTAssertEqualObjects(cpy[@"baz"], @"mumble"); NSDictionary *cpy2 = [dict copy]; XCTAssertTrue(cpy2 != dict); // Ptr compare XCTAssertTrue(cpy2 != cpy); // Ptr compare XCTAssertTrue([cpy2 isKindOfClass:[NSDictionary class]]); XCTAssertFalse([cpy2 isKindOfClass:[GPBAutocreatedDictionary class]]); XCTAssertEqual(cpy2.count, (NSUInteger)2); XCTAssertEqualObjects(cpy2[@"foo"], @"bar"); XCTAssertEqualObjects(cpy2[@"baz"], @"mumble"); [cpy2 release]; [cpy release]; [dict release]; } { GPBAutocreatedDictionary *dict = [[GPBAutocreatedDictionary alloc] init]; dict[@"foo"] = @"bar"; dict[@"baz"] = @"mumble"; NSMutableDictionary *cpy = [dict mutableCopy]; XCTAssertTrue(cpy != dict); // Ptr compare XCTAssertTrue([cpy isKindOfClass:[NSMutableDictionary class]]); XCTAssertFalse([cpy isKindOfClass:[GPBAutocreatedDictionary class]]); XCTAssertEqual(cpy.count, (NSUInteger)2); XCTAssertEqualObjects(cpy[@"foo"], @"bar"); XCTAssertEqualObjects(cpy[@"baz"], @"mumble"); NSMutableDictionary *cpy2 = [dict mutableCopy]; XCTAssertTrue(cpy2 != dict); // Ptr compare XCTAssertTrue(cpy2 != cpy); // Ptr compare XCTAssertTrue([cpy2 isKindOfClass:[NSMutableDictionary class]]); XCTAssertFalse([cpy2 isKindOfClass:[GPBAutocreatedDictionary class]]); XCTAssertEqual(cpy2.count, (NSUInteger)2); XCTAssertEqualObjects(cpy2[@"foo"], @"bar"); XCTAssertEqualObjects(cpy2[@"baz"], @"mumble"); [cpy2 release]; [cpy release]; [dict release]; } } @end