feat: initial commit for uri parser

This commit is contained in:
2025-09-06 23:44:22 +01:00
parent c1b26f7713
commit 26804f6403
7 changed files with 940 additions and 0 deletions

103
test/uri_test.gleam Normal file
View File

@@ -0,0 +1,103 @@
import gleam/option.{Some}
import gleeunit/should
import startest.{describe, it}
import uri.{Uri}
pub fn main() {
startest.run(startest.default_config())
}
pub fn parse_scheme_tests() {
describe("scheme parsing", [
it("should parse", fn() {
uri.parse("") |> should.equal(Ok(uri.empty_uri))
uri.parse("foo")
|> should.equal(Ok(Uri(..uri.empty_uri, path: "foo")))
uri.parse("foo:")
|> should.equal(Ok(Uri(..uri.empty_uri, scheme: Some("foo"))))
uri.parse("foo:bar:nisse")
|> should.equal(Ok(
Uri(..uri.empty_uri, scheme: Some("foo"), path: "bar:nisse"),
))
uri.parse("foo://")
|> should.equal(Ok(
Uri(..uri.empty_uri, scheme: Some("foo"), host: Some("")),
))
uri.parse("foo:///")
|> should.equal(Ok(
Uri(..uri.empty_uri, scheme: Some("foo"), host: Some(""), path: "/"),
))
uri.parse("foo:////")
|> should.equal(Ok(
Uri(..uri.empty_uri, scheme: Some("foo"), host: Some(""), path: "//"),
))
}),
])
}
pub fn parse_userinfo_tests() {
describe("userinfo parsing", [
it("should parse", fn() {
uri.parse("user:password@localhost")
|> should.equal(Ok(
Uri(..uri.empty_uri, scheme: Some("user"), path: "password@localhost"),
))
uri.parse("user@")
|> should.equal(Ok(Uri(..uri.empty_uri, path: "user@")))
uri.parse("/user@")
|> should.equal(Ok(Uri(..uri.empty_uri, path: "/user@")))
uri.parse("user@localhost")
|> should.equal(Ok(Uri(..uri.empty_uri, path: "user@localhost")))
uri.parse("//user@localhost")
|> should.equal(Ok(
Uri(..uri.empty_uri, userinfo: Some("user"), host: Some("localhost")),
))
uri.parse("//user:password@localhost")
|> should.equal(Ok(
Uri(
..uri.empty_uri,
userinfo: Some("user:password"),
host: Some("localhost"),
),
))
uri.parse("foo:/user@")
|> should.equal(Ok(
Uri(..uri.empty_uri, scheme: Some("foo"), path: "/user@"),
))
uri.parse("foo://user@localhost")
|> should.equal(Ok(
Uri(
..uri.empty_uri,
scheme: Some("foo"),
userinfo: Some("user"),
host: Some("localhost"),
),
))
uri.parse("foo://user:password@localhost")
|> should.equal(Ok(
Uri(
..uri.empty_uri,
scheme: Some("foo"),
userinfo: Some("user:password"),
host: Some("localhost"),
),
))
}),
])
}
// gleeunit test functions end in `_test`
// pub fn uri_test() {
// match("uri:")
// match("//@")
// match("//")
// match("")
// match("?")
// match("#")
// match("#\t")
// match("//:")
// }
// fn match(uri: String) {
// assert uri.parse(uri) |> uri.to_uri
// == uri2.parse(uri)
// }