mirror of
https://github.com/correl/urilib.git
synced 2024-11-27 19:19:56 +00:00
a4e0458534
The following bug was introduced in d6de7e83
:
{https, undefined, "www.example.com", 443, "/", undefined, undefined},
was being built as
"https://www.example.com//"
This corrects the issue by not appending a slash when the root
path ("/") is specified (it should behave the same as passing an
empty ("") path).
203 lines
8.5 KiB
Erlang
203 lines
8.5 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_uri_path_with_root_path_test() ->
|
|
Params = {https, undefined, "www.example.com", 443, "/", undefined, undefined},
|
|
Expect = "https://www.example.com/",
|
|
?assertEqual(Expect, urilib:build(Params)).
|
|
|
|
build_uri_path_with_no_path_test() ->
|
|
Params = {https, undefined, "www.example.com", 443, "", undefined, undefined},
|
|
Expect = "https://www.example.com/",
|
|
?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)).
|