Add a unittest for ObjC TextFormat extension support.
diff --git a/Makefile.am b/Makefile.am
index 86aad3c..88a1e24 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -558,6 +558,7 @@
objectivec/Tests/GPBUtilitiesTests.m \
objectivec/Tests/GPBWellKnownTypesTest.m \
objectivec/Tests/GPBWireFormatTests.m \
+ objectivec/Tests/text_format_extensions_unittest_data.txt \
objectivec/Tests/text_format_map_unittest_data.txt \
objectivec/Tests/text_format_unittest_data.txt \
objectivec/Tests/unittest_cycle.proto \
diff --git a/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj b/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj
index 4c3776a..e046455 100644
--- a/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj
+++ b/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj
@@ -92,6 +92,7 @@
F4E675A11B21D0000054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675911B21D0000054530B /* Struct.pbobjc.m */; };
F4E675A31B21D0000054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675931B21D0000054530B /* Type.pbobjc.m */; };
F4E675A51B21D0000054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675951B21D0000054530B /* Wrappers.pbobjc.m */; };
+ F4F53F8A219CC4F2001EABF4 /* text_format_extensions_unittest_data.txt in Resources */ = {isa = PBXBuildFile; fileRef = F4F53F89219CC4F2001EABF4 /* text_format_extensions_unittest_data.txt */; };
F4F8D8831D789FD9002CE128 /* GPBUnittestProtos2.m in Sources */ = {isa = PBXBuildFile; fileRef = F4F8D8811D789FCE002CE128 /* GPBUnittestProtos2.m */; };
/* End PBXBuildFile section */
@@ -265,6 +266,7 @@
F4E675AB1B21D05C0054530B /* struct.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = struct.proto; path = ../src/google/protobuf/struct.proto; sourceTree = "<group>"; };
F4E675AC1B21D05C0054530B /* type.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = type.proto; path = ../src/google/protobuf/type.proto; sourceTree = "<group>"; };
F4E675AD1B21D05C0054530B /* wrappers.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = wrappers.proto; path = ../src/google/protobuf/wrappers.proto; sourceTree = "<group>"; };
+ F4F53F89219CC4F2001EABF4 /* text_format_extensions_unittest_data.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = text_format_extensions_unittest_data.txt; sourceTree = "<group>"; };
F4F8D8811D789FCE002CE128 /* GPBUnittestProtos2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnittestProtos2.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -494,6 +496,7 @@
7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */,
8B4248DB1A92933A00BC1EC6 /* GPBWellKnownTypesTest.m */,
7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */,
+ F4F53F89219CC4F2001EABF4 /* text_format_extensions_unittest_data.txt */,
F45E57C61AE6DC6A000B7D99 /* text_format_map_unittest_data.txt */,
F43C88CF191D77FC009E917D /* text_format_unittest_data.txt */,
8B7E6A7414893DBA00F8884A /* unittest_custom_options.proto */,
@@ -671,6 +674,7 @@
buildActionMask = 2147483647;
files = (
8B210CCE159383D60032D72D /* golden_message in Resources */,
+ F4F53F8A219CC4F2001EABF4 /* text_format_extensions_unittest_data.txt in Resources */,
F43C88D0191D77FC009E917D /* text_format_unittest_data.txt in Resources */,
8B210CD0159386920032D72D /* golden_packed_fields_message in Resources */,
F45E57C71AE6DC6A000B7D99 /* text_format_map_unittest_data.txt in Resources */,
diff --git a/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj b/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj
index ae794a8..eb1e2a8 100644
--- a/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj
+++ b/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj
@@ -93,6 +93,7 @@
F4E675D51B21D1620054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C21B21D1440054530B /* Struct.pbobjc.m */; };
F4E675D61B21D1620054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C51B21D1440054530B /* Type.pbobjc.m */; };
F4E675D71B21D1620054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C71B21D1440054530B /* Wrappers.pbobjc.m */; };
+ F4F53F8C219CC5DF001EABF4 /* text_format_extensions_unittest_data.txt in Resources */ = {isa = PBXBuildFile; fileRef = F4F53F8B219CC5DF001EABF4 /* text_format_extensions_unittest_data.txt */; };
F4F8D8861D78A193002CE128 /* GPBUnittestProtos2.m in Sources */ = {isa = PBXBuildFile; fileRef = F4F8D8841D78A186002CE128 /* GPBUnittestProtos2.m */; };
/* End PBXBuildFile section */
@@ -268,6 +269,7 @@
F4E675DD1B21D1DE0054530B /* struct.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = struct.proto; path = ../src/google/protobuf/struct.proto; sourceTree = "<group>"; };
F4E675DE1B21D1DE0054530B /* type.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = type.proto; path = ../src/google/protobuf/type.proto; sourceTree = "<group>"; };
F4E675DF1B21D1DE0054530B /* wrappers.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = wrappers.proto; path = ../src/google/protobuf/wrappers.proto; sourceTree = "<group>"; };
+ F4F53F8B219CC5DF001EABF4 /* text_format_extensions_unittest_data.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = text_format_extensions_unittest_data.txt; sourceTree = "<group>"; };
F4F8D8841D78A186002CE128 /* GPBUnittestProtos2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnittestProtos2.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -500,6 +502,7 @@
7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */,
8B4248E51A929C9900BC1EC6 /* GPBWellKnownTypesTest.m */,
7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */,
+ F4F53F8B219CC5DF001EABF4 /* text_format_extensions_unittest_data.txt */,
F45E57C81AE6DC98000B7D99 /* text_format_map_unittest_data.txt */,
F43C88CF191D77FC009E917D /* text_format_unittest_data.txt */,
8B7E6A7414893DBA00F8884A /* unittest_custom_options.proto */,
@@ -678,6 +681,7 @@
buildActionMask = 2147483647;
files = (
8B210CCE159383D60032D72D /* golden_message in Resources */,
+ F4F53F8C219CC5DF001EABF4 /* text_format_extensions_unittest_data.txt in Resources */,
F43C88D0191D77FC009E917D /* text_format_unittest_data.txt in Resources */,
8B210CD0159386920032D72D /* golden_packed_fields_message in Resources */,
F45E57C91AE6DC98000B7D99 /* text_format_map_unittest_data.txt in Resources */,
diff --git a/objectivec/Tests/GPBUtilitiesTests.m b/objectivec/Tests/GPBUtilitiesTests.m
index 8a8ba93..f4a09de 100644
--- a/objectivec/Tests/GPBUtilitiesTests.m
+++ b/objectivec/Tests/GPBUtilitiesTests.m
@@ -169,7 +169,27 @@
[expected release];
}
-// TODO(thomasvl): add test with extensions once those format with correct names.
+- (void)testTextFormatExtensions {
+ TestAllExtensions *message = [TestAllExtensions message];
+
+ // Not kGPBDefaultRepeatCount because we are comparing to golden master file
+ // which was generated with 2.
+ [self setAllExtensions:message repeatedCount:2];
+
+ NSString *result = GPBTextFormatForMessage(message, nil);
+
+ // NOTE: ObjC TextFormat doesn't have the proper extension names so it
+ // uses comments for the ObjC name and raw numbers for the fields instead
+ // of the bracketed extension name.
+ NSString *fileName = @"text_format_extensions_unittest_data.txt";
+ NSData *resultData = [result dataUsingEncoding:NSUTF8StringEncoding];
+ NSData *expectedData =
+ [self getDataFileNamed:fileName dataToWrite:resultData];
+ NSString *expected = [[NSString alloc] initWithData:expectedData
+ encoding:NSUTF8StringEncoding];
+ XCTAssertEqualObjects(expected, result);
+ [expected release];
+}
- (void)testSetRepeatedFields {
TestAllTypes *message = [TestAllTypes message];
diff --git a/objectivec/Tests/text_format_extensions_unittest_data.txt b/objectivec/Tests/text_format_extensions_unittest_data.txt
new file mode 100644
index 0000000..d520545
--- /dev/null
+++ b/objectivec/Tests/text_format_extensions_unittest_data.txt
@@ -0,0 +1,140 @@
+1: 101 # [UnittestRoot_optionalInt32Extension]
+2: 102 # [UnittestRoot_optionalInt64Extension]
+3: 103 # [UnittestRoot_optionalUint32Extension]
+4: 104 # [UnittestRoot_optionalUint64Extension]
+5: 105 # [UnittestRoot_optionalSint32Extension]
+6: 106 # [UnittestRoot_optionalSint64Extension]
+7: 107 # [UnittestRoot_optionalFixed32Extension]
+8: 108 # [UnittestRoot_optionalFixed64Extension]
+9: 109 # [UnittestRoot_optionalSfixed32Extension]
+10: 110 # [UnittestRoot_optionalSfixed64Extension]
+11: 111 # [UnittestRoot_optionalFloatExtension]
+12: 112 # [UnittestRoot_optionalDoubleExtension]
+13: true # [UnittestRoot_optionalBoolExtension]
+14: "115" # [UnittestRoot_optionalStringExtension]
+15: "\001\000\002\003\000\005" # [UnittestRoot_optionalBytesExtension]
+16 { # [UnittestRoot_optionalGroupExtension]
+ a: 117
+}
+18 { # [UnittestRoot_optionalNestedMessageExtension]
+ bb: 118
+}
+19 { # [UnittestRoot_optionalForeignMessageExtension]
+ c: 119
+}
+20 { # [UnittestRoot_optionalImportMessageExtension]
+ d: 120
+}
+21: 3 # [UnittestRoot_optionalNestedEnumExtension]
+22: 6 # [UnittestRoot_optionalForeignEnumExtension]
+23: 9 # [UnittestRoot_optionalImportEnumExtension]
+24: "124" # [UnittestRoot_optionalStringPieceExtension]
+25: "125" # [UnittestRoot_optionalCordExtension]
+# [UnittestRoot_repeatedInt32Extension]
+31: 201
+31: 301
+# [UnittestRoot_repeatedInt64Extension]
+32: 202
+32: 302
+# [UnittestRoot_repeatedUint32Extension]
+33: 203
+33: 303
+# [UnittestRoot_repeatedUint64Extension]
+34: 204
+34: 304
+# [UnittestRoot_repeatedSint32Extension]
+35: 205
+35: 305
+# [UnittestRoot_repeatedSint64Extension]
+36: 206
+36: 306
+# [UnittestRoot_repeatedFixed32Extension]
+37: 207
+37: 307
+# [UnittestRoot_repeatedFixed64Extension]
+38: 208
+38: 308
+# [UnittestRoot_repeatedSfixed32Extension]
+39: 209
+39: 309
+# [UnittestRoot_repeatedSfixed64Extension]
+40: 210
+40: 310
+# [UnittestRoot_repeatedFloatExtension]
+41: 211
+41: 311
+# [UnittestRoot_repeatedDoubleExtension]
+42: 212
+42: 312
+# [UnittestRoot_repeatedBoolExtension]
+43: false
+43: true
+# [UnittestRoot_repeatedStringExtension]
+44: "215"
+44: "315"
+# [UnittestRoot_repeatedBytesExtension]
+45: "\330\000\000\000"
+45: "<\001\000\000"
+# [UnittestRoot_repeatedGroupExtension]
+46 {
+ a: 217
+}
+46 {
+ a: 317
+}
+# [UnittestRoot_repeatedNestedMessageExtension]
+48 {
+ bb: 218
+}
+48 {
+ bb: 318
+}
+# [UnittestRoot_repeatedForeignMessageExtension]
+49 {
+ c: 219
+}
+49 {
+ c: 319
+}
+# [UnittestRoot_repeatedImportMessageExtension]
+50 {
+ d: 220
+}
+50 {
+ d: 320
+}
+# [UnittestRoot_repeatedNestedEnumExtension]
+51: 3
+51: 2
+# [UnittestRoot_repeatedForeignEnumExtension]
+52: 6
+52: 5
+# [UnittestRoot_repeatedImportEnumExtension]
+53: 9
+53: 8
+# [UnittestRoot_repeatedStringPieceExtension]
+54: "224"
+54: "324"
+# [UnittestRoot_repeatedCordExtension]
+55: "225"
+55: "325"
+61: 401 # [UnittestRoot_defaultInt32Extension]
+62: 402 # [UnittestRoot_defaultInt64Extension]
+63: 403 # [UnittestRoot_defaultUint32Extension]
+64: 404 # [UnittestRoot_defaultUint64Extension]
+65: 405 # [UnittestRoot_defaultSint32Extension]
+66: 406 # [UnittestRoot_defaultSint64Extension]
+67: 407 # [UnittestRoot_defaultFixed32Extension]
+68: 408 # [UnittestRoot_defaultFixed64Extension]
+69: 409 # [UnittestRoot_defaultSfixed32Extension]
+70: 410 # [UnittestRoot_defaultSfixed64Extension]
+71: 411 # [UnittestRoot_defaultFloatExtension]
+72: 412 # [UnittestRoot_defaultDoubleExtension]
+73: false # [UnittestRoot_defaultBoolExtension]
+74: "415" # [UnittestRoot_defaultStringExtension]
+75: "\240\001\000\000" # [UnittestRoot_defaultBytesExtension]
+81: 1 # [UnittestRoot_defaultNestedEnumExtension]
+82: 4 # [UnittestRoot_defaultForeignEnumExtension]
+83: 7 # [UnittestRoot_defaultImportEnumExtension]
+84: "424" # [UnittestRoot_defaultStringPieceExtension]
+85: "425" # [UnittestRoot_defaultCordExtension]