Browse Source

Merge ecc54c3b9f into 5c29452a1e

pull/150/merge
Gaspar Chilingarov 6 years ago
committed by GitHub
parent
commit
4712ffe932
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 8 deletions
  1. +3
    -1
      README.md
  2. +18
    -3
      c_src/encoder.c
  3. +12
    -1
      test/jiffy_07_compound_tests.erl
  4. +0
    -3
      test/jiffy_12_error_tests.erl

+ 3
- 1
README.md View File

@ -105,10 +105,12 @@ Data Format
[true, 1.0] -> [true, 1.0] -> [true, 1.0]
{[]} -> {} -> {[]}
{[{foo, bar}]} -> {"foo": "bar"} -> {[{<<"foo">>, <<"bar">>}]}
{[{123, bar}]} -> {"123": "bar"} -> {[{<<"123">>, <<"bar">>}]}
{[{<<"foo">>, <<"bar">>}]} -> {"foo": "bar"} -> {[{<<"foo">>, <<"bar">>}]}
#{<<"foo">> => <<"bar">>} -> {"foo": "bar"} -> #{<<"foo">> => <<"bar">>}
#{123 => <<"bar">>} -> {"123": "bar"} -> #{<<"123">> => <<"bar">>}
N.B. The last entry in this table is only valid for VM's that support
N.B. The last two entries in this table are only valid for VM's that support
the `maps` data type (i.e., 17.0 and newer) and client code must pass
the `return_maps` option to `jiffy:decode/2`.

+ 18
- 3
c_src/encoder.c View File

@ -811,9 +811,24 @@ encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
ret = enc_obj_error(e, "invalid_object_member_arity", item);
goto done;
}
if(!enc_string(e, tuple[0])) {
ret = enc_obj_error(e, "invalid_object_member_key", tuple[0]);
goto done;
if(enif_get_int64(env, tuple[0], &lval)) {
if (!enc_char(e, '"')) {
ret = enc_error(e, "internal_error");
goto done;
}
if(!enc_long(e, lval)) {
ret = enc_obj_error(e, "invalid_object_member_key", tuple[0]);
goto done;
}
if (!enc_char(e, '"')) {
ret = enc_error(e, "internal_error");
goto done;
}
} else {
if(!enc_string(e, tuple[0])) {
ret = enc_obj_error(e, "invalid_object_member_key", tuple[0]);
goto done;
}
}
if(!enc_colon(e)) {
ret = enc_error(e, "internal_error");

+ 12
- 1
test/jiffy_07_compound_tests.erl View File

@ -9,7 +9,8 @@
compound_success_test_() ->
[gen(ok, Case) || Case <- cases(ok)].
[gen(ok, Case) || Case <- cases(ok)] ++
[gen(special_encoding, Case) || Case <- cases(special_encoding)].
compound_failure_test_() ->
@ -24,6 +25,11 @@ gen(ok, {J1, E, J2}) ->
{"Encode", ?_assertEqual(J2, enc(E))}
]};
gen(special_encoding, {J, E}) ->
{msg("~s", [J]), [
{"Encode", ?_assertEqual(J, enc(E))}
]};
gen(error, J) ->
{msg("Error: ~s", [J]), [
?_assertThrow({error, _}, dec(J))
@ -53,6 +59,11 @@ cases(ok) ->
}
];
cases(special_encoding) ->
[
{<<"{\"123\":\"foo\"}">>, {[{123, <<"foo">>}]}}
];
cases(error) ->
[
<<"[{}">>,

+ 0
- 3
test/jiffy_12_error_tests.erl View File

@ -71,13 +71,10 @@ enc_invalid_object_member_key_test_() ->
E1 = {1, true},
{"invalid_object_member_key", [
{"Bad string", enc_error(Type, <<143>>, {[{<<143>>, true}]})},
{"Basic", enc_error(Type, 1, {[{1, true}]})},
{"Basic", enc_error(Type, [1], {[{[1], true}]})},
{"Basic", enc_error(Type, {[{foo,bar}]}, {[{{[{foo,bar}]}, true}]})},
{"Second", enc_error(Type, 1, {[{bar, baz}, E1]})},
{"Nested", enc_error(Type, 1, {[{bar,{[E1]}}]})},
{"Nested", enc_error(Type, 1, {[{bar,{[{baz, 1}, E1]}}]})},
{"In List", enc_error(Type, 1, [{[E1]}])},
{"In List", enc_error(Type, 1, [{[{bang, true}, E1]}])}
]}.

Loading…
Cancel
Save