| 188 | const specialCharacters = "\uffff\ufffd世界\u007f\u00ff\U0010FFFF" |
| 189 | |
| 190 | func TestJSONSpecialCharacters(t *testing.T) { |
| 191 | baselineMap := map[string]any{specialCharacters: specialCharacters} |
| 192 | baselineData, err := json.Marshal(baselineMap) |
| 193 | require.NoError(t, err) // baseline proves this key is supported by official json library |
| 194 | t.Logf("specialCharacters: %#v as []rune:%v", specialCharacters, []rune(specialCharacters)) |
| 195 | t.Logf("baseline json data: %s", baselineData) |
| 196 | |
| 197 | t.Run("marshal special characters", func(t *testing.T) { |
| 198 | om := New[string, any]() |
| 199 | om.Set(specialCharacters, specialCharacters) |
| 200 | b, err := json.Marshal(om) |
| 201 | require.NoError(t, err) |
| 202 | require.Equal(t, baselineData, b) |
| 203 | |
| 204 | type myString string |
| 205 | om2 := New[myString, myString]() |
| 206 | om2.Set(specialCharacters, specialCharacters) |
| 207 | b, err = json.Marshal(om2) |
| 208 | require.NoError(t, err) |
| 209 | require.Equal(t, baselineData, b) |
| 210 | }) |
| 211 | |
| 212 | t.Run("unmarshall special characters", func(t *testing.T) { |
| 213 | om := New[string, any]() |
| 214 | require.NoError(t, json.Unmarshal(baselineData, &om)) |
| 215 | assertOrderedPairsEqual(t, om, |
| 216 | []string{specialCharacters}, |
| 217 | []any{specialCharacters}) |
| 218 | |
| 219 | type myString string |
| 220 | om2 := New[myString, myString]() |
| 221 | require.NoError(t, json.Unmarshal(baselineData, &om2)) |
| 222 | assertOrderedPairsEqual(t, om2, |
| 223 | []myString{specialCharacters}, |
| 224 | []myString{specialCharacters}) |
| 225 | }) |
| 226 | } |
| 227 | |
| 228 | // to test structs that have nested map fields |
| 229 | type nestedMaps struct { |