Packages

A simple bencode encoder and decoder writen in pure Erlang

Current section

Files

Jump to
erl_bencode src test decode_test.erl
Raw

src/test/decode_test.erl

-module(decode_test).
-include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
%% ----------------------------------
%% Unit tests
%% ----------------------------------
read_next_test() ->
?assert(decode:read_next([]) =:= eof),
?assert(decode:read_next("i-23e") =:= {ok, -23}),
?assert(decode:read_next("i--23e") =:= {error, double_negation}),
?assert(decode:read_next("i-23-e") =:= {error, badargs}),
?assert(decode:read_next("4:2453") =:= {ok, "2453"}),
?assert(decode:read_next("de") =:= {ok, #{}}),
?assert(decode:read_next(#{}) =:= {error, badargs}).
parse_result_test() ->
?assert(decode:parse_result({error, reason}) =:= {error, reason}),
?assert(decode:parse_result({[], reason}) =:= {ok, reason}),
?assert(decode:parse_result("testing") =:= "testing").
get_list_test() ->
?assert(decode:get_list("i23elel2:23ee") =:= {[], [23, [], ["23"]]}),
?assert(decode:get_list("e2:23") =:= {"2:23", []}).
get_dict_test() ->
?assert(decode:get_dict("e") =:= {[], #{}}),
?assert(decode:get_dict("lee") =:= {error, list_as_key}),
?assert(decode:get_dict("dee") =:= {error, dict_as_key}),
?assert(decode:get_dict("3:heje") =:= {error, no_end}),
?assert(decode:get_dict("") =:= {error, no_end}),
?assert(decode:get_dict("i23e4:teste") =:= {[], #{23 => "test"}}),
?assert(decode:get_dict("i23e3:hay6:warden6:clyffee") =:= {[], #{23 => "hay", "warden" => "clyffe"}}).
get_key_and_value_test() ->
?assert(decode:get_key_and_value({"i23ee", "test"}, #{}) =:= {[], #{"test" => 23}}),
?assert(decode:get_key_and_value({"lee", 23}, #{}) =:= {[],#{23 => []}}).
read_number_test() ->
?assert(decode:read_number("2453e") =:= {[], 2453}),
?assert(decode:read_number("e") =:= {[], 0}),
?assert(decode:read_number("-2453e") =:= {[], -2453}),
?assert(decode:read_number("2-453e") =:= {error, badargs}),
?assert(decode:read_number("253") =:= {error, no_end}),
?assert(decode:read_number("25 3") =:= {error, badargs}),
?assert(decode:read_number("2d53") =:= {error, badargs}),
?assert(decode:read_number("i253e") =:= {error, badargs}).
test_if_integer_test() ->
?assert(decode:test_if_integer(23) =:= false),
?assert(decode:test_if_integer("23") =:= true),
?assert(decode:test_if_integer("2he3j5") =:= false),
?assert(decode:test_if_integer("24 321") =:= false),
?assert(decode:test_if_integer(" 23") =:= false).
read_string_test() ->
?assert(decode:read_string("3:heji23e", 0) =:= {"i23e", "hej"}),
?assert(decode:read_string("q6:wardeni23e", 0) =:= {error, not_a_number}),
?assert(decode:read_string("10:wardeni23e", 0) =:= {[], "wardeni23e"}).
get_string_tuple_test() ->
?assert(decode:get_string_tuple("Hello World", 0) =:= {error, eof}),
?assert(decode:get_string_tuple([], 10) =:= {error, invalid_length}),
?assert(decode:get_string_tuple("Hello World", 4) =:= {"o World", "Hell"}),
?assert(decode:get_string_tuple("Hello World", 11) =:= {"", "Hello World"}).
-endif.