nim-presto/tests/testsegpath.nim

118 lines
3.2 KiB
Nim
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import std/[unittest, strutils, uri]
import ../presto/segpath
when defined(nimHasUsed): {.used.}
proc validate(pattern: string, value: string): int =
if len(value) > 0: 0 else: 1
proc createPatternsOnly(num: int, name = "pattern"): string =
var res = ""
for i in 0 .. num:
res.add("/{" & name & $(i + 1) & "}")
res
proc createPathOnly(num: int, name = "path"): string =
var res = ""
for i in 0 .. num:
res.add("/" & name & $(i + 1))
res
proc createNamesArray(num: int, name = "name"): seq[string] =
var res: seq[string]
for i in 0 .. num:
res.add(name & $(i + 1))
res
suite "SegmentedPath test suite":
test "Empty patterns test":
const EmptyVectors = [
"/{}", "/path/{}", "{}", "/path1/path2/{}/path3",
"/path1/path2/path3/{}/"
]
for item in EmptyVectors:
expect AssertionError:
let path {.used.} = SegmentedPath.init(HttpMethod.MethodGet, item,
validate)
test "Too many segments path test":
for i in 63 .. 128:
expect AssertionError:
let path {.used.} = SegmentedPath.init(createPatternsOnly(i), validate)
expect AssertionError:
let path {.used.} = SegmentedPath.init(createPathOnly(i), validate)
let rpath1 = SegmentedPath.init(createPathOnly(i))
check rpath1.isErr()
let rpath2 = SegmentedPath.init(createPatternsOnly(i))
check rpath2.isErr()
test "Patterns bit test":
for i in 0 .. 62:
let names = createNamesArray(i, "pattern")
let path = SegmentedPath.init(createPatternsOnly(i), validate)
check:
len(path.data) == (i + 2)
path.getPatterns() == names
test "Non-unique patterns test":
const NonUniqueVectors = [
"/{item1}/{item2}/{item1}",
"/{i1}/{i1}",
"/{a}/{b}/{a}"
]
for item in NonUniqueVectors:
expect AssertionError:
let path {.used.} = SegmentedPath.init(HttpMethod.MethodGet, item,
validate)
test "Url-encoded path test":
let path = encodeUrl("запрос1") & "/" & encodeUrl("запрос2") & "/" &
encodeUrl("запрос3")
let sres = SegmentedPath.init(path)
check $sres.get() == "запрос1/запрос2/запрос3"
test "createPath() test":
const GoodVectors = [
(
"/{item1}/{item2}/data/path",
@[("item1", "path1"), ("item2", "path2")],
"/path1/path2/data/path"
),
(
"/data/path/{epoch}/{slot}",
@[("epoch", "1"), ("slot", "2")],
"/data/path/1/2"
),
(
"/data/path",
@[],
"/data/path"
),
("", @[], "")
]
const BadVectors = [
(
"/{item1}/{item2}/{item1}",
@[("item1", "path1"), ("item2", "path2")]
),
(
"/{item1}/data",
@[("item1", "path1"), ("item2", "path2")]
),
(
"/{item1}/{item2}/data",
@[("item1", "path1")]
),
(
"/{}/data",
@[("", "path1")]
)
]
for item in GoodVectors:
check createPath(item[0], item[1]) == item[2]
for item in BadVectors:
expect AssertionError:
let path {.used.} = createPath(item[0], item[1])