You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.5 KiB
Lua
163 lines
4.5 KiB
Lua
setup(function()
|
|
_G.LOR_FRAMEWORK_DEBUG = false
|
|
end)
|
|
|
|
teardown(function()
|
|
end)
|
|
|
|
before_each(function()
|
|
Trie = _G.Trie
|
|
t = Trie:new()
|
|
t1 = Trie:new()
|
|
t2 = Trie:new()
|
|
end)
|
|
|
|
after_each(function()
|
|
Trie = nil
|
|
t = nil
|
|
t1 = nil
|
|
t2 = nil
|
|
_debug = nil
|
|
end)
|
|
|
|
describe("path match: ", function()
|
|
it("should succeed to match colon node.", function()
|
|
local n1 = t:add_node("/a/:name")
|
|
|
|
local m1 = t:match("/a/b")
|
|
assert.are.same(n1, m1.node)
|
|
local m2 = t:match("/a/demo")
|
|
assert.are.same(n1, m2.node)
|
|
assert.is.equals("demo", m2.params.name)
|
|
|
|
t.strict_route = false
|
|
local m3 = t:match("/a/mock/")
|
|
assert.are.same(n1, m3.node)
|
|
assert.is.equals("mock", m3.params["name"])
|
|
|
|
t.strict_route = true
|
|
m3 = t:match("/a/mock/")
|
|
assert.are.same(nil, m3.node)
|
|
end)
|
|
end)
|
|
|
|
describe("path matched pipeline: ", function()
|
|
it("should get correct pipeline.", function()
|
|
local n0 = t:add_node("/a")
|
|
local n1 = t:add_node("/a/b")
|
|
local n2 = t:add_node("/a/b/c")
|
|
|
|
local m1 = t:match("/a/b/c")
|
|
assert.are.same(n2, m1.node)
|
|
|
|
local p1 = m1.pipeline
|
|
assert.is.equals(4, #m1.pipeline)
|
|
assert.is.equals(t.root.id, p1[1].id)
|
|
assert.is.equals(n0.id, p1[2].id)
|
|
assert.is.equals(n1.id, p1[3].id)
|
|
assert.is.equals(n2.id, p1[4].id)
|
|
end)
|
|
|
|
it("slash node not included in pipeline.", function()
|
|
local slash_node = t:add_node("/")
|
|
local n0 = t:add_node("/a")
|
|
local n1 = t:add_node("/a/b")
|
|
local n2 = t:add_node("/a/b/c")
|
|
|
|
local m1 = t:match("/a/b/c") -- won't match slash_node
|
|
assert.are.same(n2, m1.node)
|
|
|
|
local p1 = m1.pipeline
|
|
assert.is_not.equals(5, #m1.pipeline)
|
|
assert.is.equals(4, #m1.pipeline)
|
|
for i, v in ipairs(p1) do
|
|
assert.is_not.equals(slash_node.id, v.id)
|
|
end
|
|
end)
|
|
|
|
it("pipeline contains the right parent node.", function()
|
|
local n1 = t:add_node("/a/b/c")
|
|
|
|
local m1 = t:match("/a/b/c")
|
|
assert.are.same(n1, m1.node)
|
|
|
|
local p1 = m1.pipeline
|
|
assert.is.equals(4, #m1.pipeline)
|
|
assert.is.equals(t.root.id, p1[1].id)
|
|
assert.is.equals(n1.parent.parent.id, p1[2].id)
|
|
assert.is.equals(n1.parent.id, p1[3].id)
|
|
assert.is.equals(n1.id, p1[4].id)
|
|
end)
|
|
|
|
it("children pipelines should contain same parents node.", function()
|
|
local n1 = t:add_node("/a/b/c")
|
|
local colon_n1 = t:add_node("/a/b/:name")
|
|
|
|
local m1 = t:match("/a/b/c")
|
|
assert.are.same(n1, m1.node)
|
|
|
|
local m2 = t:match("/a/b/sumory")
|
|
assert.are.same(colon_n1, m2.node)
|
|
|
|
local p1 = m1.pipeline
|
|
assert.is.equals(4, #m1.pipeline)
|
|
assert.is.equals(t.root.id, p1[1].id)
|
|
assert.is.equals(n1.parent.parent.id, p1[2].id)
|
|
assert.is.equals(n1.parent.id, p1[3].id)
|
|
assert.is.equals(n1.id, p1[4].id)
|
|
|
|
local p2 = m2.pipeline
|
|
assert.is.equals(4, #m2.pipeline)
|
|
assert.is.equals(t.root.id, p2[1].id)
|
|
assert.is.equals(colon_n1.parent.parent.id, p2[2].id)
|
|
assert.is.equals(colon_n1.parent.id, p2[3].id)
|
|
assert.is.equals(colon_n1.id, p2[4].id)
|
|
|
|
assert.is.equals(p1[1].id, p2[1].id)
|
|
assert.is.equals(p1[2].id, p2[2].id)
|
|
assert.is.equals(p1[3].id, p2[3].id)
|
|
assert.is_not.equals(p1[4].id, p2[4].id)
|
|
end)
|
|
end)
|
|
|
|
|
|
describe("use cases that are hard to understand: ", function()
|
|
it("absolute & colon node math.", function()
|
|
local n1 = t:add_node("/a/b/c")
|
|
local colon_n1 = t:add_node("/a/b/:name")
|
|
|
|
local m1 = t:match("/a/b/c")
|
|
assert.are.same(n1, m1.node)
|
|
|
|
local m2 = t:match("/a/b/sumory")
|
|
assert.are.same(colon_n1, m2.node)
|
|
|
|
end)
|
|
|
|
it("confused prefix node", function()
|
|
local n1 = t:add_node("/people/:id")
|
|
local n2 = t:add_node("/people/list/:id")
|
|
|
|
local m1 = t:match("/people/1")
|
|
assert.are.same(n1, m1.node)
|
|
local m11 = t:match("/people/abc")
|
|
assert.are.same(n1, m11.node)
|
|
|
|
local m2 = t:match("/people/abc/123")
|
|
assert.are.same(nil, m2.node)
|
|
|
|
local m3 = t:match("/people/list/123")
|
|
assert.are.same(n2, m3.node)
|
|
end)
|
|
|
|
it("children pipelines should contain same parents node.", function()
|
|
local n1 = t:add_node("/a/b/c")
|
|
local colon_n1 = t:add_node("/a/b/:name")
|
|
|
|
local m1 = t:match("/a/b/c")
|
|
assert.are.same(n1, m1.node)
|
|
end)
|
|
end)
|
|
|
|
|