diff options
author | Peter Saxton <peterhsaxton@gmail.com> | 2020-05-19 15:20:22 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2020-05-19 17:25:34 +0100 |
commit | f414c92c4d7d7d6406f54fb58d82e35548da4a3a (patch) | |
tree | 43cda47a4022a5164cd0e0ceed5194441fb88443 /test | |
parent | a805e1fcdc2393aa789ef2dfb15a00669e3e079b (diff) | |
download | gleam_stdlib-f414c92c4d7d7d6406f54fb58d82e35548da4a3a.tar.gz gleam_stdlib-f414c92c4d7d7d6406f54fb58d82e35548da4a3a.zip |
add the uri module
Diffstat (limited to 'test')
-rw-r--r-- | test/gleam/uri_test.gleam | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/test/gleam/uri_test.gleam b/test/gleam/uri_test.gleam new file mode 100644 index 0000000..edb7fce --- /dev/null +++ b/test/gleam/uri_test.gleam @@ -0,0 +1,110 @@ +import gleam/uri +import gleam/should + +pub fn full_parse_test() { + let Ok( + parsed, + ) = uri.parse("https://foo:bar@example.com:1234/path?query=true#fragment") + should.equal(parsed.scheme, Ok("https")) + should.equal(parsed.userinfo, Ok("foo:bar")) + should.equal(parsed.host, Ok("example.com")) + should.equal(parsed.port, Ok(1234)) + should.equal(parsed.path, "/path") + should.equal(parsed.query, Ok("query=true")) + should.equal(parsed.fragment, Ok("fragment")) +} + +pub fn parse_only_path_test() { + let Ok(parsed) = uri.parse("") + should.equal(parsed.scheme, Error(Nil)) + should.equal(parsed.userinfo, Error(Nil)) + should.equal(parsed.host, Error(Nil)) + should.equal(parsed.port, Error(Nil)) + should.equal(parsed.path, "") + should.equal(parsed.query, Error(Nil)) + should.equal(parsed.fragment, Error(Nil)) +} + +pub fn parse_only_host_test() { + let Ok(parsed) = uri.parse("//") + should.equal(parsed.scheme, Error(Nil)) + should.equal(parsed.userinfo, Error(Nil)) + should.equal(parsed.host, Ok("")) + should.equal(parsed.port, Error(Nil)) + should.equal(parsed.path, "") + should.equal(parsed.query, Error(Nil)) + should.equal(parsed.fragment, Error(Nil)) +} + +pub fn error_parsing_uri_test() { + should.equal(uri.parse("::"), Error(Nil)) +} + +pub fn full_uri_to_string_test() { + let test_uri = uri.Uri( + Ok("https"), + Ok("foo:bar"), + Ok("example.com"), + Ok(1234), + "/path", + Ok("query=true"), + Ok("fragment"), + ) + should.equal( + uri.to_string(test_uri), + "https://foo:bar@example.com:1234/path?query=true#fragment", + ) +} + +pub fn path_only_uri_to_string_test() { + let test_uri = uri.Uri( + Error(Nil), + Error(Nil), + Error(Nil), + Error(Nil), + "/", + Error(Nil), + Error(Nil), + ) + should.equal(uri.to_string(test_uri), "/") +} + +pub fn parse_query_string_test() { + let Ok(parsed) = uri.parse_query("foo+bar=1&city=%C3%B6rebro") + should.equal(parsed, [tuple("foo bar", "1"), tuple("city", "örebro")]) +} + +pub fn parse_empty_query_string_test() { + let Ok(parsed) = uri.parse_query("") + should.equal(parsed, []) +} + +pub fn error_parsing_query_test() { + should.equal(uri.parse_query("%C2"), Error(Nil)) +} + +pub fn query_to_string_test() { + let query_string = uri.query_to_string( + [tuple("foo bar", "1"), tuple("city", "örebro")], + ) + should.equal(query_string, "foo+bar=1&city=%C3%B6rebro") +} + +pub fn empty_query_to_string_test() { + let query_string = uri.query_to_string([]) + should.equal(query_string, "") +} + +pub fn parse_segments_test() { + should.equal(uri.path_segments("/"), []) + should.equal(uri.path_segments("/foo/bar"), ["foo", "bar"]) + should.equal(uri.path_segments("////"), []) + should.equal(uri.path_segments("/foo//bar"), ["foo", "bar"]) + + should.equal(uri.path_segments("/."), []) + should.equal(uri.path_segments("/.foo"), [".foo"]) + + should.equal(uri.path_segments("/../bar"), ["bar"]) + should.equal(uri.path_segments("../bar"), ["bar"]) + should.equal(uri.path_segments("/foo/../bar"), ["bar"]) +} |