urilib/test/urilib_tests.erl
Correl Roush d6de7e8374 Preserve the trailing slash on paths when building URIs
Paths with and without trailing slashes are distinct, therefore a
trailing slash in the path should be preserved when building the URI.
2018-04-05 16:11:25 -04:00

193 lines
8.1 KiB
Erlang

-module(urilib_tests).
-include_lib("eunit/include/eunit.hrl").
hex_to_upper_test() ->
Value = "%2f%c0%88this+is+%c3%a4n+%c3%aaxample+value+woot%c0%88%2f",
Expect = "%2F%C0%88this+is+%C3%A4n+%C3%AAxample+value+woot%C0%88%2F",
?assertEqual(Expect, urilib:hex_to_upper(Value)).
build_variation1_test() ->
Params = {amqp, {{"guest", "password"}, "rabbitmq", 5672}, "/%2f", [{"heartbeat", "5"}], undefined},
Expect = "amqp://guest:password@rabbitmq:5672/%2f?heartbeat=5",
?assertEqual(Expect, urilib:build(Params)).
build_variation2_test() ->
Params = {http, {undefined, "www.google.com", 80}, "/search", [{"foo", "bar"}], "#baz"},
Expect = "http://www.google.com/search?foo=bar#baz",
?assertEqual(Expect, urilib:build(Params)).
build_variation3_test() ->
Params = {https, {undefined, "www.google.com", 443}, "/search", undefined, undefined},
Expect = "https://www.google.com/search",
?assertEqual(Expect, urilib:build(Params)).
build_variation4_test() ->
Params = {https, {undefined, "www.google.com", 443}, "/search", ["foo"], undefined},
Expect = "https://www.google.com/search?foo",
?assertEqual(Expect, urilib:build(Params)).
build_variation5_test() ->
Params = {https, {undefined, "www.google.com", undefined}, "/search", ["foo"], undefined},
Expect = "https://www.google.com/search?foo",
?assertEqual(Expect, urilib:build(Params)).
build_variation6_test() ->
Params = {http, {undefined, "www.google.com", undefined}, "/search", ["foo"], undefined},
Expect = "http://www.google.com/search?foo",
?assertEqual(Expect, urilib:build(Params)).
build_variation7_test() ->
Params = {undefined, {undefined, "www.google.com", undefined}, "/search", ["foo"], undefined},
Expect = "http://www.google.com/search?foo",
?assertEqual(Expect, urilib:build(Params)).
build_variation8_test() ->
Params = {undefined, {undefined, "www.google.com", undefined}, undefined, ["foo"], undefined},
Expect = "http://www.google.com/?foo",
?assertEqual(Expect, urilib:build(Params)).
build_variation9_test() ->
Params = {undefined, {undefined, "www.google.com", undefined}, undefined, [], ""},
Expect = "http://www.google.com/",
?assertEqual(Expect, urilib:build(Params)).
build_variation10_test() ->
Params = {undefined, {undefined, "www.google.com", undefined}, undefined, [], "foo"},
Expect = "http://www.google.com/#foo",
?assertEqual(Expect, urilib:build(Params)).
build_uri_path_with_trailing_slash_test() ->
Params = {https, undefined, "www.example.com", 443, "/foo/", undefined, undefined},
Expect = "https://www.example.com/foo/",
?assertEqual(Expect, urilib:build(Params)).
build_url_variation1_test() ->
Params = {amqp, "guest", "password", "rabbitmq", 5672, "/%2f", [{"heartbeat", "5"}], undefined},
Expect = "amqp://guest:password@rabbitmq:5672/%2f?heartbeat=5",
?assertEqual(Expect, urilib:build(Params)).
build_url_variation2_test() ->
Params = {http, undefined, "www.google.com", 80, "/search", [{"foo", "bar"}], "#baz"},
Expect = "http://www.google.com/search?foo=bar#baz",
?assertEqual(Expect, urilib:build(Params)).
build_url_variation3_test() ->
Params = {https, undefined, "www.google.com", 443, "/search", undefined, undefined},
Expect = "https://www.google.com/search",
?assertEqual(Expect, urilib:build(Params)).
build_url_variation4_test() ->
Params = {https, undefined, "www.google.com", 443, "/search", ["foo"], undefined},
Expect = "https://www.google.com/search?foo",
?assertEqual(Expect, urilib:build(Params)).
build_url_variation5_test() ->
Params = {https, "", "", "www.google.com", 443, "/search", ["foo"], undefined},
Expect = "https://www.google.com/search?foo",
?assertEqual(Expect, urilib:build(Params)).
build_url_variation6_test() ->
Params = {https, "bar", "", "www.google.com", 443, "/search", ["foo"], undefined},
Expect = "https://bar@www.google.com/search?foo",
?assertEqual(Expect, urilib:build(Params)).
build_url_variation7_test() ->
Params = {https, "bar", undefined, "www.google.com", 443, "/search", ["foo"], undefined},
Expect = "https://bar@www.google.com/search?foo",
?assertEqual(Expect, urilib:build(Params)).
parse_variation1_test() ->
URI = "amqp://guest:password@rabbitmq:5672/%2f?heartbeat=5",
Expect = {amqp, {{"guest", "password"}, "rabbitmq", 5672}, "/%2f", [{"heartbeat", "5"}], undefined},
?assertEqual(Expect, urilib:parse(URI)).
parse_variation2_test() ->
URI = "http://www.google.com/search?foo=bar#baz",
Expect = {http, {undefined, "www.google.com", 80}, "/search", [{"foo", "bar"}], "#baz"},
?assertEqual(Expect, urilib:parse(URI)).
parse_variation3_test() ->
URI = "https://www.google.com/search",
Expect = {https, {undefined, "www.google.com", 443}, "/search", undefined, undefined},
?assertEqual(Expect, urilib:parse(URI)).
parse_variation4_test() ->
URI = "https://www.google.com/search?foo",
Expect = {https, {undefined, "www.google.com", 443}, "/search", ["foo"], undefined},
?assertEqual(Expect, urilib:parse(URI)).
parse_uri_test() ->
URI = "amqp://guest:password@rabbitmq:5672/%2f?heartbeat=5",
Expect = {amqp, {{"guest", "password"}, "rabbitmq", 5672}, "/%2f",
[{"heartbeat", "5"}], undefined},
?assertEqual(Expect, urilib:parse(URI, uri)).
parse_uri_with_trailing_slash_test() ->
URI = "https://www.example.com/foo/",
Expect = {https, {undefined, "www.example.com", 443}, "/foo/", undefined, undefined},
?assertEqual(Expect, urilib:parse(URI)).
parse_url_variation1_test() ->
URI = "amqp://guest:password@rabbitmq:5672/%2f?heartbeat=5&foo=bar&baz+corgie=qux+grault",
Expect = {amqp, "guest", "password", "rabbitmq", 5672, "/%2f",
[{"heartbeat", "5"}, {"foo", "bar"}, {"baz corgie", "qux grault"}],
undefined},
?assertEqual(Expect, urilib:parse(URI, url)).
parse_url_variation2_test() ->
URI = "amqp://guest@rabbitmq:5672/%2f?heartbeat=5&foo=bar&baz+corgie=qux+grault#foo",
Expect = {amqp, "guest", undefined, "rabbitmq", 5672, "/%2f",
[{"heartbeat", "5"}, {"foo", "bar"}, {"baz corgie", "qux grault"}],
"#foo"},
?assertEqual(Expect, urilib:parse(URI, url)).
percent_decode_test() ->
Value = "foo%2fbar%20baz",
Expect = "foo/bar baz",
?assertEqual(Expect, urilib:percent_decode(Value)).
plus_decode_test() ->
Value = "foo/bar+baz",
Expect = "foo/bar baz",
?assertEqual(Expect, urilib:plus_decode(Value)).
percent_encode_test() ->
Value = "foo/bar baz",
Expect = "foo%2fbar%20baz",
?assertEqual(Expect, urilib:percent_encode(Value)).
percent_encode_unicode_test() ->
Value = "foo/bar✈baz",
Expect = "foo%2fbar%c0%88baz",
?assertEqual(Expect, urilib:percent_encode(Value)).
percent_encode_lowercase_unicode_test() ->
Value = "/✈this is än êxample value woot✈/",
Expect = "%2f%c0%88this%20is%20%c3%a4n%20%c3%aaxample%20value%20woot%c0%88%2f",
?assertEqual(Expect, urilib:percent_encode(Value, lowercase)).
percent_encode_uppercase_unicode_test() ->
Value = "/✈this is än êxample value woot✈/",
Expect = "%2F%C0%88this%20is%20%C3%A4n%20%C3%AAxample%20value%20woot%C0%88%2F",
?assertEqual(Expect, urilib:percent_encode(Value, uppercase)).
percent_encode_uppercase_perent_test() ->
Value = "/✈this is än êxample value woot with 30% off✈/",
Expect = "%2F%C0%88this+is+%C3%A4n+%C3%AAxample+value+woot+with+30%25+off%C0%88%2F",
?assertEqual(Expect, urilib:plus_encode(Value, uppercase)).
plus_encode_test() ->
Value = "foo/bar baz",
Expect = "foo%2fbar+baz",
?assertEqual(Expect, urilib:plus_encode(Value)).
plus_encode_lowercase_test() ->
Value = "/✈this is än êxample value woot✈/",
Expect = "%2f%c0%88this+is+%c3%a4n+%c3%aaxample+value+woot%c0%88%2f",
?assertEqual(Expect, urilib:plus_encode(Value, lowercase)).
plus_encode_uppercase_test() ->
Value = "/✈this is än êxample value woot✈/",
Expect = "%2F%C0%88this+is+%C3%A4n+%C3%AAxample+value+woot%C0%88%2F",
?assertEqual(Expect, urilib:plus_encode(Value, uppercase)).