@@ -352,7 +352,7 @@ public void testFieldDescriptorDefault() throws Exception {
352
352
}
353
353
354
354
@ Test
355
- public void testFieldDescriptorLegacyEnumFieldTreatedAsClosed () throws Exception {
355
+ public void testProto2FieldDescriptorLegacyEnumFieldTreatedAsClosed () throws Exception {
356
356
// Make an open enum definition.
357
357
FileDescriptorProto openEnumFile =
358
358
FileDescriptorProto .newBuilder ()
@@ -430,6 +430,111 @@ public void testFieldDescriptorLegacyEnumFieldTreatedAsClosed() throws Exception
430
430
.isTrue ();
431
431
}
432
432
433
+ @ Test
434
+ public void testEditionFieldDescriptorLegacyEnumFieldTreatedAsClosed () throws Exception {
435
+ // Make an open enum definition.
436
+ FileDescriptorProto openEnumFile =
437
+ FileDescriptorProto .newBuilder ()
438
+ .setName ("open_enum.proto" )
439
+ .setSyntax ("editions" )
440
+ .setEdition (Edition .EDITION_2023 )
441
+ .addEnumType (
442
+ EnumDescriptorProto .newBuilder ()
443
+ .setName ("TestEnumOpen" )
444
+ .addValue (
445
+ EnumValueDescriptorProto .newBuilder ()
446
+ .setName ("TestEnumOpen_VALUE0" )
447
+ .setNumber (0 )
448
+ .build ())
449
+ .build ())
450
+ .build ();
451
+ FileDescriptor openFileDescriptor =
452
+ Descriptors .FileDescriptor .buildFrom (openEnumFile , new FileDescriptor [0 ]);
453
+ EnumDescriptor openEnum = openFileDescriptor .getEnumTypes ().get (0 );
454
+ assertThat (openEnum .isClosed ()).isFalse ();
455
+
456
+ // Create a message that treats enum fields as closed.
457
+ FileDescriptorProto editionsClosedEnumFile =
458
+ FileDescriptorProto .newBuilder ()
459
+ .setName ("editions_closed_enum_field.proto" )
460
+ .addDependency ("open_enum.proto" )
461
+ .setSyntax ("editions" )
462
+ .setEdition (Edition .EDITION_2023 )
463
+ .setOptions (
464
+ FileOptions .newBuilder ()
465
+ .setFeatures (
466
+ DescriptorProtos .FeatureSet .newBuilder ()
467
+ .setEnumType (DescriptorProtos .FeatureSet .EnumType .CLOSED )
468
+ .build ())
469
+ .build ())
470
+ .addEnumType (
471
+ EnumDescriptorProto .newBuilder ()
472
+ .setName ("TestEnum" )
473
+ .addValue (
474
+ EnumValueDescriptorProto .newBuilder ()
475
+ .setName ("TestEnum_VALUE0" )
476
+ .setNumber (0 )
477
+ .build ())
478
+ .build ())
479
+ .addMessageType (
480
+ DescriptorProto .newBuilder ()
481
+ .setName ("TestClosedEnumField" )
482
+ .addField (
483
+ FieldDescriptorProto .newBuilder ()
484
+ .setName ("int_field" )
485
+ .setNumber (1 )
486
+ .setType (FieldDescriptorProto .Type .TYPE_INT32 )
487
+ .setLabel (FieldDescriptorProto .Label .LABEL_OPTIONAL )
488
+ .build ())
489
+ .addField (
490
+ FieldDescriptorProto .newBuilder ()
491
+ .setName ("open_enum" )
492
+ .setNumber (2 )
493
+ .setType (FieldDescriptorProto .Type .TYPE_ENUM )
494
+ .setTypeName ("TestEnumOpen" )
495
+ .setLabel (FieldDescriptorProto .Label .LABEL_OPTIONAL )
496
+ .setOptions (
497
+ DescriptorProtos .FieldOptions .newBuilder ()
498
+ .setFeatures (
499
+ DescriptorProtos .FeatureSet .newBuilder ()
500
+ .setExtension (
501
+ JavaFeaturesProto .java_ ,
502
+ JavaFeaturesProto .JavaFeatures .newBuilder ()
503
+ .setLegacyClosedEnum (true )
504
+ .build ())
505
+ .build ())
506
+ .build ())
507
+ .build ())
508
+ .addField (
509
+ FieldDescriptorProto .newBuilder ()
510
+ .setName ("closed_enum" )
511
+ .setNumber (3 )
512
+ .setType (FieldDescriptorProto .Type .TYPE_ENUM )
513
+ .setTypeName ("TestEnum" )
514
+ .setLabel (FieldDescriptorProto .Label .LABEL_OPTIONAL )
515
+ .build ())
516
+ .build ())
517
+ .build ();
518
+ // Ensure Java features are in unknown fields.
519
+ editionsClosedEnumFile =
520
+ FileDescriptorProto .parseFrom (
521
+ editionsClosedEnumFile .toByteString (), ExtensionRegistry .getEmptyRegistry ());
522
+ Descriptor editionsClosedMessage =
523
+ Descriptors .FileDescriptor .buildFrom (
524
+ editionsClosedEnumFile , new FileDescriptor [] {openFileDescriptor })
525
+ .getMessageTypes ()
526
+ .get (0 );
527
+ assertThat (
528
+ editionsClosedMessage .findFieldByName ("int_field" ).legacyEnumFieldTreatedAsClosed ())
529
+ .isFalse ();
530
+ assertThat (
531
+ editionsClosedMessage .findFieldByName ("closed_enum" ).legacyEnumFieldTreatedAsClosed ())
532
+ .isTrue ();
533
+ assertThat (
534
+ editionsClosedMessage .findFieldByName ("open_enum" ).legacyEnumFieldTreatedAsClosed ())
535
+ .isTrue ();
536
+ }
537
+
433
538
@ Test
434
539
public void testFieldDescriptorLegacyEnumFieldTreatedAsOpen () throws Exception {
435
540
// Make an open enum definition and message that treats enum fields as open.
0 commit comments