Rename methods to avoid ObjC KVC collisions. (#1699)

Note: Breaking API change on the Dictionary classes.

The numeric value classes were using "Value" in the naming, but this silently
collided with the KVC category on NSObject; meaning KVC code could break up a
keypath and call these selectors with the wrong types leading to crashes (even
though the code all would compile cleanly).

- Rename the methods to use the "type" instead of literal "Value".
- Update all the impls and tests.
- Enable the warning that will catch issues like this in the future.

Fixes https://github.com/google/protobuf/issues/1616
pull/1702/head
Thomas Van Lenten 9 years ago committed by GitHub
parent 1a5333b8c1
commit a230b5d209
  1. 823
      objectivec/GPBDictionary.h
  2. 1524
      objectivec/GPBDictionary.m
  3. 8
      objectivec/GPBProtocolBuffers.m
  4. 812
      objectivec/Tests/GPBDictionaryTests+Bool.m
  5. 1760
      objectivec/Tests/GPBDictionaryTests+Int32.m
  6. 1760
      objectivec/Tests/GPBDictionaryTests+Int64.m
  7. 1760
      objectivec/Tests/GPBDictionaryTests+String.m
  8. 1760
      objectivec/Tests/GPBDictionaryTests+UInt32.m
  9. 1760
      objectivec/Tests/GPBDictionaryTests+UInt64.m
  10. 416
      objectivec/Tests/GPBDictionaryTests.pddm
  11. 84
      objectivec/Tests/GPBMessageTests+Serialization.m
  12. 8
      objectivec/Tests/GPBMessageTests.m
  13. 40
      objectivec/Tests/GPBSwiftTests.swift
  14. 28
      objectivec/Tests/GPBTestUtilities.m

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -31,6 +31,14 @@
// If you want to build protocol buffers in your own project without adding the // If you want to build protocol buffers in your own project without adding the
// project dependency, you can just add this file. // project dependency, you can just add this file.
// This warning seems to treat code differently when it is #imported than when
// it is inline in the file. GPBDictionary.m compiles cleanly in other targets,
// but when #imported here it triggers a bunch of warnings that don't make
// much sense, and don't trigger when compiled directly. So we shut off the
// warnings here.
#pragma clang diagnostic ignored "-Wnullability-completeness"
#import "GPBArray.m" #import "GPBArray.m"
#import "GPBCodedInputStream.m" #import "GPBCodedInputStream.m"
#import "GPBCodedOutputStream.m" #import "GPBCodedOutputStream.m"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -69,8 +69,8 @@
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init]; //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 0U); //% XCTAssertEqual(dict.count, 0U);
//%VALUE_NOT_FOUND##VHELPER(dict, KEY1) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
//% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) { //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) {
//% #pragma unused(aKey, a##VNAME$u, stop) //% #pragma unused(aKey, a##VNAME$u, stop)
//% XCTFail(@"Shouldn't get here!"); //% XCTFail(@"Shouldn't get here!");
//% }]; //% }];
@ -78,12 +78,12 @@
//%} //%}
//% //%
//%- (void)testOne { //%- (void)testOne {
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWith##VNAME$u##:VAL1 forKey:KEY1]; //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWith##VALUE_NAME$u##:VAL1 forKey:KEY1];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 1U); //% XCTAssertEqual(dict.count, 1U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) { //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) {
//% XCTAssertEqual##KSUFFIX(aKey, KEY1); //% XCTAssertEqual##KSUFFIX(aKey, KEY1);
//% XCTAssertEqual##VSUFFIX(a##VNAME$u, VAL1); //% XCTAssertEqual##VSUFFIX(a##VNAME$u, VAL1);
//% XCTAssertNotEqual(stop, NULL); //% XCTAssertNotEqual(stop, NULL);
@ -94,20 +94,20 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME$u##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 3U); //% XCTAssertEqual(dict.count, 3U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY4) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
//% //%
//% __block NSUInteger idx = 0; //% __block NSUInteger idx = 0;
//% KEY_TYPE KisP##*seenKeys = malloc(3 * sizeof(KEY_TYPE##KisP)); //% KEY_TYPE KisP##*seenKeys = malloc(3 * sizeof(KEY_TYPE##KisP));
//% VALUE_TYPE *seen##VNAME$u##s = malloc(3 * sizeof(VALUE_TYPE)); //% VALUE_TYPE *seen##VNAME$u##s = malloc(3 * sizeof(VALUE_TYPE));
//% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) { //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) {
//% XCTAssertLessThan(idx, 3U); //% XCTAssertLessThan(idx, 3U);
//% seenKeys[idx] = aKey; //% seenKeys[idx] = aKey;
//% seen##VNAME$u##s[idx] = a##VNAME$u##; //% seen##VNAME$u##s[idx] = a##VNAME$u##;
@ -129,7 +129,7 @@
//% //%
//% // Stopping the enumeration. //% // Stopping the enumeration.
//% idx = 0; //% idx = 0;
//% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) { //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) {
//% #pragma unused(aKey, a##VNAME$u) //% #pragma unused(aKey, a##VNAME$u)
//% if (idx == 1) *stop = YES; //% if (idx == 1) *stop = YES;
//% XCTAssertNotEqual(idx, 2U); //% XCTAssertNotEqual(idx, 2U);
@ -145,29 +145,29 @@
//% const VALUE_TYPE k##VNAME$u##s2[] = { VAL1, VAL4, VAL3 }; //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL1, VAL4, VAL3 };
//% const VALUE_TYPE k##VNAME$u##s3[] = { VAL1, VAL2, VAL3, VAL4 }; //% const VALUE_TYPE k##VNAME$u##s3[] = { VAL1, VAL2, VAL3, VAL4 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s1 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys1 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)];
//% XCTAssertNotNil(dict1); //% XCTAssertNotNil(dict1);
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1prime = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1prime =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s1 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys1 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)];
//% XCTAssertNotNil(dict1prime); //% XCTAssertNotNil(dict1prime);
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s2 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s2
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys1 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s2)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s2)];
//% XCTAssertNotNil(dict2); //% XCTAssertNotNil(dict2);
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict3 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict3 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s1 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys2 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys2
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)];
//% XCTAssertNotNil(dict3); //% XCTAssertNotNil(dict3);
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict4 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict4 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s3 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s3
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys1 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s3)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s3)];
//% XCTAssertNotNil(dict4); //% XCTAssertNotNil(dict4);
//% //%
//% // 1/1Prime should be different objects, but equal. //% // 1/1Prime should be different objects, but equal.
@ -196,9 +196,9 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% //%
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = [dict copy]; //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = [dict copy];
@ -217,9 +217,9 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% //%
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
@ -237,23 +237,23 @@
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% //%
//% XCTAssertEqual(dict.count, 0U); //% XCTAssertEqual(dict.count, 0U);
//% [dict set##VNAME$u##:VAL1 forKey:KEY1]; //% [dict set##VALUE_NAME##:VAL1 forKey:KEY1];
//% XCTAssertEqual(dict.count, 1U); //% XCTAssertEqual(dict.count, 1U);
//% //%
//% const KEY_TYPE KisP##kKeys[] = { KEY2, KEY3, KEY4 }; //% const KEY_TYPE KisP##kKeys[] = { KEY2, KEY3, KEY4 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL2, VAL3, VAL4 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL2, VAL3, VAL4 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict2); //% XCTAssertNotNil(dict2);
//% [dict add##VACCESSOR##EntriesFromDictionary:dict2]; //% [dict add##VACCESSOR##EntriesFromDictionary:dict2];
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//% //%
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
//% [dict2 release]; //% [dict2 release];
//%} //%}
//% //%
@ -261,40 +261,40 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//% //%
//% [dict remove##VNAME$u##ForKey:KEY2]; //% [dict remove##VALUE_NAME##ForKey:KEY2];
//% XCTAssertEqual(dict.count, 3U); //% XCTAssertEqual(dict.count, 3U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
//% //%
//% // Remove again does nothing. //% // Remove again does nothing.
//% [dict remove##VNAME$u##ForKey:KEY2]; //% [dict remove##VALUE_NAME##ForKey:KEY2];
//% XCTAssertEqual(dict.count, 3U); //% XCTAssertEqual(dict.count, 3U);
//%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
//% //%
//% [dict remove##VNAME$u##ForKey:KEY4]; //% [dict remove##VALUE_NAME##ForKey:KEY4];
//% XCTAssertEqual(dict.count, 2U); //% XCTAssertEqual(dict.count, 2U);
//%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY4) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
//% //%
//% [dict removeAll]; //% [dict removeAll];
//% XCTAssertEqual(dict.count, 0U); //% XCTAssertEqual(dict.count, 0U);
//%VALUE_NOT_FOUND##VHELPER(dict, KEY1) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY3) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY3)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY4) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
//% [dict release]; //% [dict release];
//%} //%}
//% //%
@ -302,43 +302,43 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2, KEY3, KEY4 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2, VAL3, VAL4 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
//% //%
//% [dict set##VNAME$u##:VAL4 forKey:KEY1]; //% [dict set##VALUE_NAME##:VAL4 forKey:KEY1];
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL4) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL4)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL4) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL4)
//% //%
//% [dict set##VNAME$u##:VAL2 forKey:KEY4]; //% [dict set##VALUE_NAME##:VAL2 forKey:KEY4];
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL4) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL4)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL3)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL2)
//% //%
//% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY3 }; //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY3 };
//% const VALUE_TYPE k##VNAME$u##s2[] = { VAL3, VAL1 }; //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL3, VAL1 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s2 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s2
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys2 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys2
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s2)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s2)];
//% XCTAssertNotNil(dict2); //% XCTAssertNotNil(dict2);
//% [dict add##VACCESSOR##EntriesFromDictionary:dict2]; //% [dict add##VACCESSOR##EntriesFromDictionary:dict2];
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL4) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL4)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL3)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY3, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY3, VAL1)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY4, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY4, VAL2)
//% //%
//% [dict2 release]; //% [dict2 release];
//% [dict release]; //% [dict release];
@ -369,15 +369,15 @@
//% XCTAssertEqual(dict.count, 3U); //% XCTAssertEqual(dict.count, 3U);
//% XCTAssertTrue(dict.validationFunc == TestingEnum_IsValidValue); // Pointer comparison //% XCTAssertTrue(dict.validationFunc == TestingEnum_IsValidValue); // Pointer comparison
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL1)
//%TEST_VALUE##VHELPER(dict, value, KEY2, kGPBUnrecognizedEnumeratorValue) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY2, kGPBUnrecognizedEnumeratorValue)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY3, VAL3) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY3, VAL3)
//%RAW_VALUE_NOT_FOUND##VHELPER(dict, KEY4) //%RAW_VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
//% //%
//% __block NSUInteger idx = 0; //% __block NSUInteger idx = 0;
//% KEY_TYPE KisP##*seenKeys = malloc(3 * sizeof(KEY_TYPE##KisP)); //% KEY_TYPE KisP##*seenKeys = malloc(3 * sizeof(KEY_TYPE##KisP));
//% VALUE_TYPE *seenValues = malloc(3 * sizeof(VALUE_TYPE)); //% VALUE_TYPE *seenValues = malloc(3 * sizeof(VALUE_TYPE));
//% [dict enumerateKeysAndValuesUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE aValue, BOOL *stop) { //% [dict enumerateKeysAndEnumsUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE aValue, BOOL *stop) {
//% XCTAssertLessThan(idx, 3U); //% XCTAssertLessThan(idx, 3U);
//% seenKeys[idx] = aKey; //% seenKeys[idx] = aKey;
//% seenValues[idx] = aValue; //% seenValues[idx] = aValue;
@ -538,7 +538,7 @@
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% //%
//% XCTAssertEqual(dict.count, 0U); //% XCTAssertEqual(dict.count, 0U);
//% XCTAssertThrowsSpecificNamed([dict setValue:VAL2 forKey:KEY2], // Unknown //% XCTAssertThrowsSpecificNamed([dict setEnum:VAL2 forKey:KEY2], // Unknown
//% NSException, NSInvalidArgumentException); //% NSException, NSInvalidArgumentException);
//% XCTAssertEqual(dict.count, 0U); //% XCTAssertEqual(dict.count, 0U);
//% [dict setRawValue:VAL2 forKey:KEY2]; // Unknown //% [dict setRawValue:VAL2 forKey:KEY2]; // Unknown
@ -547,18 +547,18 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY3, KEY4 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY3, KEY4 };
//% const VALUE_TYPE kValues[] = { VAL1, VAL3, VAL4 }; // Unknown //% const VALUE_TYPE kValues[] = { VAL1, VAL3, VAL4 }; // Unknown
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithValues:kValues //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWithEnums:kValues
//% KEY_NAME$S VALUE_NAME$S forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S count:GPBARRAYSIZE(kValues)]; //% KEY_NAME$S VALUE_NAME$S count:GPBARRAYSIZE(kValues)];
//% XCTAssertNotNil(dict2); //% XCTAssertNotNil(dict2);
//% [dict addRawEntriesFromDictionary:dict2]; //% [dict addRawEntriesFromDictionary:dict2];
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//% //%
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(dict, value, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY1, VAL1)
//%TEST_VALUE##VHELPER(dict, value, KEY2, kGPBUnrecognizedEnumeratorValue) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY2, kGPBUnrecognizedEnumeratorValue)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
//%TEST_VALUE##VHELPER(dict, value, KEY4, kGPBUnrecognizedEnumeratorValue) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY4, kGPBUnrecognizedEnumeratorValue)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
//% [dict2 release]; //% [dict2 release];
//%} //%}
@ -574,34 +574,34 @@
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//% //%
//% [dict removeValueForKey:KEY2]; //% [dict removeEnumForKey:KEY2];
//% XCTAssertEqual(dict.count, 3U); //% XCTAssertEqual(dict.count, 3U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(dict, value, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
//% //%
//% // Remove again does nothing. //% // Remove again does nothing.
//% [dict removeValueForKey:KEY2]; //% [dict removeEnumForKey:KEY2];
//% XCTAssertEqual(dict.count, 3U); //% XCTAssertEqual(dict.count, 3U);
//%TEST_VALUE##VHELPER(dict, value, KEY1, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
//% //%
//% [dict removeValueForKey:KEY4]; //% [dict removeEnumForKey:KEY4];
//% XCTAssertEqual(dict.count, 2U); //% XCTAssertEqual(dict.count, 2U);
//%TEST_VALUE##VHELPER(dict, value, KEY1, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY4) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
//% //%
//% [dict removeAll]; //% [dict removeAll];
//% XCTAssertEqual(dict.count, 0U); //% XCTAssertEqual(dict.count, 0U);
//%VALUE_NOT_FOUND##VHELPER(dict, KEY1) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY3) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY3)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY4) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY4)
//% [dict release]; //% [dict release];
//%} //%}
//% //%
@ -615,32 +615,32 @@
//% KEY_NAME$S VALUE_NAME$S count:GPBARRAYSIZE(kValues)]; //% KEY_NAME$S VALUE_NAME$S count:GPBARRAYSIZE(kValues)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(dict, value, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, value)TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY1, VAL1)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
//% //%
//% XCTAssertThrowsSpecificNamed([dict setValue:VAL4 forKey:KEY1], // Unknown //% XCTAssertThrowsSpecificNamed([dict setEnum:VAL4 forKey:KEY1], // Unknown
//% NSException, NSInvalidArgumentException); //% NSException, NSInvalidArgumentException);
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//%TEST_VALUE##VHELPER(dict, value, KEY1, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY1, VAL1)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
//% //%
//% [dict setRawValue:VAL4 forKey:KEY1]; // Unknown //% [dict setRawValue:VAL4 forKey:KEY1]; // Unknown
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY4, VAL4)
//% //%
//% [dict setRawValue:VAL1 forKey:KEY4]; //% [dict setRawValue:VAL1 forKey:KEY4];
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY2, VAL2)
//%TEST_VALUE##VHELPER(dict, value, KEY3, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY3, VAL3)
//%TEST_VALUE##VHELPER(dict, value, KEY4, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY4, VAL1)
//% //%
//% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY3 }; //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY3 };
//% const VALUE_TYPE kValues2[] = { VAL3, VAL2 }; // Unknown //% const VALUE_TYPE kValues2[] = { VAL3, VAL2 }; // Unknown
@ -653,9 +653,9 @@
//% [dict addRawEntriesFromDictionary:dict2]; //% [dict addRawEntriesFromDictionary:dict2];
//% XCTAssertEqual(dict.count, 4U); //% XCTAssertEqual(dict.count, 4U);
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY1, VAL4)
//%TEST_VALUE##VHELPER(dict, value, KEY2, VAL3) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY2, VAL3)
//%TEST_RAW_VALUE##VHELPER(dict, value, KEY3, VAL2) //%TEST_RAW_VALUE##VHELPER(dict, value, KEY3, VAL2)
//%TEST_VALUE##VHELPER(dict, value, KEY4, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, value, KEY4, VAL1)
//% //%
//% [dict2 release]; //% [dict2 release];
//% [dict release]; //% [dict release];
@ -694,19 +694,19 @@
//%PDDM-DEFINE DECLARE_VALUE_STORAGEPOD(VALUE_TYPE, NAME) //%PDDM-DEFINE DECLARE_VALUE_STORAGEPOD(VALUE_TYPE, NAME)
//% VALUE_TYPE NAME; //% VALUE_TYPE NAME;
//% //%
//%PDDM-DEFINE VALUE_NOT_FOUNDPOD(DICT, KEY) //%PDDM-DEFINE VALUE_NOT_FOUNDPOD(VALUE_NAME, DICT, KEY)
//% XCTAssertFalse([DICT valueForKey:KEY value:NULL]); //% XCTAssertFalse([DICT get##VALUE_NAME##:NULL forKey:KEY]);
//%PDDM-DEFINE TEST_VALUEPOD(DICT, STORAGE, KEY, VALUE) //%PDDM-DEFINE TEST_VALUEPOD(VALUE_NAME, DICT, STORAGE, KEY, VALUE)
//% XCTAssertTrue([DICT valueForKey:KEY value:NULL]); //% XCTAssertTrue([DICT get##VALUE_NAME##:NULL forKey:KEY]);
//% XCTAssertTrue([DICT valueForKey:KEY value:&STORAGE]); //% XCTAssertTrue([DICT get##VALUE_NAME##:&STORAGE forKey:KEY]);
//% XCTAssertEqual(STORAGE, VALUE); //% XCTAssertEqual(STORAGE, VALUE);
//%PDDM-DEFINE COMPARE_KEYS(KEY1, KEY2) //%PDDM-DEFINE COMPARE_KEYS(KEY1, KEY2)
//%KEY1 == KEY2 //%KEY1 == KEY2
//%PDDM-DEFINE RAW_VALUE_NOT_FOUNDPOD(DICT, KEY) //%PDDM-DEFINE RAW_VALUE_NOT_FOUNDPOD(VALUE_NAME, DICT, KEY)
//% XCTAssertFalse([DICT valueForKey:KEY rawValue:NULL]); //% XCTAssertFalse([DICT getRawValue:NULL forKey:KEY]);
//%PDDM-DEFINE TEST_RAW_VALUEPOD(DICT, STORAGE, KEY, VALUE) //%PDDM-DEFINE TEST_RAW_VALUEPOD(DICT, STORAGE, KEY, VALUE)
//% XCTAssertTrue([DICT valueForKey:KEY rawValue:NULL]); //% XCTAssertTrue([DICT getRawValue:NULL forKey:KEY]);
//% XCTAssertTrue([DICT valueForKey:KEY rawValue:&STORAGE]); //% XCTAssertTrue([DICT getRawValue:&STORAGE forKey:KEY]);
//% XCTAssertEqual(STORAGE, VALUE); //% XCTAssertEqual(STORAGE, VALUE);
// //
@ -715,9 +715,9 @@
//%PDDM-DEFINE DECLARE_VALUE_STORAGEOBJECT(VALUE_TYPE, NAME) //%PDDM-DEFINE DECLARE_VALUE_STORAGEOBJECT(VALUE_TYPE, NAME)
// Empty // Empty
//%PDDM-DEFINE VALUE_NOT_FOUNDOBJECT(DICT, KEY) //%PDDM-DEFINE VALUE_NOT_FOUNDOBJECT(VALUE_NAME, DICT, KEY)
//% XCTAssertNil([DICT objectForKey:KEY]); //% XCTAssertNil([DICT objectForKey:KEY]);
//%PDDM-DEFINE TEST_VALUEOBJECT(DICT, STORAGE, KEY, VALUE) //%PDDM-DEFINE TEST_VALUEOBJECT(VALUE_NAME, DICT, STORAGE, KEY, VALUE)
//% XCTAssertEqualObjects([DICT objectForKey:KEY], VALUE); //% XCTAssertEqualObjects([DICT objectForKey:KEY], VALUE);
//%PDDM-DEFINE COMPARE_KEYSObjects(KEY1, KEY2) //%PDDM-DEFINE COMPARE_KEYSObjects(KEY1, KEY2)
//%[KEY1 isEqual:KEY2] //%[KEY1 isEqual:KEY2]
@ -729,8 +729,8 @@
//%PDDM-DEFINE TEST_HELPERS(KEY_NAME, KEY_TYPE, KisP) //%PDDM-DEFINE TEST_HELPERS(KEY_NAME, KEY_TYPE, KisP)
//%// To let the testing macros work, add some extra methods to simplify things. //%// To let the testing macros work, add some extra methods to simplify things.
//%@interface GPB##KEY_NAME##EnumDictionary (TestingTweak) //%@interface GPB##KEY_NAME##EnumDictionary (TestingTweak)
//%+ (instancetype)dictionaryWithValue:(int32_t)value forKey:(KEY_TYPE##KisP$S##KisP)key; //%+ (instancetype)dictionaryWithEnum:(int32_t)value forKey:(KEY_TYPE##KisP$S##KisP)key;
//%- (instancetype)initWithValues:(const int32_t [])values //%- (instancetype)initWithEnums:(const int32_t [])values
//% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys //% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys
//% count:(NSUInteger)count; //% count:(NSUInteger)count;
//%@end //%@end
@ -748,7 +748,7 @@
//%} //%}
//% //%
//%@implementation GPB##KEY_NAME##EnumDictionary (TestingTweak) //%@implementation GPB##KEY_NAME##EnumDictionary (TestingTweak)
//%+ (instancetype)dictionaryWithValue:(int32_t)value forKey:(KEY_TYPE##KisP$S##KisP)key { //%+ (instancetype)dictionaryWithEnum:(int32_t)value forKey:(KEY_TYPE##KisP$S##KisP)key {
//% // Cast is needed to compiler knows what class we are invoking initWithValues: on to get the //% // Cast is needed to compiler knows what class we are invoking initWithValues: on to get the
//% // type correct. //% // type correct.
//% return [[(GPB##KEY_NAME##EnumDictionary*)[self alloc] initWithValidationFunction:TestingEnum_IsValidValue //% return [[(GPB##KEY_NAME##EnumDictionary*)[self alloc] initWithValidationFunction:TestingEnum_IsValidValue
@ -756,7 +756,7 @@
//% KEY_NAME$S forKeys:&key //% KEY_NAME$S forKeys:&key
//% KEY_NAME$S count:1] autorelease]; //% KEY_NAME$S count:1] autorelease];
//%} //%}
//%- (instancetype)initWithValues:(const int32_t [])values //%- (instancetype)initWithEnums:(const int32_t [])values
//% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys //% forKeys:(const KEY_TYPE##KisP$S##KisP [])keys
//% count:(NSUInteger)count { //% count:(NSUInteger)count {
//% return [self initWithValidationFunction:TestingEnum_IsValidValue //% return [self initWithValidationFunction:TestingEnum_IsValidValue
@ -792,8 +792,8 @@
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init]; //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] init];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 0U); //% XCTAssertEqual(dict.count, 0U);
//%VALUE_NOT_FOUND##VHELPER(dict, KEY1) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
//% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u##, BOOL *stop) { //% [dict enumerateKeysAnd##VALUE_NAME##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u##, BOOL *stop) {
//% #pragma unused(aKey, a##VNAME$u##, stop) //% #pragma unused(aKey, a##VNAME$u##, stop)
//% XCTFail(@"Shouldn't get here!"); //% XCTFail(@"Shouldn't get here!");
//% }]; //% }];
@ -801,12 +801,12 @@
//%} //%}
//% //%
//%- (void)testOne { //%- (void)testOne {
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWith##VNAME$u##:VAL1 forKey:KEY1]; //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = [GPB##KEY_NAME##VALUE_NAME##Dictionary dictionaryWith##VALUE_NAME$u##:VAL1 forKey:KEY1];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 1U); //% XCTAssertEqual(dict.count, 1U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) { //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u, BOOL *stop) {
//% XCTAssertEqual##KSUFFIX(aKey, KEY1); //% XCTAssertEqual##KSUFFIX(aKey, KEY1);
//% XCTAssertEqual##VSUFFIX(a##VNAME$u, VAL1); //% XCTAssertEqual##VSUFFIX(a##VNAME$u, VAL1);
//% XCTAssertNotEqual(stop, NULL); //% XCTAssertNotEqual(stop, NULL);
@ -817,18 +817,18 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 2U); //% XCTAssertEqual(dict.count, 2U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//% //%
//% __block NSUInteger idx = 0; //% __block NSUInteger idx = 0;
//% KEY_TYPE KisP##*seenKeys = malloc(2 * sizeof(KEY_TYPE##KisP)); //% KEY_TYPE KisP##*seenKeys = malloc(2 * sizeof(KEY_TYPE##KisP));
//% VALUE_TYPE *seen##VNAME$u##s = malloc(2 * sizeof(VALUE_TYPE)); //% VALUE_TYPE *seen##VNAME$u##s = malloc(2 * sizeof(VALUE_TYPE));
//% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u##, BOOL *stop) { //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u##, BOOL *stop) {
//% XCTAssertLessThan(idx, 2U); //% XCTAssertLessThan(idx, 2U);
//% seenKeys[idx] = aKey; //% seenKeys[idx] = aKey;
//% seen##VNAME$u##s[idx] = a##VNAME$u; //% seen##VNAME$u##s[idx] = a##VNAME$u;
@ -850,7 +850,7 @@
//% //%
//% // Stopping the enumeration. //% // Stopping the enumeration.
//% idx = 0; //% idx = 0;
//% [dict enumerateKeysAnd##VNAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u##, BOOL *stop) { //% [dict enumerateKeysAnd##VALUE_NAME$u##sUsingBlock:^(KEY_TYPE KisP##aKey, VALUE_TYPE a##VNAME$u##, BOOL *stop) {
//% #pragma unused(aKey, a##VNAME$u) //% #pragma unused(aKey, a##VNAME$u)
//% if (idx == 0) *stop = YES; //% if (idx == 0) *stop = YES;
//% XCTAssertNotEqual(idx, 2U); //% XCTAssertNotEqual(idx, 2U);
@ -866,29 +866,29 @@
//% const VALUE_TYPE k##VNAME$u##s2[] = { VAL2, VAL1 }; //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL2, VAL1 };
//% const VALUE_TYPE k##VNAME$u##s3[] = { VAL2 }; //% const VALUE_TYPE k##VNAME$u##s3[] = { VAL2 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s1 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys1 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)];
//% XCTAssertNotNil(dict1); //% XCTAssertNotNil(dict1);
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1prime = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict1prime =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s1 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys1 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)];
//% XCTAssertNotNil(dict1prime); //% XCTAssertNotNil(dict1prime);
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s2 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s2
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys1 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s2)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s2)];
//% XCTAssertNotNil(dict2); //% XCTAssertNotNil(dict2);
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict3 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict3 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s1 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys2 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys2
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s1)];
//% XCTAssertNotNil(dict3); //% XCTAssertNotNil(dict3);
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict4 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict4 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s3 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s3
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys1 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys1
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s3)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s3)];
//% XCTAssertNotNil(dict4); //% XCTAssertNotNil(dict4);
//% //%
//% // 1/1Prime should be different objects, but equal. //% // 1/1Prime should be different objects, but equal.
@ -917,9 +917,9 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% //%
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = [dict copy]; //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = [dict copy];
@ -938,9 +938,9 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% //%
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
@ -958,21 +958,21 @@
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% //%
//% XCTAssertEqual(dict.count, 0U); //% XCTAssertEqual(dict.count, 0U);
//% [dict set##VNAME$u:VAL1 forKey:KEY1]; //% [dict set##VALUE_NAME:VAL1 forKey:KEY1];
//% XCTAssertEqual(dict.count, 1U); //% XCTAssertEqual(dict.count, 1U);
//% //%
//% const KEY_TYPE KisP##kKeys[] = { KEY2 }; //% const KEY_TYPE KisP##kKeys[] = { KEY2 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL2 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL2 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict2); //% XCTAssertNotNil(dict2);
//% [dict addEntriesFromDictionary:dict2]; //% [dict addEntriesFromDictionary:dict2];
//% XCTAssertEqual(dict.count, 2U); //% XCTAssertEqual(dict.count, 2U);
//% //%
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//% [dict2 release]; //% [dict2 release];
//%} //%}
//% //%
@ -980,27 +980,27 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2}; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2};
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 2U); //% XCTAssertEqual(dict.count, 2U);
//% //%
//% [dict remove##VNAME$u##ForKey:KEY2]; //% [dict remove##VALUE_NAME##ForKey:KEY2];
//% XCTAssertEqual(dict.count, 1U); //% XCTAssertEqual(dict.count, 1U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//% //%
//% // Remove again does nothing. //% // Remove again does nothing.
//% [dict remove##VNAME$u##ForKey:KEY2]; //% [dict remove##VALUE_NAME##ForKey:KEY2];
//% XCTAssertEqual(dict.count, 1U); //% XCTAssertEqual(dict.count, 1U);
//%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//% //%
//% [dict removeAll]; //% [dict removeAll];
//% XCTAssertEqual(dict.count, 0U); //% XCTAssertEqual(dict.count, 0U);
//%VALUE_NOT_FOUND##VHELPER(dict, KEY1) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY1)
//%VALUE_NOT_FOUND##VHELPER(dict, KEY2) //%VALUE_NOT_FOUND##VHELPER(VALUE_NAME, dict, KEY2)
//% [dict release]; //% [dict release];
//%} //%}
//% //%
@ -1008,35 +1008,35 @@
//% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 }; //% const KEY_TYPE KisP##kKeys[] = { KEY1, KEY2 };
//% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 }; //% const VALUE_TYPE k##VNAME$u##s[] = { VAL1, VAL2 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s)];
//% XCTAssertNotNil(dict); //% XCTAssertNotNil(dict);
//% XCTAssertEqual(dict.count, 2U); //% XCTAssertEqual(dict.count, 2U);
//%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%DECLARE_VALUE_STORAGE##VHELPER(VALUE_TYPE, VNAME)TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//% //%
//% [dict set##VNAME$u##:VAL2 forKey:KEY1]; //% [dict set##VALUE_NAME##:VAL2 forKey:KEY1];
//% XCTAssertEqual(dict.count, 2U); //% XCTAssertEqual(dict.count, 2U);
//%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//% //%
//% [dict set##VNAME$u##:VAL1 forKey:KEY2]; //% [dict set##VALUE_NAME##:VAL1 forKey:KEY2];
//% XCTAssertEqual(dict.count, 2U); //% XCTAssertEqual(dict.count, 2U);
//%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL2)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL1)
//% //%
//% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY1 }; //% const KEY_TYPE KisP##kKeys2[] = { KEY2, KEY1 };
//% const VALUE_TYPE k##VNAME$u##s2[] = { VAL2, VAL1 }; //% const VALUE_TYPE k##VNAME$u##s2[] = { VAL2, VAL1 };
//% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 = //% DICTIONARY_CLASS_DECL##VHELPER(KEY_NAME, VALUE_NAME, VALUE_TYPE) *dict2 =
//% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VNAME$u##s:k##VNAME$u##s2 //% [[GPB##KEY_NAME##VALUE_NAME##Dictionary alloc] initWith##VALUE_NAME##s:k##VNAME$u##s2
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## forKeys:kKeys2 //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## forKeys:kKeys2
//% KEY_NAME$S VALUE_NAME$S ##VNAME$S## count:GPBARRAYSIZE(k##VNAME$u##s2)]; //% KEY_NAME$S VALUE_NAME$S ##VALUE_NAME$S## count:GPBARRAYSIZE(k##VNAME$u##s2)];
//% XCTAssertNotNil(dict2); //% XCTAssertNotNil(dict2);
//% [dict addEntriesFromDictionary:dict2]; //% [dict addEntriesFromDictionary:dict2];
//% XCTAssertEqual(dict.count, 2U); //% XCTAssertEqual(dict.count, 2U);
//%TEST_VALUE##VHELPER(dict, VNAME, KEY1, VAL1) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY1, VAL1)
//%TEST_VALUE##VHELPER(dict, VNAME, KEY2, VAL2) //%TEST_VALUE##VHELPER(VALUE_NAME, dict, VNAME, KEY2, VAL2)
//% //%
//% [dict2 release]; //% [dict2 release];
//% [dict release]; //% [dict release];

@ -987,7 +987,7 @@ static NSData *DataFromCStr(const char *str) {
TestMap *msg = [[TestMap alloc] initWithData:data error:NULL]; TestMap *msg = [[TestMap alloc] initWithData:data error:NULL];
XCTAssertEqual(msg.mapInt32Int32.count, 1U); XCTAssertEqual(msg.mapInt32Int32.count, 1U);
int32_t val = 666; int32_t val = 666;
XCTAssertTrue([msg.mapInt32Int32 valueForKey:1 value:&val]); XCTAssertTrue([msg.mapInt32Int32 getInt32:&val forKey:1]);
XCTAssertEqual(val, 1); XCTAssertEqual(val, 1);
[msg release]; [msg release];
@ -1001,7 +1001,7 @@ static NSData *DataFromCStr(const char *str) {
TestMap *msg = [[TestMap alloc] initWithData:data error:NULL]; TestMap *msg = [[TestMap alloc] initWithData:data error:NULL];
XCTAssertEqual(msg.mapInt32Int32.count, 1U); XCTAssertEqual(msg.mapInt32Int32.count, 1U);
int32_t val = 666; int32_t val = 666;
XCTAssertTrue([msg.mapInt32Int32 valueForKey:2 value:&val]); XCTAssertTrue([msg.mapInt32Int32 getInt32:&val forKey:2]);
XCTAssertEqual(val, 1); XCTAssertEqual(val, 1);
[msg release]; [msg release];
@ -1015,7 +1015,7 @@ static NSData *DataFromCStr(const char *str) {
TestMap *msg = [[TestMap alloc] initWithData:data error:NULL]; TestMap *msg = [[TestMap alloc] initWithData:data error:NULL];
XCTAssertEqual(msg.mapInt32Int32.count, 1U); XCTAssertEqual(msg.mapInt32Int32.count, 1U);
int32_t val = 666; int32_t val = 666;
XCTAssertTrue([msg.mapInt32Int32 valueForKey:2 value:&val]); XCTAssertTrue([msg.mapInt32Int32 getInt32:&val forKey:2]);
XCTAssertEqual(val, 1); XCTAssertEqual(val, 1);
[msg release]; [msg release];
@ -1029,7 +1029,7 @@ static NSData *DataFromCStr(const char *str) {
TestMap *msg = [[TestMap alloc] initWithData:data error:NULL]; TestMap *msg = [[TestMap alloc] initWithData:data error:NULL];
XCTAssertEqual(msg.mapInt32Int32.count, 1U); XCTAssertEqual(msg.mapInt32Int32.count, 1U);
int32_t val = 666; int32_t val = 666;
XCTAssertTrue([msg.mapInt32Int32 valueForKey:1 value:&val]); XCTAssertTrue([msg.mapInt32Int32 getInt32:&val forKey:1]);
XCTAssertEqual(val, 2); XCTAssertEqual(val, 2);
[msg release]; [msg release];
@ -1043,7 +1043,7 @@ static NSData *DataFromCStr(const char *str) {
TestMap *msg = [[TestMap alloc] initWithData:data error:NULL]; TestMap *msg = [[TestMap alloc] initWithData:data error:NULL];
XCTAssertEqual(msg.mapInt32Int32.count, 1U); XCTAssertEqual(msg.mapInt32Int32.count, 1U);
int32_t val = 666; int32_t val = 666;
XCTAssertTrue([msg.mapInt32Int32 valueForKey:0 value:&val]); XCTAssertTrue([msg.mapInt32Int32 getInt32:&val forKey:0]);
XCTAssertEqual(val, 1); XCTAssertEqual(val, 1);
[msg release]; [msg release];
@ -1057,7 +1057,7 @@ static NSData *DataFromCStr(const char *str) {
TestMap *msg = [[TestMap alloc] initWithData:data error:NULL]; TestMap *msg = [[TestMap alloc] initWithData:data error:NULL];
XCTAssertEqual(msg.mapInt32Int32.count, 1U); XCTAssertEqual(msg.mapInt32Int32.count, 1U);
int32_t val = 666; int32_t val = 666;
XCTAssertTrue([msg.mapInt32Int32 valueForKey:1 value:&val]); XCTAssertTrue([msg.mapInt32Int32 getInt32:&val forKey:1]);
XCTAssertEqual(val, 0); XCTAssertEqual(val, 0);
[msg release]; [msg release];
@ -1071,7 +1071,7 @@ static NSData *DataFromCStr(const char *str) {
TestMap *msg = [[TestMap alloc] initWithData:data error:NULL]; TestMap *msg = [[TestMap alloc] initWithData:data error:NULL];
XCTAssertEqual(msg.mapInt32Int32.count, 1U); XCTAssertEqual(msg.mapInt32Int32.count, 1U);
int32_t val = 666; int32_t val = 666;
XCTAssertTrue([msg.mapInt32Int32 valueForKey:2 value:&val]); XCTAssertTrue([msg.mapInt32Int32 getInt32:&val forKey:2]);
XCTAssertEqual(val, 3); XCTAssertEqual(val, 3);
[msg release]; [msg release];
@ -1098,9 +1098,9 @@ static NSData *DataFromCStr(const char *str) {
dictionaryWithValidationFunction:Proto2MapEnumPlusExtra_IsValidValue]; dictionaryWithValidationFunction:Proto2MapEnumPlusExtra_IsValidValue];
orig.unknownMapField = [GPBInt32EnumDictionary orig.unknownMapField = [GPBInt32EnumDictionary
dictionaryWithValidationFunction:Proto2MapEnumPlusExtra_IsValidValue]; dictionaryWithValidationFunction:Proto2MapEnumPlusExtra_IsValidValue];
[orig.knownMapField setValue:Proto2MapEnumPlusExtra_EProto2MapEnumFoo [orig.knownMapField setEnum:Proto2MapEnumPlusExtra_EProto2MapEnumFoo
forKey:0]; forKey:0];
[orig.unknownMapField setValue:Proto2MapEnumPlusExtra_EProto2MapEnumExtra [orig.unknownMapField setEnum:Proto2MapEnumPlusExtra_EProto2MapEnumExtra
forKey:0]; forKey:0];
NSData *data = [orig data]; NSData *data = [orig data];
@ -1108,7 +1108,7 @@ static NSData *DataFromCStr(const char *str) {
TestEnumMap *msg1 = [TestEnumMap parseFromData:data error:NULL]; TestEnumMap *msg1 = [TestEnumMap parseFromData:data error:NULL];
XCTAssertEqual(msg1.knownMapField.count, 1U); XCTAssertEqual(msg1.knownMapField.count, 1U);
int32_t val = -1; int32_t val = -1;
XCTAssertTrue([msg1.knownMapField valueForKey:0 value:&val]); XCTAssertTrue([msg1.knownMapField getEnum:&val forKey:0]);
XCTAssertEqual(val, Proto2MapEnum_Proto2MapEnumFoo); XCTAssertEqual(val, Proto2MapEnum_Proto2MapEnumFoo);
XCTAssertEqual(msg1.unknownFields.countOfFields, 1U); XCTAssertEqual(msg1.unknownFields.countOfFields, 1U);
@ -1117,11 +1117,11 @@ static NSData *DataFromCStr(const char *str) {
[TestEnumMapPlusExtra parseFromData:data error:NULL]; [TestEnumMapPlusExtra parseFromData:data error:NULL];
val = -1; val = -1;
XCTAssertEqual(msg2.knownMapField.count, 1U); XCTAssertEqual(msg2.knownMapField.count, 1U);
XCTAssertTrue([msg2.knownMapField valueForKey:0 value:&val]); XCTAssertTrue([msg2.knownMapField getEnum:&val forKey:0]);
XCTAssertEqual(val, Proto2MapEnumPlusExtra_EProto2MapEnumFoo); XCTAssertEqual(val, Proto2MapEnumPlusExtra_EProto2MapEnumFoo);
val = -1; val = -1;
XCTAssertEqual(msg2.unknownMapField.count, 1U); XCTAssertEqual(msg2.unknownMapField.count, 1U);
XCTAssertTrue([msg2.unknownMapField valueForKey:0 value:&val]); XCTAssertTrue([msg2.unknownMapField getEnum:&val forKey:0]);
XCTAssertEqual(val, Proto2MapEnumPlusExtra_EProto2MapEnumExtra); XCTAssertEqual(val, Proto2MapEnumPlusExtra_EProto2MapEnumExtra);
XCTAssertEqual(msg2.unknownFields.countOfFields, 0U); XCTAssertEqual(msg2.unknownFields.countOfFields, 0U);
@ -1137,32 +1137,32 @@ static NSData *DataFromCStr(const char *str) {
// Key/Value data should result in different byte lengths on wire to ensure // Key/Value data should result in different byte lengths on wire to ensure
// everything is right. // everything is right.
[msg.mapInt32Int32 setValue:1000 forKey:200]; [msg.mapInt32Int32 setInt32:1000 forKey:200];
[msg.mapInt32Int32 setValue:101 forKey:2001]; [msg.mapInt32Int32 setInt32:101 forKey:2001];
[msg.mapInt64Int64 setValue:1002 forKey:202]; [msg.mapInt64Int64 setInt64:1002 forKey:202];
[msg.mapInt64Int64 setValue:103 forKey:2003]; [msg.mapInt64Int64 setInt64:103 forKey:2003];
[msg.mapUint32Uint32 setValue:1004 forKey:204]; [msg.mapUint32Uint32 setUInt32:1004 forKey:204];
[msg.mapUint32Uint32 setValue:105 forKey:2005]; [msg.mapUint32Uint32 setUInt32:105 forKey:2005];
[msg.mapUint64Uint64 setValue:1006 forKey:206]; [msg.mapUint64Uint64 setUInt64:1006 forKey:206];
[msg.mapUint64Uint64 setValue:107 forKey:2007]; [msg.mapUint64Uint64 setUInt64:107 forKey:2007];
[msg.mapSint32Sint32 setValue:1008 forKey:208]; [msg.mapSint32Sint32 setInt32:1008 forKey:208];
[msg.mapSint32Sint32 setValue:109 forKey:2009]; [msg.mapSint32Sint32 setInt32:109 forKey:2009];
[msg.mapSint64Sint64 setValue:1010 forKey:210]; [msg.mapSint64Sint64 setInt64:1010 forKey:210];
[msg.mapSint64Sint64 setValue:111 forKey:2011]; [msg.mapSint64Sint64 setInt64:111 forKey:2011];
[msg.mapFixed32Fixed32 setValue:1012 forKey:212]; [msg.mapFixed32Fixed32 setUInt32:1012 forKey:212];
[msg.mapFixed32Fixed32 setValue:113 forKey:2013]; [msg.mapFixed32Fixed32 setUInt32:113 forKey:2013];
[msg.mapFixed64Fixed64 setValue:1014 forKey:214]; [msg.mapFixed64Fixed64 setUInt64:1014 forKey:214];
[msg.mapFixed64Fixed64 setValue:115 forKey:2015]; [msg.mapFixed64Fixed64 setUInt64:115 forKey:2015];
[msg.mapSfixed32Sfixed32 setValue:1016 forKey:216]; [msg.mapSfixed32Sfixed32 setInt32:1016 forKey:216];
[msg.mapSfixed32Sfixed32 setValue:117 forKey:2017]; [msg.mapSfixed32Sfixed32 setInt32:117 forKey:2017];
[msg.mapSfixed64Sfixed64 setValue:1018 forKey:218]; [msg.mapSfixed64Sfixed64 setInt64:1018 forKey:218];
[msg.mapSfixed64Sfixed64 setValue:119 forKey:2019]; [msg.mapSfixed64Sfixed64 setInt64:119 forKey:2019];
[msg.mapInt32Float setValue:1020.f forKey:220]; [msg.mapInt32Float setFloat:1020.f forKey:220];
[msg.mapInt32Float setValue:121.f forKey:2021]; [msg.mapInt32Float setFloat:121.f forKey:2021];
[msg.mapInt32Double setValue:1022. forKey:222]; [msg.mapInt32Double setDouble:1022. forKey:222];
[msg.mapInt32Double setValue:123. forKey:2023]; [msg.mapInt32Double setDouble:123. forKey:2023];
[msg.mapBoolBool setValue:false forKey:true]; [msg.mapBoolBool setBool:false forKey:true];
[msg.mapBoolBool setValue:true forKey:false]; [msg.mapBoolBool setBool:true forKey:false];
msg.mapStringString[@"224"] = @"1024"; msg.mapStringString[@"224"] = @"1024";
msg.mapStringString[@"2025"] = @"125"; msg.mapStringString[@"2025"] = @"125";
msg.mapStringBytes[@"226"] = DataFromCStr("1026"); msg.mapStringBytes[@"226"] = DataFromCStr("1026");
@ -1171,12 +1171,12 @@ static NSData *DataFromCStr(const char *str) {
val1.optionalInt32 = 1028; val1.optionalInt32 = 1028;
Message2 *val2 = [[Message2 alloc] init]; Message2 *val2 = [[Message2 alloc] init];
val2.optionalInt32 = 129; val2.optionalInt32 = 129;
[msg.mapStringMessage setValue:val1 forKey:@"228"]; [msg.mapStringMessage setObject:val1 forKey:@"228"];
[msg.mapStringMessage setValue:val2 forKey:@"2029"]; [msg.mapStringMessage setObject:val2 forKey:@"2029"];
[msg.mapInt32Bytes setObject:DataFromCStr("1030 bytes") forKey:230]; [msg.mapInt32Bytes setObject:DataFromCStr("1030 bytes") forKey:230];
[msg.mapInt32Bytes setObject:DataFromCStr("131") forKey:2031]; [msg.mapInt32Bytes setObject:DataFromCStr("131") forKey:2031];
[msg.mapInt32Enum setValue:Message2_Enum_Bar forKey:232]; [msg.mapInt32Enum setEnum:Message2_Enum_Bar forKey:232];
[msg.mapInt32Enum setValue:Message2_Enum_Baz forKey:2033]; [msg.mapInt32Enum setEnum:Message2_Enum_Baz forKey:2033];
Message2 *val3 = [[Message2 alloc] init]; Message2 *val3 = [[Message2 alloc] init];
val3.optionalInt32 = 1034; val3.optionalInt32 = 1034;
Message2 *val4 = [[Message2 alloc] init]; Message2 *val4 = [[Message2 alloc] init];

@ -1171,7 +1171,7 @@
XCTAssertFalse([message2.a hasA]); XCTAssertFalse([message2.a hasA]);
// But adding an element to the map should. // But adding an element to the map should.
[message.a.a.iToI setValue:100 forKey:200]; [message.a.a.iToI setInt32:100 forKey:200];
XCTAssertTrue([message hasA]); XCTAssertTrue([message hasA]);
XCTAssertTrue([message.a hasA]); XCTAssertTrue([message.a hasA]);
XCTAssertEqual([message.a.a.iToI count], (NSUInteger)1); XCTAssertEqual([message.a.a.iToI count], (NSUInteger)1);
@ -1190,7 +1190,7 @@
message1a.a.iToI = message1b.a.iToI; message1a.a.iToI = message1b.a.iToI;
XCTAssertTrue([message1a hasA]); XCTAssertTrue([message1a hasA]);
XCTAssertFalse([message1b hasA]); XCTAssertFalse([message1b hasA]);
[message1a.a.iToI setValue:1 forKey:2]; [message1a.a.iToI setInt32:1 forKey:2];
XCTAssertTrue([message1a hasA]); XCTAssertTrue([message1a hasA]);
XCTAssertTrue([message1b hasA]); XCTAssertTrue([message1b hasA]);
XCTAssertEqual(message1a.a.iToI, message1b.a.iToI); XCTAssertEqual(message1a.a.iToI, message1b.a.iToI);
@ -1224,7 +1224,7 @@
// with different objects that are equal). // with different objects that are equal).
TestRecursiveMessageWithRepeatedField *message3 = TestRecursiveMessageWithRepeatedField *message3 =
[TestRecursiveMessageWithRepeatedField message]; [TestRecursiveMessageWithRepeatedField message];
message3.iToI = [GPBInt32Int32Dictionary dictionaryWithValue:10 forKey:20]; message3.iToI = [GPBInt32Int32Dictionary dictionaryWithInt32:10 forKey:20];
message3.strToStr = message3.strToStr =
[NSMutableDictionary dictionaryWithObject:@"abc" forKey:@"123"]; [NSMutableDictionary dictionaryWithObject:@"abc" forKey:@"123"];
XCTAssertNotNil(message.iToI); XCTAssertNotNil(message.iToI);
@ -1292,7 +1292,7 @@
XCTAssertFalse([message hasA]); XCTAssertFalse([message hasA]);
GPBInt32Int32Dictionary *iToI = [message.a.iToI retain]; GPBInt32Int32Dictionary *iToI = [message.a.iToI retain];
XCTAssertEqual(iToI->_autocreator, message.a); // Pointer comparision XCTAssertEqual(iToI->_autocreator, message.a); // Pointer comparision
message.a.iToI = [GPBInt32Int32Dictionary dictionaryWithValue:6 forKey:7]; message.a.iToI = [GPBInt32Int32Dictionary dictionaryWithInt32:6 forKey:7];
XCTAssertTrue([message hasA]); XCTAssertTrue([message hasA]);
XCTAssertNotEqual(message.a.iToI, iToI); // Pointer comparision XCTAssertNotEqual(message.a.iToI, iToI); // Pointer comparision
XCTAssertNil(iToI->_autocreator); XCTAssertNil(iToI->_autocreator);

@ -53,12 +53,12 @@ class GPBBridgeTests: XCTestCase {
msg.repeatedStringArray.addObject("pqr") msg.repeatedStringArray.addObject("pqr")
msg.repeatedEnumArray.addValue(Message2_Enum.Bar.rawValue) msg.repeatedEnumArray.addValue(Message2_Enum.Bar.rawValue)
msg.repeatedEnumArray.addValue(Message2_Enum.Baz.rawValue) msg.repeatedEnumArray.addValue(Message2_Enum.Baz.rawValue)
msg.mapInt32Int32.setValue(400, forKey:500) msg.mapInt32Int32.setInt32(400, forKey:500)
msg.mapInt32Int32.setValue(401, forKey:501) msg.mapInt32Int32.setInt32(401, forKey:501)
msg.mapStringString.setObject("foo", forKey:"bar") msg.mapStringString.setObject("foo", forKey:"bar")
msg.mapStringString.setObject("abc", forKey:"xyz") msg.mapStringString.setObject("abc", forKey:"xyz")
msg.mapInt32Enum.setValue(Message2_Enum.Bar.rawValue, forKey:600) msg.mapInt32Enum.setEnum(Message2_Enum.Bar.rawValue, forKey:600)
msg.mapInt32Enum.setValue(Message2_Enum.Baz.rawValue, forKey:601) msg.mapInt32Enum.setEnum(Message2_Enum.Baz.rawValue, forKey:601)
// Check has*. // Check has*.
XCTAssertTrue(msg.hasOptionalInt32) XCTAssertTrue(msg.hasOptionalInt32)
@ -90,18 +90,18 @@ class GPBBridgeTests: XCTestCase {
XCTAssertEqual(msg.repeatedEnumArray.valueAtIndex(1), Message2_Enum.Baz.rawValue) XCTAssertEqual(msg.repeatedEnumArray.valueAtIndex(1), Message2_Enum.Baz.rawValue)
XCTAssertEqual(msg.repeatedInt64Array.count, UInt(0)) XCTAssertEqual(msg.repeatedInt64Array.count, UInt(0))
XCTAssertEqual(msg.mapInt32Int32.count, UInt(2)) XCTAssertEqual(msg.mapInt32Int32.count, UInt(2))
var intValue: Int32 = 0; var intValue: Int32 = 0
XCTAssertTrue(msg.mapInt32Int32.valueForKey(500, value:&intValue)) XCTAssertTrue(msg.mapInt32Int32.getInt32(&intValue, forKey: 500))
XCTAssertEqual(intValue, Int32(400)) XCTAssertEqual(intValue, Int32(400))
XCTAssertTrue(msg.mapInt32Int32.valueForKey(501, value:&intValue)) XCTAssertTrue(msg.mapInt32Int32.getInt32(&intValue, forKey: 501))
XCTAssertEqual(intValue, Int32(401)) XCTAssertEqual(intValue, Int32(401))
XCTAssertEqual(msg.mapStringString.count, Int(2)) XCTAssertEqual(msg.mapStringString.count, Int(2))
XCTAssertEqual(msg.mapStringString.objectForKey("bar") as? String, "foo") XCTAssertEqual(msg.mapStringString.objectForKey("bar") as? String, "foo")
XCTAssertEqual(msg.mapStringString.objectForKey("xyz") as? String, "abc") XCTAssertEqual(msg.mapStringString.objectForKey("xyz") as? String, "abc")
XCTAssertEqual(msg.mapInt32Enum.count, UInt(2)) XCTAssertEqual(msg.mapInt32Enum.count, UInt(2))
XCTAssertTrue(msg.mapInt32Enum.valueForKey(600, value:&intValue)) XCTAssertTrue(msg.mapInt32Enum.getEnum(&intValue, forKey:600))
XCTAssertEqual(intValue, Message2_Enum.Bar.rawValue) XCTAssertEqual(intValue, Message2_Enum.Bar.rawValue)
XCTAssertTrue(msg.mapInt32Enum.valueForKey(601, value:&intValue)) XCTAssertTrue(msg.mapInt32Enum.getEnum(&intValue, forKey:601))
XCTAssertEqual(intValue, Message2_Enum.Baz.rawValue) XCTAssertEqual(intValue, Message2_Enum.Baz.rawValue)
// Clearing a string with nil. // Clearing a string with nil.
@ -151,11 +151,11 @@ class GPBBridgeTests: XCTestCase {
msg.repeatedEnumArray.addValue(Message3_Enum.Bar.rawValue) msg.repeatedEnumArray.addValue(Message3_Enum.Bar.rawValue)
msg.repeatedEnumArray.addRawValue(666) msg.repeatedEnumArray.addRawValue(666)
SetMessage3_OptionalEnum_RawValue(msg2, 666) SetMessage3_OptionalEnum_RawValue(msg2, 666)
msg.mapInt32Int32.setValue(400, forKey:500) msg.mapInt32Int32.setInt32(400, forKey:500)
msg.mapInt32Int32.setValue(401, forKey:501) msg.mapInt32Int32.setInt32(401, forKey:501)
msg.mapStringString.setObject("foo", forKey:"bar") msg.mapStringString.setObject("foo", forKey:"bar")
msg.mapStringString.setObject("abc", forKey:"xyz") msg.mapStringString.setObject("abc", forKey:"xyz")
msg.mapInt32Enum.setValue(Message2_Enum.Bar.rawValue, forKey:600) msg.mapInt32Enum.setEnum(Message2_Enum.Bar.rawValue, forKey:600)
// "proto3" syntax lets enum get unknown values. // "proto3" syntax lets enum get unknown values.
msg.mapInt32Enum.setRawValue(666, forKey:601) msg.mapInt32Enum.setRawValue(666, forKey:601)
@ -183,20 +183,20 @@ class GPBBridgeTests: XCTestCase {
XCTAssertEqual(msg2.optionalEnum, Message3_Enum.GPBUnrecognizedEnumeratorValue) XCTAssertEqual(msg2.optionalEnum, Message3_Enum.GPBUnrecognizedEnumeratorValue)
XCTAssertEqual(Message3_OptionalEnum_RawValue(msg2), Int32(666)) XCTAssertEqual(Message3_OptionalEnum_RawValue(msg2), Int32(666))
XCTAssertEqual(msg.mapInt32Int32.count, UInt(2)) XCTAssertEqual(msg.mapInt32Int32.count, UInt(2))
var intValue: Int32 = 0; var intValue: Int32 = 0
XCTAssertTrue(msg.mapInt32Int32.valueForKey(500, value:&intValue)) XCTAssertTrue(msg.mapInt32Int32.getInt32(&intValue, forKey:500))
XCTAssertEqual(intValue, Int32(400)) XCTAssertEqual(intValue, Int32(400))
XCTAssertTrue(msg.mapInt32Int32.valueForKey(501, value:&intValue)) XCTAssertTrue(msg.mapInt32Int32.getInt32(&intValue, forKey:501))
XCTAssertEqual(intValue, Int32(401)) XCTAssertEqual(intValue, Int32(401))
XCTAssertEqual(msg.mapStringString.count, Int(2)) XCTAssertEqual(msg.mapStringString.count, Int(2))
XCTAssertEqual(msg.mapStringString.objectForKey("bar") as? String, "foo") XCTAssertEqual(msg.mapStringString.objectForKey("bar") as? String, "foo")
XCTAssertEqual(msg.mapStringString.objectForKey("xyz") as? String, "abc") XCTAssertEqual(msg.mapStringString.objectForKey("xyz") as? String, "abc")
XCTAssertEqual(msg.mapInt32Enum.count, UInt(2)) XCTAssertEqual(msg.mapInt32Enum.count, UInt(2))
XCTAssertTrue(msg.mapInt32Enum.valueForKey(600, value:&intValue)) XCTAssertTrue(msg.mapInt32Enum.getEnum(&intValue, forKey:600))
XCTAssertEqual(intValue, Message2_Enum.Bar.rawValue) XCTAssertEqual(intValue, Message2_Enum.Bar.rawValue)
XCTAssertTrue(msg.mapInt32Enum.valueForKey(601, value:&intValue)) XCTAssertTrue(msg.mapInt32Enum.getEnum(&intValue, forKey:601))
XCTAssertEqual(intValue, Message3_Enum.GPBUnrecognizedEnumeratorValue.rawValue) XCTAssertEqual(intValue, Message3_Enum.GPBUnrecognizedEnumeratorValue.rawValue)
XCTAssertTrue(msg.mapInt32Enum.valueForKey(601, rawValue:&intValue)) XCTAssertTrue(msg.mapInt32Enum.getRawValue(&intValue, forKey:601))
XCTAssertEqual(intValue, 666) XCTAssertEqual(intValue, 666)
// Clearing a string with nil. // Clearing a string with nil.
@ -439,8 +439,8 @@ class GPBBridgeTests: XCTestCase {
msg.optionalGroup.a = 102 msg.optionalGroup.a = 102
msg.repeatedStringArray.addObject("abc") msg.repeatedStringArray.addObject("abc")
msg.repeatedStringArray.addObject("def") msg.repeatedStringArray.addObject("def")
msg.mapInt32Int32.setValue(200, forKey:300) msg.mapInt32Int32.setInt32(200, forKey:300)
msg.mapInt32Int32.setValue(201, forKey:201) msg.mapInt32Int32.setInt32(201, forKey:201)
msg.mapStringString.setObject("foo", forKey:"bar") msg.mapStringString.setObject("foo", forKey:"bar")
msg.mapStringString.setObject("abc", forKey:"xyz") msg.mapStringString.setObject("abc", forKey:"xyz")

@ -1089,19 +1089,19 @@ const uint32_t kGPBDefaultRepeatCount = 2;
- (void)setAllMapFields:(TestMap *)message numEntries:(uint32_t)count { - (void)setAllMapFields:(TestMap *)message numEntries:(uint32_t)count {
for (uint32_t i = 0; i < count; i++) { for (uint32_t i = 0; i < count; i++) {
[message.mapInt32Int32 setValue:(i + 1) forKey:100 + i * 100]; [message.mapInt32Int32 setInt32:(i + 1) forKey:100 + i * 100];
[message.mapInt64Int64 setValue:(i + 1) forKey:101 + i * 100]; [message.mapInt64Int64 setInt64:(i + 1) forKey:101 + i * 100];
[message.mapUint32Uint32 setValue:(i + 1) forKey:102 + i * 100]; [message.mapUint32Uint32 setUInt32:(i + 1) forKey:102 + i * 100];
[message.mapUint64Uint64 setValue:(i + 1) forKey:103 + i * 100]; [message.mapUint64Uint64 setUInt64:(i + 1) forKey:103 + i * 100];
[message.mapSint32Sint32 setValue:(i + 1) forKey:104 + i * 100]; [message.mapSint32Sint32 setInt32:(i + 1) forKey:104 + i * 100];
[message.mapSint64Sint64 setValue:(i + 1) forKey:105 + i * 100]; [message.mapSint64Sint64 setInt64:(i + 1) forKey:105 + i * 100];
[message.mapFixed32Fixed32 setValue:(i + 1) forKey:106 + i * 100]; [message.mapFixed32Fixed32 setUInt32:(i + 1) forKey:106 + i * 100];
[message.mapFixed64Fixed64 setValue:(i + 1) forKey:107 + i * 100]; [message.mapFixed64Fixed64 setUInt64:(i + 1) forKey:107 + i * 100];
[message.mapSfixed32Sfixed32 setValue:(i + 1) forKey:108 + i * 100]; [message.mapSfixed32Sfixed32 setInt32:(i + 1) forKey:108 + i * 100];
[message.mapSfixed64Sfixed64 setValue:(i + 1) forKey:109 + i * 100]; [message.mapSfixed64Sfixed64 setInt64:(i + 1) forKey:109 + i * 100];
[message.mapInt32Float setValue:(i + 1) forKey:110 + i * 100]; [message.mapInt32Float setFloat:(i + 1) forKey:110 + i * 100];
[message.mapInt32Double setValue:(i + 1) forKey:111 + i * 100]; [message.mapInt32Double setDouble:(i + 1) forKey:111 + i * 100];
[message.mapBoolBool setValue:((i % 2) == 1) forKey:((i % 2) == 0)]; [message.mapBoolBool setBool:((i % 2) == 1) forKey:((i % 2) == 0)];
NSString *keyStr = [[NSString alloc] initWithFormat:@"%d", 112 + i * 100]; NSString *keyStr = [[NSString alloc] initWithFormat:@"%d", 112 + i * 100];
NSString *dataStr = [[NSString alloc] initWithFormat:@"%d", i + 1]; NSString *dataStr = [[NSString alloc] initWithFormat:@"%d", i + 1];
@ -1114,7 +1114,7 @@ const uint32_t kGPBDefaultRepeatCount = 2;
[data release]; [data release];
[message.mapInt32Enum [message.mapInt32Enum
setValue:(i % 2) ? MapEnum_MapEnumBar : MapEnum_MapEnumBaz setEnum:(i % 2) ? MapEnum_MapEnumBar : MapEnum_MapEnumBaz
forKey:114 + i * 100]; forKey:114 + i * 100];
ForeignMessage *subMsg = [[ForeignMessage alloc] init]; ForeignMessage *subMsg = [[ForeignMessage alloc] init];

Loading…
Cancel
Save