Current section

Files

Jump to
gleam_stdlib gen test gleam@uri_test.erl
Raw

gen/test/gleam@uri_test.erl

-module(gleam@uri_test).
-compile(no_auto_import).
-export([full_parse_test/0, parse_only_path_test/0, parse_only_host_test/0, error_parsing_uri_test/0, full_uri_to_string_test/0, path_only_uri_to_string_test/0, parse_query_string_test/0, parse_empty_query_string_test/0, error_parsing_query_test/0, query_to_string_test/0, empty_query_to_string_test/0, parse_segments_test/0]).
full_parse_test() ->
{ok,
Parsed} = gleam@uri:parse(
<<"https://foo:bar@example.com:1234/path?query=true#fragment"/utf8>>
),
gleam@should:equal(erlang:element(2, Parsed), {some, <<"https"/utf8>>}),
gleam@should:equal(erlang:element(3, Parsed), {some, <<"foo:bar"/utf8>>}),
gleam@should:equal(
erlang:element(4, Parsed),
{some, <<"example.com"/utf8>>}
),
gleam@should:equal(erlang:element(5, Parsed), {some, 1234}),
gleam@should:equal(erlang:element(6, Parsed), <<"/path"/utf8>>),
gleam@should:equal(
erlang:element(7, Parsed),
{some, <<"query=true"/utf8>>}
),
gleam@should:equal(erlang:element(8, Parsed), {some, <<"fragment"/utf8>>}).
parse_only_path_test() ->
{ok, Parsed} = gleam@uri:parse(<<""/utf8>>),
gleam@should:equal(erlang:element(2, Parsed), none),
gleam@should:equal(erlang:element(3, Parsed), none),
gleam@should:equal(erlang:element(4, Parsed), none),
gleam@should:equal(erlang:element(5, Parsed), none),
gleam@should:equal(erlang:element(6, Parsed), <<""/utf8>>),
gleam@should:equal(erlang:element(7, Parsed), none),
gleam@should:equal(erlang:element(8, Parsed), none).
parse_only_host_test() ->
{ok, Parsed} = gleam@uri:parse(<<"//"/utf8>>),
gleam@should:equal(erlang:element(2, Parsed), none),
gleam@should:equal(erlang:element(3, Parsed), none),
gleam@should:equal(erlang:element(4, Parsed), {some, <<""/utf8>>}),
gleam@should:equal(erlang:element(5, Parsed), none),
gleam@should:equal(erlang:element(6, Parsed), <<""/utf8>>),
gleam@should:equal(erlang:element(7, Parsed), none),
gleam@should:equal(erlang:element(8, Parsed), none).
error_parsing_uri_test() ->
gleam@should:equal(gleam@uri:parse(<<"::"/utf8>>), {error, nil}).
full_uri_to_string_test() ->
TestUri = {uri,
{some, <<"https"/utf8>>},
{some, <<"foo:bar"/utf8>>},
{some, <<"example.com"/utf8>>},
{some, 1234},
<<"/path"/utf8>>,
{some, <<"query=true"/utf8>>},
{some, <<"fragment"/utf8>>}},
gleam@should:equal(
gleam@uri:to_string(TestUri),
<<"https://foo:bar@example.com:1234/path?query=true#fragment"/utf8>>
).
path_only_uri_to_string_test() ->
TestUri = {uri, none, none, none, none, <<"/"/utf8>>, none, none},
gleam@should:equal(gleam@uri:to_string(TestUri), <<"/"/utf8>>).
parse_query_string_test() ->
{ok, Parsed} = gleam@uri:parse_query(<<"foo+bar=1&city=%C3%B6rebro"/utf8>>),
gleam@should:equal(
Parsed,
[{<<"foo bar"/utf8>>, <<"1"/utf8>>},
{<<"city"/utf8>>, <<"örebro"/utf8>>}]
).
parse_empty_query_string_test() ->
{ok, Parsed} = gleam@uri:parse_query(<<""/utf8>>),
gleam@should:equal(Parsed, []).
error_parsing_query_test() ->
gleam@should:equal(gleam@uri:parse_query(<<"%C2"/utf8>>), {error, nil}).
query_to_string_test() ->
QueryString = gleam@uri:query_to_string(
[{<<"foo bar"/utf8>>, <<"1"/utf8>>},
{<<"city"/utf8>>, <<"örebro"/utf8>>}]
),
gleam@should:equal(QueryString, <<"foo+bar=1&city=%C3%B6rebro"/utf8>>).
empty_query_to_string_test() ->
QueryString = gleam@uri:query_to_string([]),
gleam@should:equal(QueryString, <<""/utf8>>).
parse_segments_test() ->
gleam@should:equal(gleam@uri:path_segments(<<"/"/utf8>>), []),
gleam@should:equal(
gleam@uri:path_segments(<<"/foo/bar"/utf8>>),
[<<"foo"/utf8>>, <<"bar"/utf8>>]
),
gleam@should:equal(gleam@uri:path_segments(<<"////"/utf8>>), []),
gleam@should:equal(
gleam@uri:path_segments(<<"/foo//bar"/utf8>>),
[<<"foo"/utf8>>, <<"bar"/utf8>>]
),
gleam@should:equal(gleam@uri:path_segments(<<"/."/utf8>>), []),
gleam@should:equal(
gleam@uri:path_segments(<<"/.foo"/utf8>>),
[<<".foo"/utf8>>]
),
gleam@should:equal(
gleam@uri:path_segments(<<"/../bar"/utf8>>),
[<<"bar"/utf8>>]
),
gleam@should:equal(
gleam@uri:path_segments(<<"../bar"/utf8>>),
[<<"bar"/utf8>>]
),
gleam@should:equal(
gleam@uri:path_segments(<<"/foo/../bar"/utf8>>),
[<<"bar"/utf8>>]
).