-module(jsx_test). -export([test/1]). -include_lib("eunit/include/eunit.hrl"). test(Dir) -> Tests = gen_tests(Dir), eunit:test(Tests). 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(), [{TestName, ?_assertEqual(Decoder(JSON), Events)}] ; {ok, [Events, Flags]} -> Decoder = jsx:decoder(none, Flags), [{TestName, ?_assertEqual(Decoder(JSON), Events)}] end catch _:_ -> [] end.