improve turi.nim tests: js, vm; merge tdecodequery.nim (#16500)

* improve turi tests: js, vm; merge tdecodequery.nim

* improve test

* add test in js, improve test

* remove   matrix: "--styleCheck:hint --panics:on"

* fixup
This commit is contained in:
Timothee Cour 2020-12-29 04:26:10 -08:00 • committed by GitHub
commit fc1a4faf56
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 169 additions and 182 deletions

View file

@ -1,7 +0,0 @@
import std/[uri, sequtils]
block:
doAssert toSeq(decodeQuery("a=1&b=0")) == @[("a", "1"), ("b", "0")]
doAssertRaises(UriParseError):
discard toSeq(decodeQuery("a=1&b=2c=6"))

View file

@ -1,24 +1,14 @@
discard """ discard """
cmd: "nim c -r --styleCheck:hint --panics:on $options $file" targets: "c js"
targets: "c" joinable: false # because of `include uri`
nimout: ""
action: "run"
exitcode: 0
timeout: 60.0
""" """
include uri
# import std/uri # pending https://github.com/nim-lang/Nim/pull/11865
include uri # because of `removeDotSegments`
from std/sequtils import toSeq
block: template main() =
let org = "udp://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:8080" block: # encodeUrl, decodeUrl
let url = parseUri(org)
doAssert url.hostname == "2001:0db8:85a3:0000:0000:8a2e:0370:7334" # true
let newUrl = parseUri($url)
doAssert newUrl.hostname == "2001:0db8:85a3:0000:0000:8a2e:0370:7334" # true
block:
block:
const test1 = "abc\L+def xyz" const test1 = "abc\L+def xyz"
doAssert encodeUrl(test1) == "abc%0A%2Bdef+xyz" doAssert encodeUrl(test1) == "abc%0A%2Bdef+xyz"
doAssert decodeUrl(encodeUrl(test1)) == test1 doAssert decodeUrl(encodeUrl(test1)) == test1
@ -26,6 +16,14 @@ block:
doAssert decodeUrl(encodeUrl(test1, false), false) == test1 doAssert decodeUrl(encodeUrl(test1, false), false) == test1
doAssert decodeUrl(encodeUrl(test1)) == test1 doAssert decodeUrl(encodeUrl(test1)) == test1
block: # parseUri
block:
let org = "udp://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:8080"
let url = parseUri(org)
doAssert url.hostname == "2001:0db8:85a3:0000:0000:8a2e:0370:7334" # true
let newUrl = parseUri($url)
doAssert newUrl.hostname == "2001:0db8:85a3:0000:0000:8a2e:0370:7334" # true
block: block:
let str = "http://localhost" let str = "http://localhost"
let test = parseUri(str) let test = parseUri(str)
@ -126,11 +124,7 @@ block:
doAssert test.port == "" doAssert test.port == ""
doAssert test.path == "/foo/bar/baz.txt" doAssert test.path == "/foo/bar/baz.txt"
# Remove dot segments tests block: # combine
block:
doAssert removeDotSegments("/foo/bar/baz") == "/foo/bar/baz"
# Combine tests
block: block:
let concat = combine(parseUri("http://google.com/foo/bar/"), parseUri("baz")) let concat = combine(parseUri("http://google.com/foo/bar/"), parseUri("baz"))
doAssert concat.path == "/foo/bar/baz" doAssert concat.path == "/foo/bar/baz"
@ -168,7 +162,7 @@ block:
parseUri("baz")) parseUri("baz"))
doAssert concat.path == "/foo/test/bar/baz" doAssert concat.path == "/foo/test/bar/baz"
# `/` tests block: # `/`
block: block:
let test = parseUri("http://example.com/foo") / "bar/asd" let test = parseUri("http://example.com/foo") / "bar/asd"
doAssert test.path == "/foo/bar/asd" doAssert test.path == "/foo/bar/asd"
@ -177,27 +171,22 @@ block:
let test = parseUri("http://example.com/foo/") / "/bar/asd" let test = parseUri("http://example.com/foo/") / "/bar/asd"
doAssert test.path == "/foo/bar/asd" doAssert test.path == "/foo/bar/asd"
# removeDotSegments tests block: # removeDotSegments
block: doAssert removeDotSegments("/foo/bar/baz") == "/foo/bar/baz"
# empty test doAssert removeDotSegments("") == "" # empty test
doAssert removeDotSegments("") == ""
# bug #3207 block: # bug #3207
block:
doAssert parseUri("http://qq/1").combine(parseUri("https://qqq")).`$` == "https://qqq" doAssert parseUri("http://qq/1").combine(parseUri("https://qqq")).`$` == "https://qqq"
# bug #4959 block: # bug #4959
block:
let foo = parseUri("http://example.com") / "/baz" let foo = parseUri("http://example.com") / "/baz"
doAssert foo.path == "/baz" doAssert foo.path == "/baz"
# bug found on stream 13/10/17 block: # bug found on stream 13/10/17
block:
let foo = parseUri("http://localhost:9515") / "status" let foo = parseUri("http://localhost:9515") / "status"
doAssert $foo == "http://localhost:9515/status" doAssert $foo == "http://localhost:9515/status"
# bug #6649 #6652 block: # bug #6649 #6652
block:
var foo = parseUri("http://example.com") var foo = parseUri("http://example.com")
foo.hostname = "example.com" foo.hostname = "example.com"
foo.path = "baz" foo.path = "baz"
@ -224,8 +213,7 @@ block:
foo.path = "relative" foo.path = "relative"
doAssert $foo == "file:relative" doAssert $foo == "file:relative"
# isAbsolute tests block: # isAbsolute tests
block:
doAssert "www.google.com".parseUri().isAbsolute() == false doAssert "www.google.com".parseUri().isAbsolute() == false
doAssert "http://www.google.com".parseUri().isAbsolute() == true doAssert "http://www.google.com".parseUri().isAbsolute() == true
doAssert "file:/dir/file".parseUri().isAbsolute() == true doAssert "file:/dir/file".parseUri().isAbsolute() == true
@ -265,8 +253,7 @@ block:
doAssert "https://example.com/about/staff.html?".parseUri().isAbsolute == true doAssert "https://example.com/about/staff.html?".parseUri().isAbsolute == true
doAssert "https://example.com/about/staff.html?parameters".parseUri().isAbsolute == true doAssert "https://example.com/about/staff.html?parameters".parseUri().isAbsolute == true
# encodeQuery tests block: # encodeQuery tests
block:
doAssert encodeQuery({:}) == "" doAssert encodeQuery({:}) == ""
doAssert encodeQuery({"foo": "bar"}) == "foo=bar" doAssert encodeQuery({"foo": "bar"}) == "foo=bar"
doAssert encodeQuery({"foo": "bar & baz"}) == "foo=bar+%26+baz" doAssert encodeQuery({"foo": "bar & baz"}) == "foo=bar+%26+baz"
@ -276,17 +263,17 @@ block:
doAssert encodeQuery({"a": "1", "b": "", "c": "3"}) == "a=1&b&c=3" doAssert encodeQuery({"a": "1", "b": "", "c": "3"}) == "a=1&b&c=3"
doAssert encodeQuery({"a": "1", "b": "", "c": "3"}, omitEq = false) == "a=1&b=&c=3" doAssert encodeQuery({"a": "1", "b": "", "c": "3"}, omitEq = false) == "a=1&b=&c=3"
block: # `?`
block: block:
var foo = parseUri("http://example.com") / "foo" ? {"bar": "1", "baz": "qux"} var foo = parseUri("http://example.com") / "foo" ? {"bar": "1", "baz": "qux"}
var foo1 = parseUri("http://example.com/foo?bar=1&baz=qux") var foo1 = parseUri("http://example.com/foo?bar=1&baz=qux")
doAssert foo == foo1 doAssert foo == foo1
block: block:
var foo = parseUri("http://example.com") / "foo" ? {"do": "do", "bar": ""} var foo = parseUri("http://example.com") / "foo" ? {"do": "do", "bar": ""}
var foo1 = parseUri("http://example.com/foo?do=do&bar") var foo1 = parseUri("http://example.com/foo?do=do&bar")
doAssert foo == foo1 doAssert foo == foo1
block dataUriBase64: block: # getDataUri, dataUriBase64
doAssert getDataUri("", "text/plain") == "data:text/plain;charset=utf-8;base64," doAssert getDataUri("", "text/plain") == "data:text/plain;charset=utf-8;base64,"
doAssert getDataUri(" ", "text/plain") == "data:text/plain;charset=utf-8;base64,IA==" doAssert getDataUri(" ", "text/plain") == "data:text/plain;charset=utf-8;base64,IA=="
doAssert getDataUri("c\xf7>", "text/plain") == "data:text/plain;charset=utf-8;base64,Y/c+" doAssert getDataUri("c\xf7>", "text/plain") == "data:text/plain;charset=utf-8;base64,Y/c+"
@ -295,6 +282,13 @@ block:
doAssert getDataUri("""!@#$%^&*()_+""", "text/plain") == "data:text/plain;charset=utf-8;base64,IUAjJCVeJiooKV8r" doAssert getDataUri("""!@#$%^&*()_+""", "text/plain") == "data:text/plain;charset=utf-8;base64,IUAjJCVeJiooKV8r"
doAssert(getDataUri("the quick brown dog jumps over the lazy fox", "text/plain") == doAssert(getDataUri("the quick brown dog jumps over the lazy fox", "text/plain") ==
"data:text/plain;charset=utf-8;base64,dGhlIHF1aWNrIGJyb3duIGRvZyBqdW1wcyBvdmVyIHRoZSBsYXp5IGZveA==") "data:text/plain;charset=utf-8;base64,dGhlIHF1aWNrIGJyb3duIGRvZyBqdW1wcyBvdmVyIHRoZSBsYXp5IGZveA==")
doAssert(getDataUri("""The present is theirs doAssert(getDataUri("The present is theirs\n The future, for which I really worked, is mine.", "text/plain") ==
The future, for which I really worked, is mine.""", "text/plain") ==
"data:text/plain;charset=utf-8;base64,VGhlIHByZXNlbnQgaXMgdGhlaXJzCiAgICAgIFRoZSBmdXR1cmUsIGZvciB3aGljaCBJIHJlYWxseSB3b3JrZWQsIGlzIG1pbmUu") "data:text/plain;charset=utf-8;base64,VGhlIHByZXNlbnQgaXMgdGhlaXJzCiAgICAgIFRoZSBmdXR1cmUsIGZvciB3aGljaCBJIHJlYWxseSB3b3JrZWQsIGlzIG1pbmUu")
block: # decodeQuery
doAssert toSeq(decodeQuery("a=1&b=0")) == @[("a", "1"), ("b", "0")]
doAssertRaises(UriParseError):
discard toSeq(decodeQuery("a=1&b=2c=6"))
static: main()
main()