Add more test cases
And some trivial code cleanup.
This commit is contained in:
parent
df00c3958b
commit
4a01c852c9
@ -356,6 +356,9 @@ typedef_vars(#type_def{vars=Vars}) -> Vars.
|
|||||||
|
|
||||||
typedef_def(#type_def{typedef=Def}) -> Def.
|
typedef_def(#type_def{typedef=Def}) -> Def.
|
||||||
|
|
||||||
|
%% parse(ContractString, Options) -> {ok,AST}.
|
||||||
|
%% Signal errors, the sophia compiler way. Sigh!
|
||||||
|
|
||||||
parse(Text, Options) ->
|
parse(Text, Options) ->
|
||||||
%% Try and return something sensible here!
|
%% Try and return something sensible here!
|
||||||
case aeso_parser:string(Text, Options) of
|
case aeso_parser:string(Text, Options) of
|
||||||
|
@ -5,17 +5,19 @@
|
|||||||
|
|
||||||
do_test() ->
|
do_test() ->
|
||||||
test_contract(1),
|
test_contract(1),
|
||||||
test_contract(2).
|
test_contract(2),
|
||||||
|
test_contract(3).
|
||||||
|
|
||||||
test_contract(N) ->
|
test_contract(N) ->
|
||||||
{Contract,DecACI} = test_cases(N),
|
{Contract,MapACI,DecACI} = test_cases(N),
|
||||||
{ok,Enc} = aeso_aci:encode(Contract),
|
{ok,JSON} = aeso_aci:encode(Contract),
|
||||||
?assertEqual(DecACI, jsx:decode(Enc, [return_maps])).
|
?assertEqual(MapACI, jsx:decode(JSON, [return_maps])),
|
||||||
|
?assertEqual(DecACI, aeso_aci:decode(JSON)).
|
||||||
|
|
||||||
test_cases(1) ->
|
test_cases(1) ->
|
||||||
Contract = <<"contract C =\n"
|
Contract = <<"contract C =\n"
|
||||||
" function a(i : int) = i+1\n">>,
|
" function a(i : int) = i+1\n">>,
|
||||||
DecodedACI = #{<<"contract">> =>
|
MapACI = #{<<"contract">> =>
|
||||||
#{<<"name">> => <<"C">>,
|
#{<<"name">> => <<"C">>,
|
||||||
<<"type_defs">> => [],
|
<<"type_defs">> => [],
|
||||||
<<"functions">> =>
|
<<"functions">> =>
|
||||||
@ -25,13 +27,15 @@ test_cases(1) ->
|
|||||||
<<"type">> => [<<"int">>]}],
|
<<"type">> => [<<"int">>]}],
|
||||||
<<"returns">> => <<"int">>,
|
<<"returns">> => <<"int">>,
|
||||||
<<"stateful">> => false}]}},
|
<<"stateful">> => false}]}},
|
||||||
{Contract,DecodedACI};
|
DecACI = <<"contract C =\n"
|
||||||
|
" function a : (int) => int\n">>,
|
||||||
|
{Contract,MapACI,DecACI};
|
||||||
|
|
||||||
test_cases(2) ->
|
test_cases(2) ->
|
||||||
Contract = <<"contract C =\n"
|
Contract = <<"contract C =\n"
|
||||||
" type allan = int\n"
|
" type allan = int\n"
|
||||||
" function a(i : allan) = i+1\n">>,
|
" function a(i : allan) = i+1\n">>,
|
||||||
DecodedACI = #{<<"contract">> =>
|
MapACI = #{<<"contract">> =>
|
||||||
#{<<"name">> => <<"C">>,
|
#{<<"name">> => <<"C">>,
|
||||||
<<"type_defs">> =>
|
<<"type_defs">> =>
|
||||||
[#{<<"name">> => <<"allan">>,
|
[#{<<"name">> => <<"allan">>,
|
||||||
@ -44,4 +48,29 @@ test_cases(2) ->
|
|||||||
<<"name">> => <<"a">>,
|
<<"name">> => <<"a">>,
|
||||||
<<"returns">> => <<"int">>,
|
<<"returns">> => <<"int">>,
|
||||||
<<"stateful">> => false}]}},
|
<<"stateful">> => false}]}},
|
||||||
{Contract,DecodedACI}.
|
DecACI = <<"contract C =\n"
|
||||||
|
" function a : (int) => int\n">>,
|
||||||
|
{Contract,MapACI,DecACI};
|
||||||
|
test_cases(3) ->
|
||||||
|
Contract = <<"contract C =\n"
|
||||||
|
" datatype bert('a) = Bin('a)\n"
|
||||||
|
" function a(i : bert(string)) = 1\n">>,
|
||||||
|
MapACI = #{<<"contract">> =>
|
||||||
|
#{<<"functions">> =>
|
||||||
|
[#{<<"arguments">> =>
|
||||||
|
[#{<<"name">> => <<"i">>,
|
||||||
|
<<"type">> =>
|
||||||
|
[#{<<"C.bert">> => [<<"string">>]}]}],
|
||||||
|
<<"name">> => <<"a">>,<<"returns">> => <<"int">>,
|
||||||
|
<<"stateful">> => false}],
|
||||||
|
<<"name">> => <<"C">>,
|
||||||
|
<<"type_defs">> =>
|
||||||
|
[#{<<"name">> => <<"bert">>,
|
||||||
|
<<"typedef">> =>
|
||||||
|
#{<<"variant">> =>
|
||||||
|
[#{<<"Bin">> => [<<"'a">>]}]},
|
||||||
|
<<"vars">> => [#{<<"name">> => <<"'a">>}]}]}},
|
||||||
|
DecACI = <<"contract C =\n"
|
||||||
|
" datatype bert('a) = Bin('a)\n"
|
||||||
|
" function a : (C.bert(string)) => int\n">>,
|
||||||
|
{Contract,MapACI,DecACI}.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user