test: More merge tests
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import gleam/option.{None, Some}
|
import gleam/option.{None, Some}
|
||||||
import gleeunit/should
|
import gleeunit/should
|
||||||
import startest.{describe, it}
|
import startest.{describe, it}
|
||||||
import types.{Uri}
|
import types.{Uri, empty_uri}
|
||||||
import uri
|
import uri
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
@@ -895,6 +895,205 @@ pub fn merge_tests() {
|
|||||||
}),
|
}),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn more_merge_tests() {
|
||||||
|
describe("rfc merge tests", [
|
||||||
|
it("normal examples", fn() {
|
||||||
|
let base = uri.parse("http://a/b/c/d;p?q") |> should.be_ok
|
||||||
|
|
||||||
|
let rel = uri.parse("g:h") |> should.be_ok
|
||||||
|
uri.merge(base, rel) |> should.be_ok |> should.equal(rel)
|
||||||
|
let rel = uri.parse("g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("./g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g/") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g/") |> should.be_ok)
|
||||||
|
let rel = uri.parse("/g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("//g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("?y") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/d;p?y") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g?y") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g?y") |> should.be_ok)
|
||||||
|
let rel = uri.parse("#s") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/d;p?q#s") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g#s") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g#s") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g?y#s") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g?y#s") |> should.be_ok)
|
||||||
|
let rel = uri.parse(";x") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/;x") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g;x") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g;x") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g;x?y#s") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g;x?y#s") |> should.be_ok)
|
||||||
|
let rel = uri.parse("") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/d;p?q") |> should.be_ok)
|
||||||
|
let rel = uri.parse(".") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/") |> should.be_ok)
|
||||||
|
let rel = uri.parse("./") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/") |> should.be_ok)
|
||||||
|
let rel = uri.parse("..") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/") |> should.be_ok)
|
||||||
|
let rel = uri.parse("../") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/") |> should.be_ok)
|
||||||
|
let rel = uri.parse("../g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("../..") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/") |> should.be_ok)
|
||||||
|
let rel = uri.parse("../../") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/") |> should.be_ok)
|
||||||
|
let rel = uri.parse("../../g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/g") |> should.be_ok)
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn normalise_tests() {
|
||||||
|
describe("normalise", [
|
||||||
|
it("basic normalise", fn() {
|
||||||
|
uri.parse("/a/b/c/./../../g")
|
||||||
|
|> should.be_ok
|
||||||
|
|> uri.normalise
|
||||||
|
|> should.equal(Uri(..empty_uri, path: "/a/g"))
|
||||||
|
uri.parse("mid/content=5/../6")
|
||||||
|
|> should.be_ok
|
||||||
|
|> uri.normalise
|
||||||
|
|> should.equal(Uri(..empty_uri, path: "mid/6"))
|
||||||
|
}),
|
||||||
|
it("abnormal examples", fn() {
|
||||||
|
let base = uri.parse("http://a/b/c/d;p?q") |> should.be_ok
|
||||||
|
|
||||||
|
let rel = uri.parse("../../../g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("../../../../g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("/./g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("/../g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g.") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g.") |> should.be_ok)
|
||||||
|
let rel = uri.parse(".g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/.g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g..") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g..") |> should.be_ok)
|
||||||
|
let rel = uri.parse("..g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/..g") |> should.be_ok)
|
||||||
|
}),
|
||||||
|
it("weird examples", fn() {
|
||||||
|
let base = uri.parse("http://a/b/c/d;p?q") |> should.be_ok
|
||||||
|
|
||||||
|
let rel = uri.parse("./../g") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/g") |> should.be_ok)
|
||||||
|
let rel = uri.parse("./g/.") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g/") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g/./h") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g/h") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g/../h") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/h") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g;x=1/./y") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g;x=1/y") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g;x=1/../y") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/y") |> should.be_ok)
|
||||||
|
}),
|
||||||
|
|
||||||
|
it("weird fragment examples", fn() {
|
||||||
|
let base = uri.parse("http://a/b/c/d;p?q") |> should.be_ok
|
||||||
|
|
||||||
|
let rel = uri.parse("g?y/./x") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g?y/./x") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g?y/../x") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g?y/../x") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g#s/./x") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g#s/./x") |> should.be_ok)
|
||||||
|
let rel = uri.parse("g#s/../x") |> should.be_ok
|
||||||
|
uri.merge(base, rel)
|
||||||
|
|> should.be_ok
|
||||||
|
|> should.equal(uri.parse("http://a/b/c/g#s/../x") |> should.be_ok)
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
}
|
||||||
// gleeunit test functions end in `_test`
|
// gleeunit test functions end in `_test`
|
||||||
// pub fn uri_test() {
|
// pub fn uri_test() {
|
||||||
// match("uri:")
|
// match("uri:")
|
||||||
|
|||||||
Reference in New Issue
Block a user