77 lines
2.9 KiB
Julia
77 lines
2.9 KiB
Julia
using Test
|
|
|
|
unescape_expected = [
|
|
"String without percent" => "String without percent",
|
|
"String%20with%20spaces" => "String with spaces",
|
|
"String%20with some spaces" => "String with some spaces",
|
|
"String%20with invalid end%" => "String with invalid end%",
|
|
"String%20with invalid end%a" => "String with invalid end%a",
|
|
"String%20with valid end%aa" => "String with valid end\xaa",
|
|
"String%20with invalid%-- data" => "String with invalid%-- data",
|
|
"Lech_Kaczy%C5%84ski" => "Lech_Kaczyński"
|
|
]
|
|
|
|
@testset "Unescape Query String" begin
|
|
for t in unescape_expected
|
|
@test unescape(t[1]) == t[2]
|
|
end
|
|
end
|
|
|
|
function test_request(input::String, params)
|
|
url = Request(input)
|
|
@test url.protocol == params[1]
|
|
@test url.host == params[2]
|
|
@test url.port == params[3]
|
|
@test url.path == params[4]
|
|
@test url.query == params[5]
|
|
end
|
|
|
|
@testset "Parse urls" begin
|
|
@testset "Complete url" begin
|
|
test_request("https://hostname:999/a?b",
|
|
("https", "hostname", 999, ["a"], "b"))
|
|
end
|
|
@testset "Defaults" begin
|
|
@testset "Default protocol" begin
|
|
test_request("hostname:999/a?b",
|
|
("gemini", "hostname", 999, ["a"], "b"))
|
|
end
|
|
@testset "Default port" begin
|
|
test_request("gemini://hostname/a?b",
|
|
("gemini", "hostname", 1965, ["a"], "b"))
|
|
end
|
|
end
|
|
@testset "Paths" begin
|
|
test_request("hostname/a/b/c?b",
|
|
("gemini", "hostname", 1965, ["a", "b", "c"], "b"))
|
|
test_request("hostname/a/./c?b",
|
|
("gemini", "hostname", 1965, ["a", "c"], "b"))
|
|
# Not sure if this is expected or if we should remove empty...
|
|
test_request("hostname/a/b/c/..?b",
|
|
("gemini", "hostname", 1965, ["a", "b", ""], "b"))
|
|
end
|
|
@testset "Query" begin
|
|
test_request("hostname/a/b/c",
|
|
("gemini", "hostname", 1965, ["a", "b", "c"], nothing))
|
|
test_request("hostname/a/b/c?example",
|
|
("gemini", "hostname", 1965, ["a", "b", "c"], "example"))
|
|
test_request("hostname/a/b/c?percent%20encoding",
|
|
("gemini", "hostname", 1965, ["a", "b", "c"], "percent encoding"))
|
|
end
|
|
end
|
|
|
|
@testset "Request to string" begin
|
|
@test string(Request("gemini://host")) == "host"
|
|
@test string(Request("https://host")) == "https://host"
|
|
@test string(Request("host:1965")) == "host"
|
|
@test string(Request("host:1965/")) == "host"
|
|
@test string(Request("gemini://host:1965/")) == "host"
|
|
@test string(Request("host/a/b")) == "host/a/b"
|
|
@test string(Request("https://host/a/b")) == "https://host/a/b"
|
|
@test string(Request("https://host:1965/a/b?test")) == "https://host/a/b?test"
|
|
end
|
|
|
|
@testset "Requests format enforced" begin
|
|
@test_throws OverflowError Gemenon.get(Request("a" ^ 1025))
|
|
end
|