@@ -1314,6 +1314,37 @@ func generateFieldsForJSONReservedName() []*descriptor.Field {
13141314 return append (fields , field )
13151315}
13161316
1317+ func generateMsgsForJSONReservedName () []* descriptor.Message {
1318+ result := make ([]* descriptor.Message , 0 )
1319+ // The first message, its field is field_abc and its type is NewType
1320+ // NewType field_abc
1321+ fieldName := "field_abc"
1322+ fieldJSONName := "fieldAbc"
1323+ messageName1 := "message1"
1324+ messageType := "pkg.a.NewType"
1325+ pfd := protodescriptor.FieldDescriptorProto {Name : & fieldName , JsonName : & fieldJSONName , TypeName : & messageType }
1326+ result = append (result ,
1327+ & descriptor.Message {
1328+ DescriptorProto : & protodescriptor.DescriptorProto {
1329+ Name : & messageName1 , Field : []* protodescriptor.FieldDescriptorProto {& pfd },
1330+ },
1331+ })
1332+ // The second message, its name is NewName, its type is string
1333+ // message NewType {
1334+ // string field_newName [json_name = RESERVEDJSONNAME]
1335+ // }
1336+ messageName := "NewType"
1337+ field := "field_newName"
1338+ fieldJSONName2 := "RESERVEDJSONNAME"
1339+ pfd2 := protodescriptor.FieldDescriptorProto {Name : & field , JsonName : & fieldJSONName2 ,}
1340+ result = append (result , & descriptor.Message {
1341+ DescriptorProto : & protodescriptor.DescriptorProto {
1342+ Name : & messageName , Field : []* protodescriptor.FieldDescriptorProto {& pfd2 },
1343+ },
1344+ })
1345+ return result
1346+ }
1347+
13171348func TestTemplateWithJsonCamelCase (t * testing.T ) {
13181349 var tests = []struct {
13191350 input string
@@ -1331,11 +1362,12 @@ func TestTemplateWithJsonCamelCase(t *testing.T) {
13311362 {"test/{a_a}" , "test/{aA}" },
13321363 {"test/{ab_c}" , "test/{abC}" },
13331364 {"test/{json_name}" , "test/{jsonNAME}" },
1365+ {"test/{field_abc.field_newName}" , "test/{fieldAbc.RESERVEDJSONNAME}" },
13341366 }
13351367 reg := descriptor .NewRegistry ()
13361368 reg .SetUseJSONNamesForFields (true )
13371369 for _ , data := range tests {
1338- actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName ())
1370+ actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName (), generateMsgsForJSONReservedName () )
13391371 if data .expected != actual {
13401372 t .Errorf ("Expected templateToSwaggerPath(%v) = %v, actual: %v" , data .input , data .expected , actual )
13411373 }
@@ -1358,11 +1390,12 @@ func TestTemplateWithoutJsonCamelCase(t *testing.T) {
13581390 {"test/{ab}" , "test/{ab}" },
13591391 {"test/{a_a}" , "test/{a_a}" },
13601392 {"test/{json_name}" , "test/{json_name}" },
1393+ {"test/{field_abc.field_newName}" , "test/{field_abc.field_newName}" },
13611394 }
13621395 reg := descriptor .NewRegistry ()
13631396 reg .SetUseJSONNamesForFields (false )
13641397 for _ , data := range tests {
1365- actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName ())
1398+ actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName (), generateMsgsForJSONReservedName () )
13661399 if data .expected != actual {
13671400 t .Errorf ("Expected templateToSwaggerPath(%v) = %v, actual: %v" , data .input , data .expected , actual )
13681401 }
@@ -1394,14 +1427,14 @@ func TestTemplateToSwaggerPath(t *testing.T) {
13941427 reg := descriptor .NewRegistry ()
13951428 reg .SetUseJSONNamesForFields (false )
13961429 for _ , data := range tests {
1397- actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName ())
1430+ actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName (), generateMsgsForJSONReservedName () )
13981431 if data .expected != actual {
13991432 t .Errorf ("Expected templateToSwaggerPath(%v) = %v, actual: %v" , data .input , data .expected , actual )
14001433 }
14011434 }
14021435 reg .SetUseJSONNamesForFields (true )
14031436 for _ , data := range tests {
1404- actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName ())
1437+ actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName (), generateMsgsForJSONReservedName () )
14051438 if data .expected != actual {
14061439 t .Errorf ("Expected templateToSwaggerPath(%v) = %v, actual: %v" , data .input , data .expected , actual )
14071440 }
@@ -1416,7 +1449,7 @@ func BenchmarkTemplateToSwaggerPath(b *testing.B) {
14161449 reg .SetUseJSONNamesForFields (false )
14171450
14181451 for i := 0 ; i < b .N ; i ++ {
1419- _ = templateToSwaggerPath (input , reg , generateFieldsForJSONReservedName ())
1452+ _ = templateToSwaggerPath (input , reg , generateFieldsForJSONReservedName (), generateMsgsForJSONReservedName () )
14201453 }
14211454 })
14221455
@@ -1425,7 +1458,7 @@ func BenchmarkTemplateToSwaggerPath(b *testing.B) {
14251458 reg .SetUseJSONNamesForFields (true )
14261459
14271460 for i := 0 ; i < b .N ; i ++ {
1428- _ = templateToSwaggerPath (input , reg , generateFieldsForJSONReservedName ())
1461+ _ = templateToSwaggerPath (input , reg , generateFieldsForJSONReservedName (), generateMsgsForJSONReservedName () )
14291462 }
14301463 })
14311464}
@@ -1501,14 +1534,14 @@ func TestFQMNtoSwaggerName(t *testing.T) {
15011534 reg := descriptor .NewRegistry ()
15021535 reg .SetUseJSONNamesForFields (false )
15031536 for _ , data := range tests {
1504- actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName ())
1537+ actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName (), generateMsgsForJSONReservedName () )
15051538 if data .expected != actual {
15061539 t .Errorf ("Expected templateToSwaggerPath(%v) = %v, actual: %v" , data .input , data .expected , actual )
15071540 }
15081541 }
15091542 reg .SetUseJSONNamesForFields (true )
15101543 for _ , data := range tests {
1511- actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName ())
1544+ actual := templateToSwaggerPath (data .input , reg , generateFieldsForJSONReservedName (), generateMsgsForJSONReservedName () )
15121545 if data .expected != actual {
15131546 t .Errorf ("Expected templateToSwaggerPath(%v) = %v, actual: %v" , data .input , data .expected , actual )
15141547 }
@@ -2369,3 +2402,92 @@ func TestTemplateWithoutErrorDefinition(t *testing.T) {
23692402 t .Errorf ("default Error response with reflink '%v', but its definition was not found" , refName )
23702403 }
23712404}
2405+
2406+ func Test_getReservedJsonName (t * testing.T ) {
2407+ type args struct {
2408+ fieldName string
2409+ messageNameToFieldsToJSONName map [string ]map [string ]string
2410+ fieldNameToType map [string ]string
2411+ }
2412+ tests := []struct {
2413+ name string
2414+ args args
2415+ want string
2416+ }{
2417+ {
2418+ "test case 1: single dot use case" ,
2419+ args {
2420+ fieldName : "abc.a_1" ,
2421+ messageNameToFieldsToJSONName : map [string ]map [string ]string {
2422+ "Msg" : {
2423+ "a_1" : "a1JSONNAME" ,
2424+ "b_1" : "b1JSONNAME" ,
2425+ },
2426+ },
2427+ fieldNameToType : map [string ]string {
2428+ "abc" : "pkg1.test.Msg" ,
2429+ "bcd" : "pkg1.test.Msg" ,
2430+ },
2431+ },
2432+ "a1JSONNAME" ,
2433+ },
2434+ {
2435+ "test case 2: single dot use case with no existing field" ,
2436+ args {
2437+ fieldName : "abc.d_1" ,
2438+ messageNameToFieldsToJSONName : map [string ]map [string ]string {
2439+ "Msg" : {
2440+ "a_1" : "a1JSONNAME" ,
2441+ "b_1" : "b1JSONNAME" ,
2442+ },
2443+ },
2444+ fieldNameToType : map [string ]string {
2445+ "abc" : "pkg1.test.Msg" ,
2446+ "bcd" : "pkg1.test.Msg" ,
2447+ },
2448+ },
2449+ "" ,
2450+ },
2451+ {
2452+ "test case 3: double dot use case" ,
2453+ args {
2454+ fieldName : "pkg.abc.a_1" ,
2455+ messageNameToFieldsToJSONName : map [string ]map [string ]string {
2456+ "Msg" : {
2457+ "a_1" : "a1JSONNAME" ,
2458+ "b_1" : "b1JSONNAME" ,
2459+ },
2460+ },
2461+ fieldNameToType : map [string ]string {
2462+ "abc" : "pkg1.test.Msg" ,
2463+ "bcd" : "pkg1.test.Msg" ,
2464+ },
2465+ },
2466+ "a1JSONNAME" ,
2467+ },
2468+ {
2469+ "test case 4: double dot use case with a not existed field" ,
2470+ args {
2471+ fieldName : "pkg.abc.c_1" ,
2472+ messageNameToFieldsToJSONName : map [string ]map [string ]string {
2473+ "Msg" : {
2474+ "a_1" : "a1JSONNAME" ,
2475+ "b_1" : "b1JSONNAME" ,
2476+ },
2477+ },
2478+ fieldNameToType : map [string ]string {
2479+ "abc" : "pkg1.test.Msg" ,
2480+ "bcd" : "pkg1.test.Msg" ,
2481+ },
2482+ },
2483+ "" ,
2484+ },
2485+ }
2486+ for _ , tt := range tests {
2487+ t .Run (tt .name , func (t * testing.T ) {
2488+ if got := getReservedJSONName (tt .args .fieldName , tt .args .messageNameToFieldsToJSONName , tt .args .fieldNameToType ); got != tt .want {
2489+ t .Errorf ("getReservedJSONName() = %v, want %v" , got , tt .want )
2490+ }
2491+ })
2492+ }
2493+ }
0 commit comments