@@ -3702,21 +3702,55 @@ func TestJSONFieldNames(t *testing.T) {
37023702 expr : `dyn(msg).single_int32 == dyn(msg).singleInt32` ,
37033703 jsonFieldNames : true ,
37043704 },
3705+ {
3706+ name : "proto with extensions" ,
3707+ expr : `google.expr.proto2.test.ExampleType{fooBar: 'value'}.fooBar == 'value'` ,
3708+ jsonFieldNames : true ,
3709+ },
3710+ {
3711+ name : "json opt fields" ,
3712+ expr : "jsonOptMsg.int32_snake_case_json_name == 1 && " +
3713+ "jsonOptMsg.int64CamelCaseJsonName == 2 && " +
3714+ "jsonOptMsg.uint32DefaultJsonName == 3u && " +
3715+ "jsonOptMsg.`uint64-custom-json-name` == 4u && " +
3716+ "jsonOptMsg.single_string == 'shadows' && " +
3717+ "jsonOptMsg.singleString == 'shadowed'" ,
3718+ jsonFieldNames : true ,
3719+ },
3720+ {
3721+ name : "json opt fields fallback" ,
3722+ expr : "dyn(jsonOptMsg).int32_snake_case_json_name == 1 && " +
3723+ "dyn(jsonOptMsg).`uint64-custom-json-name` == 4u && " +
3724+ "dyn(jsonOptMsg).single_string == 'shadows' && " +
3725+ "dyn(jsonOptMsg).string_json_name_shadows == 'shadows' && " +
3726+ "dyn(jsonOptMsg).singleString == 'shadowed'" ,
3727+ jsonFieldNames : true ,
3728+ },
37053729 }
37063730 msg := & proto3pb.TestAllTypes {
37073731 SingleInt32 : 1 ,
37083732 MapStringString : map [string ]string {
37093733 "key" : "value" ,
37103734 },
37113735 }
3736+ jsonOptMsg := & proto3pb.TestJsonNames {
3737+ Int32SnakeCaseJsonName : 1 ,
3738+ Int64CamelCaseJsonName : 2 ,
3739+ Uint32DefaultJsonName : 3 ,
3740+ Uint64CustomJsonName : 4 ,
3741+ StringJsonNameShadows : "shadows" ,
3742+ SingleString : "shadowed" ,
3743+ }
37123744 for _ , tst := range tests {
37133745 tc := tst
37143746 t .Run (tc .name , func (t * testing.T ) {
37153747 env , err := NewEnv (
3748+ EnableIdentifierEscapeSyntax (),
37163749 JSONFieldNames (tc .jsonFieldNames ),
3717- Types (msg ),
3750+ Types (msg , & proto2pb. ExternalMessageType {}, jsonOptMsg ),
37183751 Container (string (msg .ProtoReflect ().Descriptor ().ParentFile ().Package ())),
37193752 Variable ("msg" , ObjectType (string (msg .ProtoReflect ().Descriptor ().FullName ()))),
3753+ Variable ("jsonOptMsg" , ObjectType (string (jsonOptMsg .ProtoReflect ().Descriptor ().FullName ()))),
37203754 )
37213755 if err != nil {
37223756 t .Fatalf ("NewEnv() failed: %v" , err )
@@ -3729,7 +3763,7 @@ func TestJSONFieldNames(t *testing.T) {
37293763 if err != nil {
37303764 t .Fatalf ("env.Program() failed: %v" , err )
37313765 }
3732- out , _ , err := prg .Eval (map [string ]any {"msg" : msg })
3766+ out , _ , err := prg .Eval (map [string ]any {"msg" : msg , "jsonOptMsg" : jsonOptMsg })
37333767 if err != nil {
37343768 t .Fatalf ("prg.Eval() failed: %v" , err )
37353769 }
0 commit comments