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.
316 lines
8.5 KiB
Lua
316 lines
8.5 KiB
Lua
setup(function()
|
|
_G.LOR_FRAMEWORK_DEBUG = true
|
|
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("objects check: ", function()
|
|
it("objects or modules should not be nil.", function()
|
|
assert.is.truthy(Trie)
|
|
assert.is.truthy(Node)
|
|
assert.is.truthy(t)
|
|
assert.is.truthy(t1)
|
|
assert.is.truthy(t2)
|
|
end)
|
|
end)
|
|
|
|
describe("add node: ", function()
|
|
it("wrong patterns with `/` to add.", function()
|
|
assert.has_error(function()
|
|
t1:add_node("//")
|
|
end)
|
|
assert.has_error(function()
|
|
t1:add_node("///")
|
|
end)
|
|
assert.has_error(function()
|
|
t1:add_node("/a/b//")
|
|
end)
|
|
assert.has_error(function()
|
|
t1:add_node("//a/b/")
|
|
end)
|
|
assert.has_error(function()
|
|
t1:add_node("/a//b/")
|
|
end)
|
|
assert.has_error(function()
|
|
t1:add_node("/a///b/")
|
|
end)
|
|
end)
|
|
|
|
it("wrong patterns with spaces to add.", function()
|
|
assert.has_error(function()
|
|
t1:add_node(" / / ")
|
|
end)
|
|
|
|
assert.has_error(function()
|
|
t1:add_node("/ /")
|
|
end)
|
|
end)
|
|
|
|
it("correct pattern to add.", function()
|
|
assert.has_no_error(function()
|
|
t1:add_node(" ") -- slim to ""
|
|
t1:add_node("/")
|
|
t1:add_node("")
|
|
t1:add_node("/a")
|
|
t1:add_node("/a/b")
|
|
t1:add_node("/a/b/c/")
|
|
end)
|
|
|
|
assert.has_no.error(function()
|
|
t1:add_node(" ")
|
|
end)
|
|
end)
|
|
|
|
it("these patterns should get same node.", function()
|
|
local node = t1:add_node("/")
|
|
|
|
assert.is.equals(node, t1:add_node("/"))
|
|
assert.is.equals(node, t1:add_node(""))
|
|
assert.is.equals(t1:add_node("/"), t1:add_node(""))
|
|
assert.is.equals(node.parent, t1.root)
|
|
|
|
assert.is_not.equals(node, t2:add_node("/"))
|
|
assert.is_not.equals(node, t2:add_node(""))
|
|
end)
|
|
|
|
it("spaces in patterns are trimed.", function()
|
|
local node = t:add_node("/")
|
|
assert.is.equals(node, t:add_node(" "))
|
|
assert.is.equals(node, t:add_node(" "))
|
|
assert.is.equals(node, t:add_node(" /"))
|
|
assert.is.equals(node, t:add_node(" / "))
|
|
|
|
end)
|
|
end)
|
|
|
|
describe("illegal & legal path: ", function()
|
|
it("wrong path", function()
|
|
assert.has_error(function()
|
|
t:add_node("/#+")
|
|
end)
|
|
assert.has_error(function()
|
|
t:add_node(":+abc")
|
|
end)
|
|
assert.has_error(function()
|
|
t:add_node(":&abc")
|
|
end)
|
|
|
|
assert.has_error(function()
|
|
t:add_node(":abc*")
|
|
end)
|
|
|
|
end)
|
|
it("correct path", function()
|
|
assert.has_no_error(function()
|
|
t:add_node(":abc")
|
|
end)
|
|
assert.has_no_error(function()
|
|
t:add_node("abc")
|
|
end)
|
|
assert.has_no_error(function()
|
|
t:add_node("/abc")
|
|
end)
|
|
end)
|
|
end)
|
|
|
|
describe("node's name: ", function()
|
|
it("check names", function()
|
|
local node = t1:add_node("/")
|
|
assert.is.equals(node.name, "")
|
|
end)
|
|
end)
|
|
|
|
describe("parent/children relation: ", function()
|
|
it("use case 1.", function()
|
|
local node = t1:add_node("/a/b")
|
|
assert.is.equals(node.name, "")
|
|
assert.is.equals(node.pattern, "/a/b")
|
|
|
|
assert.is.equals(node, t1:add_node("/a/b"))
|
|
assert.is_not.equals(node, t1:add_node("a/b/"))
|
|
assert.is_not.equals(node, t1:add_node("/a/b/"))
|
|
assert.is.equals(t1:add_node("/a/b/"), t1:add_node("a/b/"))
|
|
|
|
parent = t1:add_node("/a")
|
|
assert.is.equals(node.parent, parent)
|
|
assert.is_not.equals(parent.varyChild, node)
|
|
assert.is.equals(parent:find_child("b"), node)
|
|
child = t1:add_node("/a/b/c")
|
|
assert.is.equals(child.parent, node)
|
|
assert.is.equals(node:find_child("c"), child)
|
|
|
|
assert.has_error(function()
|
|
t1:add_node("/a//b")
|
|
end)
|
|
end)
|
|
|
|
it("use case 2.", function()
|
|
local root = t.root
|
|
|
|
local slash_level = t:add_node("/")
|
|
local level0 = t:add_node("/00")
|
|
local level1 = t:add_node("/01")
|
|
local level2 = t:add_node("/02")
|
|
|
|
local level0_0 = t:add_node("/00/0")
|
|
local level0_1 = t:add_node("/00/1")
|
|
local level0_2 = t:add_node("/00/2")
|
|
|
|
local level1_0 = t:add_node("/01/0")
|
|
local level1_1 = t:add_node("/01/1")
|
|
local level1_2 = t:add_node("/01/2")
|
|
|
|
local level2_0 = t:add_node("/02/0")
|
|
local level2_1 = t:add_node("/02/1")
|
|
local level2_2 = t:add_node("/02/2")
|
|
|
|
local level0_0_0 = t:add_node("/00/0/0")
|
|
local level0_0_1 = t:add_node("/00/0/1")
|
|
local level0_0_2 = t:add_node("/00/0/2")
|
|
|
|
assert.is.equals(root.name, "")
|
|
assert.is.equals(root.pattern, "")
|
|
|
|
assert.is.equals(slash_level.name, "")
|
|
assert.is.equals(slash_level.pattern, "/")
|
|
assert.is.equals(level0.name, "")
|
|
assert.is.equals(level0.pattern, "/00")
|
|
|
|
assert.are.same(slash_level.parent, level1.parent)
|
|
assert.are.same(level0.parent, level1.parent)
|
|
assert.are.same(level1.parent, level2.parent)
|
|
|
|
assert.is.equals(root, level0.parent)
|
|
assert.is.equals(root, level1.parent)
|
|
assert.is.equals(root, level2.parent)
|
|
|
|
assert.is.equals(level0, level0_0.parent)
|
|
assert.is.equals(level0_0.parent, level0_1.parent)
|
|
assert.is.equals(level1, level1_0.parent)
|
|
assert.is.equals(level1_0.parent, level1_1.parent)
|
|
|
|
assert.is.equals(root, level0_0_0.parent.parent.parent)
|
|
assert.is.equals(level0, level0_0_0.parent.parent)
|
|
end)
|
|
end)
|
|
|
|
describe("colon child define: ", function()
|
|
it("should failed to define conflict node.", function()
|
|
local root = t.root
|
|
|
|
local slash_level = t:add_node("/")
|
|
local level0 = t:add_node("/00")
|
|
|
|
t:add_node("/00/0")
|
|
t:add_node("/00/0/:0")
|
|
|
|
assert.has_error(function()
|
|
t:add_node("/00/0/:1")
|
|
end)
|
|
|
|
assert.has_error(function()
|
|
t:add_node("/00/0/:01")
|
|
end)
|
|
|
|
assert.has_no_error(function()
|
|
t:add_node("/00/0/absolute")
|
|
end)
|
|
end)
|
|
|
|
it("should succeed to define not conflict nodes.", function()
|
|
local root = t.root
|
|
|
|
local slash_level = t:add_node("/")
|
|
local level0 = t:add_node("/00")
|
|
|
|
t:add_node("/00/0")
|
|
t:add_node("/00/0/:0")
|
|
|
|
assert.has_no_error(function()
|
|
t:add_node("/00/0/absolute")
|
|
end)
|
|
|
|
assert.has_no_error(function()
|
|
t:add_node("/00/0/123")
|
|
end)
|
|
|
|
assert.has_no_error(function()
|
|
t:add_node("/00/0/123/456")
|
|
end)
|
|
end)
|
|
end)
|
|
|
|
describe("shadow child define: ", function()
|
|
it("should failed to define conflict node.", function()
|
|
local level0_0_0 = t:add_node("/00/0/:0")
|
|
local level0_0_0_shadow = t:add_node("/00/0/:0")
|
|
local level0_0_0_shadow2 = t:add_node("/00/0/:0")
|
|
assert.is.equals(level0_0_0, level0_0_0_shadow)
|
|
assert.is.equals(level0_0_0_shadow, level0_0_0_shadow2)
|
|
end)
|
|
end)
|
|
|
|
describe("regex node define: ", function()
|
|
it("should failed to define error regex node.", function()
|
|
assert.has_error(function()
|
|
t:add_node("/a/:(^abc)")
|
|
end)
|
|
assert.has_error(function()
|
|
t:add_node("/a/(^abc)")
|
|
end)
|
|
assert.has_error(function()
|
|
t:add_node("/a/:abc(^abc")
|
|
end)
|
|
assert.has_error(function()
|
|
t:add_node("/a/:abc^abc)")
|
|
end)
|
|
end)
|
|
it("should succeed to define regex node.", function()
|
|
assert.has_no_error(function()
|
|
t:add_node("/a/:b(^abc)")
|
|
end)
|
|
assert.has_no_error(function()
|
|
t:add_node("/a/b/:c(^abc)")
|
|
end)
|
|
|
|
|
|
local n1 = t:add_node("/a/:b(^abc)")
|
|
assert.is.equals("^abc", n1.regex)
|
|
end)
|
|
end)
|
|
|
|
|
|
describe("just for dev, print json/tree : ", function()
|
|
it("case 1.", function()
|
|
local root = t.root
|
|
|
|
local slash_level = t:add_node("/")
|
|
local level0 = t:add_node("/00")
|
|
local level0_0 = t:add_node("/00/0")
|
|
|
|
local level0_0_1 = t:add_node("/00/0/1")
|
|
|
|
local level0_0_0 = t:add_node("/00/0/:0")
|
|
local level0_0_0_shadow = t:add_node("/00/0/:0")
|
|
assert.is.equals(level0_0_0, level0_0_0_shadow)
|
|
|
|
end)
|
|
end)
|
|
|