added option for explicit termination requirement when parsing streams

This commit is contained in:
alisdair sullivan 2010-05-24 15:47:29 -07:00
parent 3b3e33c6e3
commit 6515f9981d
11 changed files with 59 additions and 2232 deletions

View file

@ -26,11 +26,22 @@ test_body(TestSpec, Dir) ->
case file:consult(Dir ++ "/" ++ TestSpec) of
{ok, [Events]} ->
Decoder = jsx:decoder(),
[{TestName, ?_assertEqual(Decoder(JSON), Events)}]
[{TestName, ?_assertEqual(decode(Decoder, JSON), Events)}]
; {ok, [Events, Flags]} ->
Decoder = jsx:decoder(none, Flags),
[{TestName, ?_assertEqual(Decoder(JSON), Events)}]
[{TestName, ?_assertEqual(decode(Decoder, JSON), Events)}]
end
catch _:_ -> []
end.
decode(F, <<>>) ->
{Result, _} = F(eof),
Result;
decode(F, <<A/utf8, Rest/binary>>) ->
case F(<<A/utf8>>) of
G when is_function(G) ->
decode(G, Rest)
; {Result, _} ->
Result
end.