• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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