OLD | NEW |
1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 | 48 |
49 // TODO(thomasvl): this should get split into a few files of logic junks, it is | 49 // TODO(thomasvl): this should get split into a few files of logic junks, it is |
50 // a jumble of things at the moment (and the testutils have a bunch of the real | 50 // a jumble of things at the moment (and the testutils have a bunch of the real |
51 // assertions). | 51 // assertions). |
52 | 52 |
53 - (TestAllTypes *)mergeSource { | 53 - (TestAllTypes *)mergeSource { |
54 TestAllTypes *message = [TestAllTypes message]; | 54 TestAllTypes *message = [TestAllTypes message]; |
55 [message setOptionalInt32:1]; | 55 [message setOptionalInt32:1]; |
56 [message setOptionalString:@"foo"]; | 56 [message setOptionalString:@"foo"]; |
57 [message setOptionalForeignMessage:[ForeignMessage message]]; | 57 [message setOptionalForeignMessage:[ForeignMessage message]]; |
58 message.repeatedStringArray = [NSMutableArray array]; | |
59 [message.repeatedStringArray addObject:@"bar"]; | 58 [message.repeatedStringArray addObject:@"bar"]; |
60 return message; | 59 return message; |
61 } | 60 } |
62 | 61 |
63 - (TestAllTypes *)mergeDestination { | 62 - (TestAllTypes *)mergeDestination { |
64 TestAllTypes *message = [TestAllTypes message]; | 63 TestAllTypes *message = [TestAllTypes message]; |
65 [message setOptionalInt64:2]; | 64 [message setOptionalInt64:2]; |
66 [message setOptionalString:@"baz"]; | 65 [message setOptionalString:@"baz"]; |
67 ForeignMessage *foreignMessage = [ForeignMessage message]; | 66 ForeignMessage *foreignMessage = [ForeignMessage message]; |
68 [foreignMessage setC:3]; | 67 [foreignMessage setC:3]; |
69 [message setOptionalForeignMessage:foreignMessage]; | 68 [message setOptionalForeignMessage:foreignMessage]; |
70 message.repeatedStringArray = [NSMutableArray array]; | |
71 [message.repeatedStringArray addObject:@"qux"]; | 69 [message.repeatedStringArray addObject:@"qux"]; |
72 return message; | 70 return message; |
73 } | 71 } |
74 | 72 |
75 - (TestAllTypes *)mergeDestinationWithoutForeignMessageIvar { | 73 - (TestAllTypes *)mergeDestinationWithoutForeignMessageIvar { |
76 TestAllTypes *message = [TestAllTypes message]; | 74 TestAllTypes *message = [TestAllTypes message]; |
77 [message setOptionalInt64:2]; | 75 [message setOptionalInt64:2]; |
78 [message setOptionalString:@"baz"]; | 76 [message setOptionalString:@"baz"]; |
79 message.repeatedStringArray = [NSMutableArray array]; | |
80 [message.repeatedStringArray addObject:@"qux"]; | 77 [message.repeatedStringArray addObject:@"qux"]; |
81 return message; | 78 return message; |
82 } | 79 } |
83 | 80 |
84 - (TestAllTypes *)mergeResult { | 81 - (TestAllTypes *)mergeResult { |
85 TestAllTypes *message = [TestAllTypes message]; | 82 TestAllTypes *message = [TestAllTypes message]; |
86 [message setOptionalInt32:1]; | 83 [message setOptionalInt32:1]; |
87 [message setOptionalInt64:2]; | 84 [message setOptionalInt64:2]; |
88 [message setOptionalString:@"foo"]; | 85 [message setOptionalString:@"foo"]; |
89 ForeignMessage *foreignMessage = [ForeignMessage message]; | 86 ForeignMessage *foreignMessage = [ForeignMessage message]; |
90 [foreignMessage setC:3]; | 87 [foreignMessage setC:3]; |
91 [message setOptionalForeignMessage:foreignMessage]; | 88 [message setOptionalForeignMessage:foreignMessage]; |
92 message.repeatedStringArray = [NSMutableArray array]; | |
93 [message.repeatedStringArray addObject:@"qux"]; | 89 [message.repeatedStringArray addObject:@"qux"]; |
94 [message.repeatedStringArray addObject:@"bar"]; | 90 [message.repeatedStringArray addObject:@"bar"]; |
95 return message; | 91 return message; |
96 } | 92 } |
97 | 93 |
98 - (TestAllTypes *)mergeResultForDestinationWithoutForeignMessageIvar { | 94 - (TestAllTypes *)mergeResultForDestinationWithoutForeignMessageIvar { |
99 TestAllTypes *message = [TestAllTypes message]; | 95 TestAllTypes *message = [TestAllTypes message]; |
100 [message setOptionalInt32:1]; | 96 [message setOptionalInt32:1]; |
101 [message setOptionalInt64:2]; | 97 [message setOptionalInt64:2]; |
102 [message setOptionalString:@"foo"]; | 98 [message setOptionalString:@"foo"]; |
103 ForeignMessage *foreignMessage = [ForeignMessage message]; | 99 ForeignMessage *foreignMessage = [ForeignMessage message]; |
104 [message setOptionalForeignMessage:foreignMessage]; | 100 [message setOptionalForeignMessage:foreignMessage]; |
105 message.repeatedStringArray = [NSMutableArray array]; | |
106 [message.repeatedStringArray addObject:@"qux"]; | 101 [message.repeatedStringArray addObject:@"qux"]; |
107 [message.repeatedStringArray addObject:@"bar"]; | 102 [message.repeatedStringArray addObject:@"bar"]; |
108 return message; | 103 return message; |
109 } | 104 } |
110 | 105 |
111 - (TestAllExtensions *)mergeExtensionsDestination { | 106 - (TestAllExtensions *)mergeExtensionsDestination { |
112 TestAllExtensions *message = [TestAllExtensions message]; | 107 TestAllExtensions *message = [TestAllExtensions message]; |
113 [message setExtension:[UnittestRoot optionalInt32Extension] value:@5]; | 108 [message setExtension:[UnittestRoot optionalInt32Extension] value:@5]; |
114 [message setExtension:[UnittestRoot optionalStringExtension] value:@"foo"]; | 109 [message setExtension:[UnittestRoot optionalStringExtension] value:@"foo"]; |
115 ForeignMessage *foreignMessage = [ForeignMessage message]; | 110 ForeignMessage *foreignMessage = [ForeignMessage message]; |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 TestRequiredForeign *message = [TestRequiredForeign message]; | 236 TestRequiredForeign *message = [TestRequiredForeign message]; |
242 | 237 |
243 XCTAssertTrue(message.initialized); | 238 XCTAssertTrue(message.initialized); |
244 | 239 |
245 [message setOptionalMessage:[TestRequired message]]; | 240 [message setOptionalMessage:[TestRequired message]]; |
246 XCTAssertFalse(message.initialized); | 241 XCTAssertFalse(message.initialized); |
247 | 242 |
248 [message setOptionalMessage:self.testRequiredInitialized]; | 243 [message setOptionalMessage:self.testRequiredInitialized]; |
249 XCTAssertTrue(message.initialized); | 244 XCTAssertTrue(message.initialized); |
250 | 245 |
251 message.repeatedMessageArray = [NSMutableArray array]; | |
252 [message.repeatedMessageArray addObject:[TestRequired message]]; | 246 [message.repeatedMessageArray addObject:[TestRequired message]]; |
253 XCTAssertFalse(message.initialized); | 247 XCTAssertFalse(message.initialized); |
254 | 248 |
255 [message.repeatedMessageArray removeAllObjects]; | 249 [message.repeatedMessageArray removeAllObjects]; |
256 [message.repeatedMessageArray addObject:self.testRequiredInitialized]; | 250 [message.repeatedMessageArray addObject:self.testRequiredInitialized]; |
257 XCTAssertTrue(message.initialized); | 251 XCTAssertTrue(message.initialized); |
258 } | 252 } |
259 | 253 |
260 - (void)testRequiredExtension { | 254 - (void)testRequiredExtension { |
261 TestAllExtensions *message = [TestAllExtensions message]; | 255 TestAllExtensions *message = [TestAllExtensions message]; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 | 287 |
294 - (void)testInitialized { | 288 - (void)testInitialized { |
295 // We're mostly testing that no exception is thrown. | 289 // We're mostly testing that no exception is thrown. |
296 TestRequired *message = [TestRequired message]; | 290 TestRequired *message = [TestRequired message]; |
297 XCTAssertFalse(message.initialized); | 291 XCTAssertFalse(message.initialized); |
298 } | 292 } |
299 | 293 |
300 - (void)testDataFromNestedUninitialized { | 294 - (void)testDataFromNestedUninitialized { |
301 TestRequiredForeign *message = [TestRequiredForeign message]; | 295 TestRequiredForeign *message = [TestRequiredForeign message]; |
302 [message setOptionalMessage:[TestRequired message]]; | 296 [message setOptionalMessage:[TestRequired message]]; |
303 message.repeatedMessageArray = [NSMutableArray array]; | |
304 [message.repeatedMessageArray addObject:[TestRequired message]]; | 297 [message.repeatedMessageArray addObject:[TestRequired message]]; |
305 [message.repeatedMessageArray addObject:[TestRequired message]]; | 298 [message.repeatedMessageArray addObject:[TestRequired message]]; |
306 NSData *data = [message data]; | 299 NSData *data = [message data]; |
307 // In DEBUG, the data generation will fail, but in non DEBUG, it passes | 300 // In DEBUG, the data generation will fail, but in non DEBUG, it passes |
308 // because the check isn't done (for speed). | 301 // because the check isn't done (for speed). |
309 #ifdef DEBUG | 302 #ifdef DEBUG |
310 XCTAssertNil(data); | 303 XCTAssertNil(data); |
311 #else | 304 #else |
312 XCTAssertNotNil(data); | 305 XCTAssertNotNil(data); |
313 XCTAssertFalse(message.initialized); | 306 XCTAssertFalse(message.initialized); |
314 #endif // DEBUG | 307 #endif // DEBUG |
315 } | 308 } |
316 | 309 |
317 - (void)testNestedInitialized { | 310 - (void)testNestedInitialized { |
318 // We're mostly testing that no exception is thrown. | 311 // We're mostly testing that no exception is thrown. |
319 | 312 |
320 TestRequiredForeign *message = [TestRequiredForeign message]; | 313 TestRequiredForeign *message = [TestRequiredForeign message]; |
321 [message setOptionalMessage:[TestRequired message]]; | 314 [message setOptionalMessage:[TestRequired message]]; |
322 message.repeatedMessageArray = [NSMutableArray array]; | |
323 [message.repeatedMessageArray addObject:[TestRequired message]]; | 315 [message.repeatedMessageArray addObject:[TestRequired message]]; |
324 [message.repeatedMessageArray addObject:[TestRequired message]]; | 316 [message.repeatedMessageArray addObject:[TestRequired message]]; |
325 | 317 |
326 XCTAssertFalse(message.initialized); | 318 XCTAssertFalse(message.initialized); |
327 } | 319 } |
328 | 320 |
329 - (void)testParseUninitialized { | 321 - (void)testParseUninitialized { |
330 NSError *error = nil; | 322 NSError *error = nil; |
331 TestRequired *msg = | 323 TestRequired *msg = |
332 [TestRequired parseFromData:GPBEmptyNSData() error:&error]; | 324 [TestRequired parseFromData:GPBEmptyNSData() error:&error]; |
(...skipping 1488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1821 | 1813 |
1822 - (void)testEnumDescriptorFromExtensionDescriptor { | 1814 - (void)testEnumDescriptorFromExtensionDescriptor { |
1823 GPBExtensionDescriptor *extDescriptor = | 1815 GPBExtensionDescriptor *extDescriptor = |
1824 [UnittestRoot optionalForeignEnumExtension]; | 1816 [UnittestRoot optionalForeignEnumExtension]; |
1825 XCTAssertEqual(extDescriptor.dataType, GPBDataTypeEnum); | 1817 XCTAssertEqual(extDescriptor.dataType, GPBDataTypeEnum); |
1826 GPBEnumDescriptor *enumDescriptor = extDescriptor.enumDescriptor; | 1818 GPBEnumDescriptor *enumDescriptor = extDescriptor.enumDescriptor; |
1827 GPBEnumDescriptor *expectedDescriptor = ForeignEnum_EnumDescriptor(); | 1819 GPBEnumDescriptor *expectedDescriptor = ForeignEnum_EnumDescriptor(); |
1828 XCTAssertEqualObjects(enumDescriptor, expectedDescriptor); | 1820 XCTAssertEqualObjects(enumDescriptor, expectedDescriptor); |
1829 } | 1821 } |
1830 | 1822 |
| 1823 - (void)testPropertyNaming { |
| 1824 // objectivec_helpers.cc has some special handing to get proper all caps |
| 1825 // for a few cases to meet objc developer expectations. |
| 1826 // |
| 1827 // This "test" confirms that the expected names are generated, otherwise the |
| 1828 // test itself will fail to compile. |
| 1829 ObjCPropertyNaming *msg = [ObjCPropertyNaming message]; |
| 1830 // On their own, at the end, in the middle. |
| 1831 msg.URL = @"good"; |
| 1832 msg.thumbnailURL = @"good"; |
| 1833 msg.URLFoo = @"good"; |
| 1834 msg.someURLBlah = @"good"; |
| 1835 msg.HTTP = @"good"; |
| 1836 msg.HTTPS = @"good"; |
| 1837 // No caps since it was "urls". |
| 1838 [msg.urlsArray addObject:@"good"]; |
| 1839 } |
| 1840 |
1831 - (void)testEnumNaming { | 1841 - (void)testEnumNaming { |
1832 // objectivec_helpers.cc has some interesting cases to deal with in | 1842 // objectivec_helpers.cc has some interesting cases to deal with in |
1833 // EnumValueName/EnumValueShortName. Confirm that things generated as | 1843 // EnumValueName/EnumValueShortName. Confirm that things generated as |
1834 // expected. | 1844 // expected. |
1835 | 1845 |
1836 // This block just has to compile to confirm we got the expected types/names. | 1846 // This block just has to compile to confirm we got the expected types/names. |
1837 // The *_IsValidValue() calls are just there to keep the projects warnings | 1847 // The *_IsValidValue() calls are just there to keep the projects warnings |
1838 // flags happy by providing use of the variables/values. | 1848 // flags happy by providing use of the variables/values. |
1839 | 1849 |
1840 Foo aFoo = Foo_SerializedSize; | 1850 Foo aFoo = Foo_SerializedSize; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1930 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:0], | 1940 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:0], |
1931 EnumTestMsg_MyEnum_Zero); | 1941 EnumTestMsg_MyEnum_Zero); |
1932 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:1], EnumTestMsg_MyEnum_One); | 1942 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:1], EnumTestMsg_MyEnum_One); |
1933 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:2], EnumTestMsg_MyEnum_Two); | 1943 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:2], EnumTestMsg_MyEnum_Two); |
1934 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:3], | 1944 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:3], |
1935 EnumTestMsg_MyEnum_NegOne); | 1945 EnumTestMsg_MyEnum_NegOne); |
1936 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:4], | 1946 XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:4], |
1937 EnumTestMsg_MyEnum_NegTwo); | 1947 EnumTestMsg_MyEnum_NegTwo); |
1938 } | 1948 } |
1939 | 1949 |
| 1950 - (void)testOneBasedEnumHolder { |
| 1951 // Test case for https://github.com/google/protobuf/issues/1453 |
| 1952 // Message with no explicit defaults, but a non zero default for an enum. |
| 1953 MessageWithOneBasedEnum *enumMsg = [MessageWithOneBasedEnum message]; |
| 1954 XCTAssertEqual(enumMsg.enumField, MessageWithOneBasedEnum_OneBasedEnum_One); |
| 1955 } |
| 1956 |
| 1957 - (void)testBoolOffsetUsage { |
| 1958 // Bools use storage within has_bits; this test ensures that this is honored |
| 1959 // in all places where things should crash or fail based on reading out of |
| 1960 // field storage instead. |
| 1961 BoolOnlyMessage *msg1 = [BoolOnlyMessage message]; |
| 1962 BoolOnlyMessage *msg2 = [BoolOnlyMessage message]; |
| 1963 |
| 1964 msg1.boolField1 = YES; |
| 1965 msg2.boolField1 = YES; |
| 1966 msg1.boolField3 = YES; |
| 1967 msg2.boolField3 = YES; |
| 1968 msg1.boolField5 = YES; |
| 1969 msg2.boolField5 = YES; |
| 1970 msg1.boolField7 = YES; |
| 1971 msg2.boolField7 = YES; |
| 1972 msg1.boolField9 = YES; |
| 1973 msg2.boolField9 = YES; |
| 1974 msg1.boolField11 = YES; |
| 1975 msg2.boolField11 = YES; |
| 1976 msg1.boolField13 = YES; |
| 1977 msg2.boolField13 = YES; |
| 1978 msg1.boolField15 = YES; |
| 1979 msg2.boolField15 = YES; |
| 1980 msg1.boolField17 = YES; |
| 1981 msg2.boolField17 = YES; |
| 1982 msg1.boolField19 = YES; |
| 1983 msg2.boolField19 = YES; |
| 1984 msg1.boolField21 = YES; |
| 1985 msg2.boolField21 = YES; |
| 1986 msg1.boolField23 = YES; |
| 1987 msg2.boolField23 = YES; |
| 1988 msg1.boolField25 = YES; |
| 1989 msg2.boolField25 = YES; |
| 1990 msg1.boolField27 = YES; |
| 1991 msg2.boolField27 = YES; |
| 1992 msg1.boolField29 = YES; |
| 1993 msg2.boolField29 = YES; |
| 1994 msg1.boolField31 = YES; |
| 1995 msg2.boolField31 = YES; |
| 1996 |
| 1997 msg1.boolField32 = YES; |
| 1998 msg2.boolField32 = YES; |
| 1999 |
| 2000 XCTAssertTrue(msg1 != msg2); // Different pointers. |
| 2001 XCTAssertEqual([msg1 hash], [msg2 hash]); |
| 2002 XCTAssertEqualObjects(msg1, msg2); |
| 2003 |
| 2004 BoolOnlyMessage *msg1Prime = [[msg1 copy] autorelease]; |
| 2005 XCTAssertTrue(msg1Prime != msg1); // Different pointers. |
| 2006 XCTAssertEqual([msg1 hash], [msg1Prime hash]); |
| 2007 XCTAssertEqualObjects(msg1, msg1Prime); |
| 2008 |
| 2009 // Field set in one, but not the other means they don't match (even if |
| 2010 // set to default value). |
| 2011 msg1Prime.boolField2 = NO; |
| 2012 XCTAssertNotEqualObjects(msg1Prime, msg1); |
| 2013 // And when set to different values. |
| 2014 msg1.boolField2 = YES; |
| 2015 XCTAssertNotEqualObjects(msg1Prime, msg1); |
| 2016 // And then they match again. |
| 2017 msg1.boolField2 = NO; |
| 2018 XCTAssertEqualObjects(msg1Prime, msg1); |
| 2019 XCTAssertEqual([msg1 hash], [msg1Prime hash]); |
| 2020 } |
| 2021 |
1940 @end | 2022 @end |
OLD | NEW |