test: More merge tests
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
			
		||||
import gleam/option.{None, Some}
 | 
			
		||||
import gleeunit/should
 | 
			
		||||
import startest.{describe, it}
 | 
			
		||||
import types.{Uri}
 | 
			
		||||
import types.{Uri, empty_uri}
 | 
			
		||||
import uri
 | 
			
		||||
 | 
			
		||||
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`
 | 
			
		||||
// pub fn uri_test() {
 | 
			
		||||
//   match("uri:")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user