15
15
import com .google .protobuf .conformance .Conformance ;
16
16
import com .google .protobuf .util .JsonFormat ;
17
17
import com .google .protobuf .util .JsonFormat .TypeRegistry ;
18
+ import com .google .protobuf_test_messages .editions .proto2 .TestMessagesProto2Editions ;
19
+ import com .google .protobuf_test_messages .editions .proto3 .TestMessagesProto3Editions ;
18
20
import com .google .protobuf_test_messages .proto2 .TestMessagesProto2 ;
19
21
import com .google .protobuf_test_messages .proto2 .TestMessagesProto2 .TestAllTypesProto2 ;
20
22
import com .google .protobuf_test_messages .proto3 .TestMessagesProto3 ;
@@ -205,42 +207,63 @@ private <T extends AbstractMessage> T parseBinary(
205
207
return messages .get (0 );
206
208
}
207
209
210
+ private Class <? extends AbstractMessage > createTestMessage (String messageType ) {
211
+ switch (messageType ) {
212
+ case "protobuf_test_messages.proto3.TestAllTypesProto3" :
213
+ return TestAllTypesProto3 .class ;
214
+ case "protobuf_test_messages.proto2.TestAllTypesProto2" :
215
+ return TestAllTypesProto2 .class ;
216
+ case "protobuf_test_messages.editions.proto3.TestAllTypesProto3" :
217
+ return TestMessagesProto3Editions .TestAllTypesProto3 .class ;
218
+ case "protobuf_test_messages.editions.proto2.TestAllTypesProto2" :
219
+ return TestMessagesProto2Editions .TestAllTypesProto2 .class ;
220
+ default :
221
+ throw new IllegalArgumentException (
222
+ "Protobuf request has unexpected payload type: " + messageType );
223
+ }
224
+ }
225
+
226
+ private Class <?> createTestFile (String messageType ) {
227
+ switch (messageType ) {
228
+ case "protobuf_test_messages.proto3.TestAllTypesProto3" :
229
+ return TestMessagesProto3 .class ;
230
+ case "protobuf_test_messages.proto2.TestAllTypesProto2" :
231
+ return TestMessagesProto2 .class ;
232
+ case "protobuf_test_messages.editions.proto3.TestAllTypesProto3" :
233
+ return TestMessagesProto3Editions .class ;
234
+ case "protobuf_test_messages.editions.proto2.TestAllTypesProto2" :
235
+ return TestMessagesProto2Editions .class ;
236
+ default :
237
+ throw new IllegalArgumentException (
238
+ "Protobuf request has unexpected payload type: " + messageType );
239
+ }
240
+ }
241
+
242
+ @ SuppressWarnings ("unchecked" )
208
243
private Conformance .ConformanceResponse doTest (Conformance .ConformanceRequest request ) {
209
244
AbstractMessage testMessage ;
210
245
String messageType = request .getMessageType ();
211
- boolean isProto3 = messageType .equals ("protobuf_test_messages.proto3.TestAllTypesProto3" );
212
- boolean isProto2 = messageType .equals ("protobuf_test_messages.proto2.TestAllTypesProto2" );
213
246
214
247
switch (request .getPayloadCase ()) {
215
248
case PROTOBUF_PAYLOAD :
216
249
{
217
- if (isProto3 ) {
218
- try {
219
- ExtensionRegistry extensions = ExtensionRegistry .newInstance ();
220
- TestMessagesProto3 .registerAllExtensions (extensions );
221
- testMessage =
222
- parseBinary (
223
- request .getProtobufPayload (), TestAllTypesProto3 .parser (), extensions );
224
- } catch (InvalidProtocolBufferException e ) {
225
- return Conformance .ConformanceResponse .newBuilder ()
226
- .setParseError (e .getMessage ())
227
- .build ();
228
- }
229
- } else if (isProto2 ) {
230
- try {
231
- ExtensionRegistry extensions = ExtensionRegistry .newInstance ();
232
- TestMessagesProto2 .registerAllExtensions (extensions );
233
- testMessage =
234
- parseBinary (
235
- request .getProtobufPayload (), TestAllTypesProto2 .parser (), extensions );
236
- } catch (InvalidProtocolBufferException e ) {
237
- return Conformance .ConformanceResponse .newBuilder ()
238
- .setParseError (e .getMessage ())
239
- .build ();
240
- }
241
- } else {
242
- throw new IllegalArgumentException (
243
- "Protobuf request has unexpected payload type: " + messageType );
250
+ try {
251
+ ExtensionRegistry extensions = ExtensionRegistry .newInstance ();
252
+ createTestFile (messageType )
253
+ .getMethod ("registerAllExtensions" , ExtensionRegistry .class )
254
+ .invoke (null , extensions );
255
+ testMessage =
256
+ parseBinary (
257
+ request .getProtobufPayload (),
258
+ (Parser <AbstractMessage >)
259
+ createTestMessage (messageType ).getMethod ("parser" ).invoke (null ),
260
+ extensions );
261
+ } catch (InvalidProtocolBufferException e ) {
262
+ return Conformance .ConformanceResponse .newBuilder ()
263
+ .setParseError (e .getMessage ())
264
+ .build ();
265
+ } catch (Exception e ) {
266
+ throw new RuntimeException (e );
244
267
}
245
268
break ;
246
269
}
@@ -252,54 +275,34 @@ private Conformance.ConformanceResponse doTest(Conformance.ConformanceRequest re
252
275
== Conformance .TestCategory .JSON_IGNORE_UNKNOWN_PARSING_TEST ) {
253
276
parser = parser .ignoringUnknownFields ();
254
277
}
255
- if (isProto3 ) {
256
- TestMessagesProto3 .TestAllTypesProto3 .Builder builder =
257
- TestMessagesProto3 .TestAllTypesProto3 .newBuilder ();
258
- parser .merge (request .getJsonPayload (), builder );
259
- testMessage = builder .build ();
260
- } else if (isProto2 ) {
261
- TestMessagesProto2 .TestAllTypesProto2 .Builder builder =
262
- TestMessagesProto2 .TestAllTypesProto2 .newBuilder ();
263
- parser .merge (request .getJsonPayload (), builder );
264
- testMessage = builder .build ();
265
- } else {
266
- throw new IllegalArgumentException (
267
- "Protobuf request has unexpected payload type: " + messageType );
268
- }
278
+ AbstractMessage .Builder <?> builder =
279
+ (AbstractMessage .Builder <?>)
280
+ createTestMessage (messageType ).getMethod ("newBuilder" ).invoke (null );
281
+ parser .merge (request .getJsonPayload (), builder );
282
+ testMessage = (AbstractMessage ) builder .build ();
269
283
} catch (InvalidProtocolBufferException e ) {
270
284
return Conformance .ConformanceResponse .newBuilder ()
271
285
.setParseError (e .getMessage ())
272
286
.build ();
287
+ } catch (Exception e ) {
288
+ throw new RuntimeException (e );
273
289
}
274
290
break ;
275
291
}
276
292
case TEXT_PAYLOAD :
277
293
{
278
- if (isProto3 ) {
279
- try {
280
- TestMessagesProto3 .TestAllTypesProto3 .Builder builder =
281
- TestMessagesProto3 .TestAllTypesProto3 .newBuilder ();
282
- TextFormat .merge (request .getTextPayload (), builder );
283
- testMessage = builder .build ();
284
- } catch (TextFormat .ParseException e ) {
285
- return Conformance .ConformanceResponse .newBuilder ()
286
- .setParseError (e .getMessage ())
287
- .build ();
288
- }
289
- } else if (isProto2 ) {
290
- try {
291
- TestMessagesProto2 .TestAllTypesProto2 .Builder builder =
292
- TestMessagesProto2 .TestAllTypesProto2 .newBuilder ();
293
- TextFormat .merge (request .getTextPayload (), builder );
294
- testMessage = builder .build ();
294
+ try {
295
+ AbstractMessage .Builder <?> builder =
296
+ (AbstractMessage .Builder <?>)
297
+ createTestMessage (messageType ).getMethod ("newBuilder" ).invoke (null );
298
+ TextFormat .merge (request .getTextPayload (), builder );
299
+ testMessage = (AbstractMessage ) builder .build ();
295
300
} catch (TextFormat .ParseException e ) {
296
301
return Conformance .ConformanceResponse .newBuilder ()
297
302
.setParseError (e .getMessage ())
298
303
.build ();
299
- }
300
- } else {
301
- throw new IllegalArgumentException (
302
- "Protobuf request has unexpected payload type: " + messageType );
304
+ } catch (Exception e ) {
305
+ throw new RuntimeException (e );
303
306
}
304
307
break ;
305
308
}
@@ -378,6 +381,9 @@ public void run() throws Exception {
378
381
typeRegistry =
379
382
TypeRegistry .newBuilder ()
380
383
.add (TestMessagesProto3 .TestAllTypesProto3 .getDescriptor ())
384
+ .add (
385
+ com .google .protobuf_test_messages .editions .proto3 .TestMessagesProto3Editions
386
+ .TestAllTypesProto3 .getDescriptor ())
381
387
.build ();
382
388
while (doTestIo ()) {
383
389
this .testCount ++;
0 commit comments