| 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 |