add get_key/1' to jsx_to_json' and `jsx_to_term'

This commit is contained in:
alisdair sullivan 2013-10-31 02:47:45 +00:00
parent 08673b144e
commit 70aebfc6ad
2 changed files with 35 additions and 3 deletions

View file

@ -25,7 +25,7 @@
-export([to_json/2, format/2]).
-export([init/1, handle_event/2]).
-export([start_object/1, start_array/1, insert/2, insert/3, finish/1]).
-export([start_object/1, start_array/1, finish/1, insert/2, insert/3, get_key/1]).
-record(config, {
@ -228,6 +228,11 @@ insert(Key, Value, {[{object, Object}|Rest], Config}) when is_binary(Key), is_bi
insert(_, _, _) -> erlang:error(badarg).
get_key({[{object, Key, _}|_], _}) -> {ok, Key};
get_key(_) -> {error, nokey}.
%% eunit tests
-ifdef(TEST).
@ -369,6 +374,18 @@ rep_manipulation_test_() ->
{[{object, <<"\"key\"">>, <<"{">>}], #config{}},
insert(<<"\"key\"">>, {[{object, <<"{">>}], #config{}})
)},
{"get current key", ?_assertEqual(
{ok, key},
get_key({[{object, key, <<"{">>}], #config{}})
)},
{"try to get non-key from object", ?_assertEqual(
{error, nokey},
get_key({[{object, <<"{">>}], #config{}})
)},
{"try to get key from array", ?_assertEqual(
{error, nokey},
get_key({[{array, <<"[">>}], #config{}})
)},
{"insert a value into an object", ?_assertEqual(
{[{object, <<"{\"key\":true">>}], #config{}},
insert(<<"true">>, {[{object, <<"\"key\"">>, <<"{">>}], #config{}})
@ -419,4 +436,4 @@ handle_event_test_() ->
].
-endif.
-endif.

View file

@ -25,7 +25,7 @@
-export([to_term/2]).
-export([init/1, handle_event/2]).
-export([start_object/1, start_array/1, finish/1, insert/2, insert/3]).
-export([start_object/1, start_array/1, finish/1, insert/2, insert/3, get_key/1]).
-record(config, {
@ -144,6 +144,9 @@ insert(Key, Value, {[{object, Pairs}|Rest], Config}) ->
insert(_, _, _) -> erlang:error(badarg).
get_key({[{object, Key, _}|_], _}) -> {ok, Key};
get_key(_) -> {error, nokey}.
%% eunit tests
@ -212,6 +215,18 @@ rep_manipulation_test_() ->
{[{object, key, []}, junk], #config{}},
insert(key, {[{object, []}, junk], #config{}})
)},
{"get current key", ?_assertEqual(
{ok, key},
get_key({[{object, key, []}], #config{}})
)},
{"try to get non-key from object", ?_assertEqual(
{error, nokey},
get_key({[{object, []}], #config{}})
)},
{"try to get key from array", ?_assertEqual(
{error, nokey},
get_key({[{array, []}], #config{}})
)},
{"insert a value into an object", ?_assertEqual(
{[{object, [{key, value}]}, junk], #config{}},
insert(value, {[{object, key, []}, junk], #config{}})