diff --git a/src/jsx_encoder.erl b/src/jsx_encoder.erl index a06c270..2ca2a0c 100644 --- a/src/jsx_encoder.erl +++ b/src/jsx_encoder.erl @@ -343,29 +343,4 @@ pre_encoders_test_() -> ]. -escapes_test_() -> - [ - {"backspace escape", ?_assertEqual(encode(<<"\b">>, [escaped_strings]), [{string, <<"\\b">>}, end_json])}, - {"formfeed escape", ?_assertEqual(encode(<<"\f">>, [escaped_strings]), [{string, <<"\\f">>}, end_json])}, - {"newline escape", ?_assertEqual(encode(<<"\n">>, [escaped_strings]), [{string, <<"\\n">>}, end_json])}, - {"carriage return escape", ?_assertEqual(encode(<<"\r">>, [escaped_strings]), [{string, <<"\\r">>}, end_json])}, - {"tab escape", ?_assertEqual(encode(<<"\t">>, [escaped_strings]), [{string, <<"\\t">>}, end_json])}, - {"quote escape", ?_assertEqual(encode(<<"\"">>, [escaped_strings]), [{string, <<"\\\"">>}, end_json])}, - {"forward slash escape", ?_assertEqual(encode(<<"/">>, [escaped_strings, escaped_forward_slashes]), [{string, <<"\\/">>}, end_json])}, - {"no forward slash escape", ?_assertEqual(encode(<<"/">>, [escaped_strings]), [{string, <<"/">>}, end_json])}, - {"back slash escape", ?_assertEqual(encode(<<"\\">>, [escaped_strings]), [{string, <<"\\\\">>}, end_json])}, - {"jsonp escape", ?_assertEqual( - encode(<<16#2028/utf8, 16#2029/utf8>>, [escaped_strings]), - [{string, <<"\\u2028\\u2029">>}, end_json] - )}, - {"no jsonp escape", ?_assertEqual( - encode(<<16#2028/utf8, 16#2029/utf8>>, [escaped_strings, unescaped_jsonp]), - [{string, <<16#2028/utf8, 16#2029/utf8>>}, end_json] - )}, - {"control escape", ?_assertEqual(encode(<<0>>, [escaped_strings]), [{string, <<"\\u0000">>}, end_json])}, - {"dirty strings", ?_assertEqual(encode(<<"\n">>, [escaped_strings, dirty_strings]), [{string, <<"\n">>}, end_json])}, - {"ignore bad escapes", ?_assertEqual(encode(<<"\\x25">>, [escaped_strings, ignored_bad_escapes]), [{string, <<"\\\\x25">>}, end_json])} - ]. - - -endif. \ No newline at end of file diff --git a/src/jsx_parser.erl b/src/jsx_parser.erl index d622b5d..e00bc2c 100644 --- a/src/jsx_parser.erl +++ b/src/jsx_parser.erl @@ -341,32 +341,4 @@ encode_failures_test_() -> ]. - - - -escapes_test_() -> - [ - {"backspace escape", ?_assertEqual(encode(<<"\b">>, [escaped_strings]), [{string, <<"\\b">>}, end_json])}, - {"formfeed escape", ?_assertEqual(encode(<<"\f">>, [escaped_strings]), [{string, <<"\\f">>}, end_json])}, - {"newline escape", ?_assertEqual(encode(<<"\n">>, [escaped_strings]), [{string, <<"\\n">>}, end_json])}, - {"carriage return escape", ?_assertEqual(encode(<<"\r">>, [escaped_strings]), [{string, <<"\\r">>}, end_json])}, - {"tab escape", ?_assertEqual(encode(<<"\t">>, [escaped_strings]), [{string, <<"\\t">>}, end_json])}, - {"quote escape", ?_assertEqual(encode(<<"\"">>, [escaped_strings]), [{string, <<"\\\"">>}, end_json])}, - {"forward slash escape", ?_assertEqual(encode(<<"/">>, [escaped_strings, escaped_forward_slashes]), [{string, <<"\\/">>}, end_json])}, - {"no forward slash escape", ?_assertEqual(encode(<<"/">>, [escaped_strings]), [{string, <<"/">>}, end_json])}, - {"back slash escape", ?_assertEqual(encode(<<"\\">>, [escaped_strings]), [{string, <<"\\\\">>}, end_json])}, - {"jsonp escape", ?_assertEqual( - encode(<<16#2028/utf8, 16#2029/utf8>>, [escaped_strings]), - [{string, <<"\\u2028\\u2029">>}, end_json] - )}, - {"no jsonp escape", ?_assertEqual( - encode(<<16#2028/utf8, 16#2029/utf8>>, [escaped_strings, unescaped_jsonp]), - [{string, <<16#2028/utf8, 16#2029/utf8>>}, end_json] - )}, - {"control escape", ?_assertEqual(encode(<<0>>, [escaped_strings]), [{string, <<"\\u0000">>}, end_json])}, - {"dirty strings", ?_assertEqual(encode(<<"\n">>, [escaped_strings, dirty_strings]), [{string, <<"\n">>}, end_json])}, - {"ignore bad escapes", ?_assertEqual(encode(<<"\\x25">>, [escaped_strings, ignored_bad_escapes]), [{string, <<"\\\\x25">>}, end_json])} - ]. - - -endif. \ No newline at end of file diff --git a/src/jsx_utils.erl b/src/jsx_utils.erl index a6c4bf4..31f376c 100644 --- a/src/jsx_utils.erl +++ b/src/jsx_utils.erl @@ -712,6 +712,62 @@ clean_test_() -> escape_test_() -> [ + {"escape backspace", ?_assertEqual( + <<"\\b">>, + clean_string(to_fake_utf8(16#0008), #opts{escaped_strings=true}) + )}, + {"escape tab", ?_assertEqual( + <<"\\t">>, + clean_string(to_fake_utf8(16#0009), #opts{escaped_strings=true}) + )}, + {"escape newline", ?_assertEqual( + <<"\\n">>, + clean_string(to_fake_utf8(16#000a), #opts{escaped_strings=true}) + )}, + {"escape formfeed", ?_assertEqual( + <<"\\f">>, + clean_string(to_fake_utf8(16#000c), #opts{escaped_strings=true}) + )}, + {"escape carriage return", ?_assertEqual( + <<"\\r">>, + clean_string(to_fake_utf8(16#000d), #opts{escaped_strings=true}) + )}, + {"escape quote", ?_assertEqual( + <<"\\\"">>, + clean_string(to_fake_utf8(16#0022), #opts{escaped_strings=true}) + )}, + {"escape forward slash", ?_assertEqual( + <<"\\/">>, + clean_string(to_fake_utf8(16#002f), #opts{escaped_strings=true, escaped_forward_slashes=true}) + )}, + {"do not escape forward slash", ?_assertEqual( + <<"/">>, + clean_string(to_fake_utf8(16#002f), #opts{escaped_strings=true}) + )}, + {"escape backslash", ?_assertEqual( + <<"\\\\">>, + clean_string(to_fake_utf8(16#005c), #opts{escaped_strings=true}) + )}, + {"escape jsonp (u2028)", ?_assertEqual( + <<"\\u2028">>, + clean_string(to_fake_utf8(16#2028), #opts{escaped_strings=true}) + )}, + {"do not escape jsonp (u2028)", ?_assertEqual( + <<16#2028/utf8>>, + clean_string(to_fake_utf8(16#2028), #opts{escaped_strings=true, unescaped_jsonp=true}) + )}, + {"escape jsonp (u2029)", ?_assertEqual( + <<"\\u2029">>, + clean_string(to_fake_utf8(16#2029), #opts{escaped_strings=true}) + )}, + {"do not escape jsonp (u2029)", ?_assertEqual( + <<16#2029/utf8>>, + clean_string(to_fake_utf8(16#2029), #opts{escaped_strings=true, unescaped_jsonp=true}) + )}, + {"dirty string", ?_assertEqual( + <<"\n">>, + clean_string(to_fake_utf8(16#000a), #opts{escaped_strings=true, dirty_strings=true}) + )}, {"escape u0000", ?_assertEqual( <<"\\u0000">>, clean_string(to_fake_utf8(16#0000), #opts{escaped_strings=true}) @@ -744,30 +800,10 @@ escape_test_() -> <<"\\u0007">>, clean_string(to_fake_utf8(16#0007), #opts{escaped_strings=true}) )}, - {"escape u0008", ?_assertEqual( - <<"\\b">>, - clean_string(to_fake_utf8(16#0008), #opts{escaped_strings=true}) - )}, - {"escape u0009", ?_assertEqual( - <<"\\t">>, - clean_string(to_fake_utf8(16#0009), #opts{escaped_strings=true}) - )}, - {"escape u000a", ?_assertEqual( - <<"\\n">>, - clean_string(to_fake_utf8(16#000a), #opts{escaped_strings=true}) - )}, {"escape u000b", ?_assertEqual( <<"\\u000b">>, clean_string(to_fake_utf8(16#000b), #opts{escaped_strings=true}) )}, - {"escape u000c", ?_assertEqual( - <<"\\f">>, - clean_string(to_fake_utf8(16#000c), #opts{escaped_strings=true}) - )}, - {"escape u000d", ?_assertEqual( - <<"\\r">>, - clean_string(to_fake_utf8(16#000d), #opts{escaped_strings=true}) - )}, {"escape u000e", ?_assertEqual( <<"\\u000e">>, clean_string(to_fake_utf8(16#000e), #opts{escaped_strings=true}) @@ -839,26 +875,6 @@ escape_test_() -> {"escape u001f", ?_assertEqual( <<"\\u001f">>, clean_string(to_fake_utf8(16#001f), #opts{escaped_strings=true}) - )}, - {"escape u0022", ?_assertEqual( - <<"\\\"">>, - clean_string(to_fake_utf8(16#0022), #opts{escaped_strings=true}) - )}, - {"escape u002f", ?_assertEqual( - <<"\\/">>, - clean_string(to_fake_utf8(16#002f), #opts{escaped_strings=true, escaped_forward_slashes=true}) - )}, - {"escape u005c", ?_assertEqual( - <<"\\\\">>, - clean_string(to_fake_utf8(16#005c), #opts{escaped_strings=true}) - )}, - {"escape u2028", ?_assertEqual( - <<"\\u2028">>, - clean_string(to_fake_utf8(16#2028), #opts{escaped_strings=true}) - )}, - {"escape u2029", ?_assertEqual( - <<"\\u2029">>, - clean_string(to_fake_utf8(16#2029), #opts{escaped_strings=true}) )} ].