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

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)