more fixes for json_escape
This commit is contained in:
parent
cd1a6deaaa
commit
ad3e870615
2 changed files with 22 additions and 4 deletions
|
@ -1452,6 +1452,19 @@ escape_forward_slash_test_() ->
|
||||||
].
|
].
|
||||||
|
|
||||||
|
|
||||||
|
json_escape_test_() ->
|
||||||
|
[
|
||||||
|
{"json escape test", ?_assertEqual(
|
||||||
|
decode(<<"[\"a string\\n\"]">>, [json_escape]),
|
||||||
|
[start_array, {string, <<"a string\\n">>}, end_array, end_json]
|
||||||
|
)},
|
||||||
|
{"no json escape test", ?_assertEqual(
|
||||||
|
decode(<<"[\"a string\\n\"]">>, []),
|
||||||
|
[start_array, {string, <<"a string\n">>}, end_array, end_json]
|
||||||
|
)}
|
||||||
|
].
|
||||||
|
|
||||||
|
|
||||||
noncharacters_test_() ->
|
noncharacters_test_() ->
|
||||||
[
|
[
|
||||||
{"noncharacters - badjson",
|
{"noncharacters - badjson",
|
||||||
|
|
|
@ -105,15 +105,19 @@ fix_key(Key) when is_binary(Key) -> Key.
|
||||||
|
|
||||||
clean_string(Bin, Opts) ->
|
clean_string(Bin, Opts) ->
|
||||||
case Opts#opts.loose_unicode of
|
case Opts#opts.loose_unicode of
|
||||||
true -> jsx_utils:json_escape(clean_string(Bin, 0, size(Bin), Opts), Opts)
|
true -> maybe_escape(clean_string(Bin, 0, size(Bin), Opts), Opts)
|
||||||
; false ->
|
; false ->
|
||||||
case is_clean(Bin) of
|
case is_clean(Bin) of
|
||||||
true -> jsx_utils:json_escape(Bin, Opts)
|
true -> maybe_escape(Bin, Opts)
|
||||||
; false -> erlang:error(badarg, [Bin, Opts])
|
; false -> erlang:error(badarg, [Bin, Opts])
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
maybe_escape(Bin, Opts=#opts{json_escape=true}) -> jsx_utils:json_escape(Bin, Opts);
|
||||||
|
maybe_escape(Bin, _) -> Bin.
|
||||||
|
|
||||||
|
|
||||||
is_clean(<<>>) -> true;
|
is_clean(<<>>) -> true;
|
||||||
is_clean(<<X/utf8, Rest/binary>>) when X < 16#80 -> is_clean(Rest);
|
is_clean(<<X/utf8, Rest/binary>>) when X < 16#80 -> is_clean(Rest);
|
||||||
is_clean(<<X/utf8, Rest/binary>>) when X < 16#800 -> is_clean(Rest);
|
is_clean(<<X/utf8, Rest/binary>>) when X < 16#800 -> is_clean(Rest);
|
||||||
|
@ -403,7 +407,7 @@ bad_utf8_test_() ->
|
||||||
].
|
].
|
||||||
|
|
||||||
|
|
||||||
encode(Term) -> (encoder(jsx, [], []))(Term).
|
encode(Term) -> encode(Term, []).
|
||||||
|
|
||||||
encode(Term, Opts) ->
|
encode(Term, Opts) ->
|
||||||
try (encoder(jsx, [], Opts))(Term)
|
try (encoder(jsx, [], Opts))(Term)
|
||||||
|
@ -413,7 +417,8 @@ encode(Term, Opts) ->
|
||||||
|
|
||||||
encode_test_() ->
|
encode_test_() ->
|
||||||
[
|
[
|
||||||
{"naked string", ?_assertEqual(encode(<<"a string">>), [{string, <<"a string">>}, end_json])},
|
{"naked string", ?_assertEqual(encode(<<"a string\n">>), [{string, <<"a string\n">>}, end_json])},
|
||||||
|
{"escaped naked string", ?_assertEqual(encode(<<"a string\n">>, [json_escape]), [{string, <<"a string\\n">>}, end_json])},
|
||||||
{"naked integer", ?_assertEqual(encode(123), [{integer, 123}, end_json])},
|
{"naked integer", ?_assertEqual(encode(123), [{integer, 123}, end_json])},
|
||||||
{"naked float", ?_assertEqual(encode(1.23), [{float, 1.23}, end_json])},
|
{"naked float", ?_assertEqual(encode(1.23), [{float, 1.23}, end_json])},
|
||||||
{"naked literal", ?_assertEqual(encode(null), [{literal, null}, end_json])},
|
{"naked literal", ?_assertEqual(encode(null), [{literal, null}, end_json])},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue