2010-05-18 14:07:16 -07:00
|
|
|
-module(jsx_test).
|
|
|
|
|
2010-05-23 22:40:35 -07:00
|
|
|
-export([test/1]).
|
2010-05-18 14:07:16 -07:00
|
|
|
|
2010-05-23 22:40:35 -07:00
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
2010-05-18 17:22:31 -07:00
|
|
|
|
|
|
|
|
2010-05-23 22:40:35 -07:00
|
|
|
test(Dir) ->
|
|
|
|
Tests = gen_tests(Dir),
|
2010-05-25 13:31:41 -07:00
|
|
|
eunit:test(Tests, [verbose]).
|
2010-05-23 22:40:35 -07:00
|
|
|
|
|
|
|
gen_tests(Dir) ->
|
|
|
|
TestSpecs = filelib:wildcard("*.test", Dir),
|
|
|
|
gen_tests(TestSpecs, Dir, []).
|
|
|
|
|
|
|
|
gen_tests([], _, Acc) ->
|
|
|
|
lists:reverse(Acc);
|
|
|
|
|
|
|
|
gen_tests([Test|Rest], Dir, Acc) ->
|
|
|
|
gen_tests(Rest, Dir, test_body(Test, Dir) ++ Acc).
|
|
|
|
|
|
|
|
test_body(TestSpec, Dir) ->
|
|
|
|
try
|
|
|
|
TestName = filename:basename(TestSpec, ".test"),
|
|
|
|
{ok, JSON} = file:read_file(Dir ++ "/" ++ TestName ++ ".json"),
|
|
|
|
case file:consult(Dir ++ "/" ++ TestSpec) of
|
|
|
|
{ok, [Events]} ->
|
|
|
|
Decoder = jsx:decoder(),
|
2010-05-25 21:04:11 -07:00
|
|
|
[{TestName, ?_assertEqual(incremental_decode(Decoder, JSON), Events)}] ++
|
2010-05-24 15:47:29 -07:00
|
|
|
[{TestName, ?_assertEqual(decode(Decoder, JSON), Events)}]
|
2010-05-23 22:40:35 -07:00
|
|
|
; {ok, [Events, Flags]} ->
|
2010-05-25 21:04:11 -07:00
|
|
|
Decoder = jsx:decoder({none, []}, Flags),
|
|
|
|
[{TestName, ?_assertEqual(incremental_decode(Decoder, JSON), Events)}] ++
|
2010-05-24 15:47:29 -07:00
|
|
|
[{TestName, ?_assertEqual(decode(Decoder, JSON), Events)}]
|
2010-05-23 22:40:35 -07:00
|
|
|
end
|
|
|
|
catch _:_ -> []
|
|
|
|
end.
|
2010-05-24 15:47:29 -07:00
|
|
|
|
2010-05-25 21:04:11 -07:00
|
|
|
incremental_decode(F, <<>>) ->
|
|
|
|
{Result, _} = F(<<>>),
|
2010-05-24 15:47:29 -07:00
|
|
|
Result;
|
2010-05-25 21:04:11 -07:00
|
|
|
incremental_decode(F, <<A/utf8, Rest/binary>>) ->
|
2010-05-24 15:47:29 -07:00
|
|
|
case F(<<A/utf8>>) of
|
|
|
|
G when is_function(G) ->
|
|
|
|
decode(G, Rest)
|
|
|
|
; {Result, _} ->
|
|
|
|
Result
|
|
|
|
end.
|
2010-05-25 21:04:11 -07:00
|
|
|
|
|
|
|
decode(F, JSON) ->
|
|
|
|
case F(JSON) of
|
|
|
|
G when is_function(G) ->
|
|
|
|
{Result, <<>>} = G(<<>>),
|
|
|
|
Result
|
|
|
|
; {Result, _} ->
|
|
|
|
Result
|
|
|
|
end.
|
2010-05-24 15:47:29 -07:00
|
|
|
|