@@ -101,7 +101,8 @@ class JsonCodecMakerSpec extends WordSpec with Matchers {
101
101
102
102
case class BitSets (bs : BitSet , mbs : mutable.BitSet )
103
103
104
- case class CamelAndSnakeCases (camelCase : String , snake_case : String , `camel1` : String , `snake_1` : String )
104
+ case class CamelSnakeKebabCases (camelCase : Int , snake_case : Int , `kebab-case` : Int ,
105
+ `camel1` : Int , `snake_1` : Int , `kebab-1` : Int )
105
106
106
107
case class Indented (s : String , bd : BigDecimal , l : List [Int ], m : Map [Char , Double ])
107
108
@@ -677,31 +678,57 @@ class JsonCodecMakerSpec extends WordSpec with Matchers {
677
678
})
678
679
}
679
680
" serialize and deserialize with keys defined as is by fields" in {
680
- verifySerDeser(make[CamelAndSnakeCases ](CodecMakerConfig ()),
681
- CamelAndSnakeCases ( " VVV " , " WWW " , " YYY " , " ZZZ " ),
682
- """ {"camelCase":"VVV" ,"snake_case":"WWW" ,"camel1":"YYY" ,"snake_1":"ZZZ" }""" .getBytes)
681
+ verifySerDeser(make[CamelSnakeKebabCases ](CodecMakerConfig ()),
682
+ CamelSnakeKebabCases ( 1 , 2 , 3 , 4 , 5 , 6 ),
683
+ """ {"camelCase":1 ,"snake_case":2,"kebab-case":3 ,"camel1":4 ,"snake_1":5,"kebab-1":6 }""" .getBytes)
683
684
}
684
685
" serialize and deserialize with keys enforced to camelCase and throw parse exception when they are missing" in {
685
- val codecOfCamelAndSnakeCases = make[CamelAndSnakeCases ](CodecMakerConfig (JsonCodecMaker .enforceCamelCase))
686
+ val codecOfCamelAndSnakeCases = make[CamelSnakeKebabCases ](CodecMakerConfig (JsonCodecMaker .enforceCamelCase))
686
687
verifySerDeser(codecOfCamelAndSnakeCases,
687
- CamelAndSnakeCases ( " VVV " , " WWW " , " YYY " , " ZZZ " ),
688
- """ {"camelCase":"VVV" ,"snakeCase":"WWW" ,"camel1":"YYY" ,"snake1":"ZZZ" }""" .getBytes)
688
+ CamelSnakeKebabCases ( 1 , 2 , 3 , 4 , 5 , 6 ),
689
+ """ {"camelCase":1 ,"snakeCase":2,"kebabCase":3 ,"camel1":4 ,"snake1":5,"kebab1":6 }""" .getBytes)
689
690
assert(intercept[JsonParseException ] {
690
691
verifyDeser(codecOfCamelAndSnakeCases,
691
- CamelAndSnakeCases (" VVV" , " WWW" , " YYY" , " ZZZ" ),
692
- """ {"camel_case":"VVV","snake_case":"WWW","camel_1":"YYY","snake_1":"ZZZ"}""" .getBytes)
693
- }.getMessage.contains(" missing required field(s) \" camelCase\" , \" snakeCase\" , \" camel1\" , \" snake1\" , offset: 0x00000046" ))
692
+ CamelSnakeKebabCases (1 , 2 , 3 , 4 , 5 , 6 ),
693
+ """ {"camel_case":1,"snake_case":2,"kebab_case":3,"camel_1":4,"snake_1":5,"kebab_1":6}""" .getBytes)
694
+ }.getMessage.contains(" missing required field(s) \" camelCase\" , \" snakeCase\" , \" kebabCase\" , \" camel1\" , \" snake1\" , \" kebab1\" , offset: 0x00000051" ))
695
+ assert(intercept[JsonParseException ] {
696
+ verifyDeser(codecOfCamelAndSnakeCases,
697
+ CamelSnakeKebabCases (1 , 2 , 3 , 4 , 5 , 6 ),
698
+ """ {"camel-case":1,"snake-case":2,"kebab-case":3,"camel-1":4,"snake-1":5,"kebab-1":6}""" .getBytes)
699
+ }.getMessage.contains(" missing required field(s) \" camelCase\" , \" snakeCase\" , \" kebabCase\" , \" camel1\" , \" snake1\" , \" kebab1\" , offset: 0x00000051" ))
694
700
}
695
701
" serialize and deserialize with keys enforced to snake_case and throw parse exception when they are missing" in {
696
- val codecOfCamelAndSnakeCases = make[CamelAndSnakeCases ](CodecMakerConfig (JsonCodecMaker .enforce_snake_case))
702
+ val codecOfCamelAndSnakeCases = make[CamelSnakeKebabCases ](CodecMakerConfig (JsonCodecMaker .enforce_snake_case))
703
+ verifySerDeser(codecOfCamelAndSnakeCases,
704
+ CamelSnakeKebabCases (1 , 2 , 3 , 4 , 5 , 6 ),
705
+ """ {"camel_case":1,"snake_case":2,"kebab_case":3,"camel_1":4,"snake_1":5,"kebab_1":6}""" .getBytes)
706
+ assert(intercept[JsonParseException ] {
707
+ verifyDeser(codecOfCamelAndSnakeCases,
708
+ CamelSnakeKebabCases (1 , 2 , 3 , 4 , 5 , 6 ),
709
+ """ {"camelCase":1,"snakeCase":2,"kebabCase":3,"camel1":4,"snake1":5,"kebab1":6}""" .getBytes)
710
+ }.getMessage.contains(" missing required field(s) \" camel_case\" , \" snake_case\" , \" kebab_case\" , \" camel_1\" , \" snake_1\" , \" kebab_1\" , offset: 0x0000004b" ))
711
+ assert(intercept[JsonParseException ] {
712
+ verifyDeser(codecOfCamelAndSnakeCases,
713
+ CamelSnakeKebabCases (1 , 2 , 3 , 4 , 5 , 6 ),
714
+ """ {"camel-case":1,"snake-case":2,"kebab-case":3,"camel-1":4,"snake-1":5,"kebab-1":6}""" .getBytes)
715
+ }.getMessage.contains(" missing required field(s) \" camel_case\" , \" snake_case\" , \" kebab_case\" , \" camel_1\" , \" snake_1\" , \" kebab_1\" , offset: 0x00000051" ))
716
+ }
717
+ " serialize and deserialize with keys enforced to kebab-case and throw parse exception when they are missing" in {
718
+ val codecOfCamelAndSnakeCases = make[CamelSnakeKebabCases ](CodecMakerConfig (JsonCodecMaker .`enforce-kebab-case`))
697
719
verifySerDeser(codecOfCamelAndSnakeCases,
698
- CamelAndSnakeCases (" VVV" , " WWW" , " YYY" , " ZZZ" ),
699
- """ {"camel_case":"VVV","snake_case":"WWW","camel_1":"YYY","snake_1":"ZZZ"}""" .getBytes)
720
+ CamelSnakeKebabCases (1 , 2 , 3 , 4 , 5 , 6 ),
721
+ """ {"camel-case":1,"snake-case":2,"kebab-case":3,"camel-1":4,"snake-1":5,"kebab-1":6}""" .getBytes)
722
+ assert(intercept[JsonParseException ] {
723
+ verifyDeser(codecOfCamelAndSnakeCases,
724
+ CamelSnakeKebabCases (1 , 2 , 3 , 4 , 5 , 6 ),
725
+ """ {"camelCase":1,"snakeCase":2,"kebabCase":3,"camel1":4,"snake1":5,"kebab1":6}""" .getBytes)
726
+ }.getMessage.contains(" missing required field(s) \" camel-case\" , \" snake-case\" , \" kebab-case\" , \" camel-1\" , \" snake-1\" , \" kebab-1\" , offset: 0x0000004b" ))
700
727
assert(intercept[JsonParseException ] {
701
728
verifyDeser(codecOfCamelAndSnakeCases,
702
- CamelAndSnakeCases ( " VVV " , " WWW " , " YYY " , " ZZZ " ),
703
- """ {"camelCase":"VVV","snakeCase":"WWW","camel1":"YYY","snake1":"ZZZ" }""" .getBytes)
704
- }.getMessage.contains(" missing required field(s) \" camel_case \" , \" snake_case \" , \" camel_1 \" , \" snake_1 \" , offset: 0x00000042 " ))
729
+ CamelSnakeKebabCases ( 1 , 2 , 3 , 4 , 5 , 6 ),
730
+ """ {"camel_case":1,"snake_case":2,"kebab_case":3,"camel_1":4,"snake_1":5,"kebab_1":6 }""" .getBytes)
731
+ }.getMessage.contains(" missing required field(s) \" camel-case \" , \" snake-case \" , \" kebab-case \" , \" camel-1 \" , \" snake-1 \" , \" kebab-1 \" , offset: 0x00000051 " ))
705
732
}
706
733
" serialize and deserialize with keys overridden by annotation and throw parse exception when they are missing" in {
707
734
verifySerDeser(codecOfNameOverridden, NameOverridden (oldName = " VVV" ), """ {"new_name":"VVV"}""" .getBytes)
@@ -1060,6 +1087,11 @@ class JsonCodecMakerSpec extends WordSpec with Matchers {
1060
1087
JsonCodecMaker .enforceCamelCase(" o_ooo_" ) shouldBe " oOoo"
1061
1088
JsonCodecMaker .enforceCamelCase(" O_OOO_111" ) shouldBe " oOoo111"
1062
1089
}
1090
+ " transform kebab-case names to camelCase" in {
1091
+ JsonCodecMaker .enforceCamelCase(" o-o" ) shouldBe " oO"
1092
+ JsonCodecMaker .enforceCamelCase(" o-ooo-" ) shouldBe " oOoo"
1093
+ JsonCodecMaker .enforceCamelCase(" O-OOO-111" ) shouldBe " oOoo111"
1094
+ }
1063
1095
" leave camelCase names as is" in {
1064
1096
JsonCodecMaker .enforceCamelCase(" oO" ) shouldBe " oO"
1065
1097
JsonCodecMaker .enforceCamelCase(" oOoo" ) shouldBe " oOoo"
@@ -1072,12 +1104,34 @@ class JsonCodecMakerSpec extends WordSpec with Matchers {
1072
1104
JsonCodecMaker .enforce_snake_case(" oOoo" ) shouldBe " o_ooo"
1073
1105
JsonCodecMaker .enforce_snake_case(" oOoo111" ) shouldBe " o_ooo_111"
1074
1106
}
1075
- " enforce lower case for snake_case names as is" in {
1107
+ " transform kebab-case names to snake_case" in {
1108
+ JsonCodecMaker .enforce_snake_case(" o-O" ) shouldBe " o_o"
1109
+ JsonCodecMaker .enforce_snake_case(" o-ooo-" ) shouldBe " o_ooo_"
1110
+ JsonCodecMaker .enforce_snake_case(" O-OOO-111" ) shouldBe " o_ooo_111"
1111
+ }
1112
+ " enforce lower case for snake_case names" in {
1076
1113
JsonCodecMaker .enforce_snake_case(" o_O" ) shouldBe " o_o"
1077
1114
JsonCodecMaker .enforce_snake_case(" o_ooo_" ) shouldBe " o_ooo_"
1078
1115
JsonCodecMaker .enforce_snake_case(" O_OOO_111" ) shouldBe " o_ooo_111"
1079
1116
}
1080
1117
}
1118
+ " JsonCodecMaker.enforce-kebab-case" should {
1119
+ " transform camelCase names to kebab-case" in {
1120
+ JsonCodecMaker .`enforce-kebab-case`(" oO" ) shouldBe " o-o"
1121
+ JsonCodecMaker .`enforce-kebab-case`(" oOoo" ) shouldBe " o-ooo"
1122
+ JsonCodecMaker .`enforce-kebab-case`(" oOoo111" ) shouldBe " o-ooo-111"
1123
+ }
1124
+ " transform snake_case names to kebab-case" in {
1125
+ JsonCodecMaker .`enforce-kebab-case`(" o_O" ) shouldBe " o-o"
1126
+ JsonCodecMaker .`enforce-kebab-case`(" o_ooo_" ) shouldBe " o-ooo-"
1127
+ JsonCodecMaker .`enforce-kebab-case`(" O_OOO_111" ) shouldBe " o-ooo-111"
1128
+ }
1129
+ " enforce lower case for kebab-case names" in {
1130
+ JsonCodecMaker .`enforce-kebab-case`(" o-O" ) shouldBe " o-o"
1131
+ JsonCodecMaker .`enforce-kebab-case`(" o-ooo-" ) shouldBe " o-ooo-"
1132
+ JsonCodecMaker .`enforce-kebab-case`(" O-OOO-111" ) shouldBe " o-ooo-111"
1133
+ }
1134
+ }
1081
1135
" JsonCodecMaker.simpleClassName" should {
1082
1136
" shorten full class name to simple class name" in {
1083
1137
JsonCodecMaker .simpleClassName(" com.github.plohkotnyuk.jsoniter_scala.Test" ) shouldBe " Test"
0 commit comments