1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
// 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 <Foundation/Foundation.h>
#import <XCTest/XCTest.h>
#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
|