Sfoglia il codice sorgente

Merge pull request #2950 from anuraaga/dev_rag

Allow unknown values for Map put*Value methods just like every other …
Feng Xiao 8 anni fa
parent
commit
8aa927f08f

+ 7 - 16
java/core/src/test/java/com/google/protobuf/MapTest.java

@@ -490,19 +490,13 @@ public class MapTest extends TestCase {
   public void testPutForUnknownEnumValues() throws Exception {
     TestMap.Builder builder = TestMap.newBuilder()
         .putInt32ToEnumFieldValue(0, 0)
-        .putInt32ToEnumFieldValue(1, 1);
-
-    try {
-      builder.putInt32ToEnumFieldValue(2, 1000);  // unknown value.
-      fail();
-    } catch (IllegalArgumentException e) {
-      // expected
-    }
-
+        .putInt32ToEnumFieldValue(1, 1)
+        .putInt32ToEnumFieldValue(2, 1000);  // unknown value.
     TestMap message = builder.build();
     assertEquals(0, message.getInt32ToEnumFieldValueOrThrow(0));
     assertEquals(1, message.getInt32ToEnumFieldValueOrThrow(1));
-    assertEquals(2, message.getInt32ToEnumFieldCount());
+    assertEquals(1000, message.getInt32ToEnumFieldValueOrThrow(2));
+    assertEquals(3, message.getInt32ToEnumFieldCount());
   }
 
   public void testPutChecksNullKeysAndValues() throws Exception {
@@ -1250,12 +1244,9 @@ public class MapTest extends TestCase {
     builder.putInt32ToEnumFieldValue(1, TestMap.EnumValue.BAR.getNumber());
     assertEquals(
         TestMap.EnumValue.BAR.getNumber(), builder.getInt32ToEnumFieldValueOrThrow(1));
-    try {
-      builder.putInt32ToEnumFieldValue(1, -1);
-      fail();
-    } catch (IllegalArgumentException e) {
-      // expected
-    }
+    builder.putInt32ToEnumFieldValue(1, -1);
+    assertEquals(-1, builder.getInt32ToEnumFieldValueOrThrow(1));
+    assertEquals(TestMap.EnumValue.UNRECOGNIZED, builder.getInt32ToEnumFieldOrThrow(1));
 
     builder.putStringToInt32Field("a", 1);
     assertEquals(1, builder.getStringToInt32FieldOrThrow("a"));

+ 1 - 3
java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java

@@ -229,9 +229,7 @@ public class JsonFormatTest extends TestCase {
 
     TestMap.Builder mapBuilder = TestMap.newBuilder();
     mapBuilder.putInt32ToEnumMapValue(1, 0);
-    Map<Integer, Integer> mapWithInvalidValues = new HashMap<Integer, Integer>();
-    mapWithInvalidValues.put(2, 12345);
-    mapBuilder.putAllInt32ToEnumMapValue(mapWithInvalidValues);
+    mapBuilder.putInt32ToEnumMapValue(2, 12345);
     TestMap mapMessage = mapBuilder.build();
     assertEquals(
         "{\n"

+ 0 - 3
src/google/protobuf/compiler/java/java_map_field.cc

@@ -417,9 +417,6 @@ GenerateBuilderMembers(io::Printer* printer) const {
           "    $key_type$ key,\n"
           "    $value_type$ value) {\n"
           "  $key_null_check$\n"
-          "  if ($value_enum_type$.forNumber(value) == null) {\n"
-          "    throw new java.lang.IllegalArgumentException();\n"
-          "  }\n"
           "  internalGetMutable$capitalized_name$().getMutableMap()\n"
           "      .put(key, value);\n"
           "  return this;\n"

+ 0 - 3
src/google/protobuf/compiler/java/java_map_field_lite.cc

@@ -642,9 +642,6 @@ GenerateBuilderMembers(io::Printer* printer) const {
           "    $key_type$ key,\n"
           "    $value_type$ value) {\n"
           "  $key_null_check$\n"
-          "  if ($value_enum_type$.forNumber(value) == null) {\n"
-          "    throw new java.lang.IllegalArgumentException();\n"
-          "  }\n"
           "  copyOnWrite();\n"
           "  instance.getMutable$capitalized_name$ValueMap().put(key, value);\n"
           "  return this;\n"