aboutsummaryrefslogtreecommitdiff
path: root/builtin/common/tests
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/common/tests')
-rw-r--r--builtin/common/tests/misc_helpers_spec.lua73
-rw-r--r--builtin/common/tests/serialize_spec.lua44
-rw-r--r--builtin/common/tests/vector_spec.lua46
3 files changed, 163 insertions, 0 deletions
diff --git a/builtin/common/tests/misc_helpers_spec.lua b/builtin/common/tests/misc_helpers_spec.lua
new file mode 100644
index 000000000..bb9d13e7f
--- /dev/null
+++ b/builtin/common/tests/misc_helpers_spec.lua
@@ -0,0 +1,73 @@
+_G.core = {}
+dofile("builtin/common/misc_helpers.lua")
+
+describe("string", function()
+ it("trim()", function()
+ assert.equal("foo bar", string.trim("\n \t\tfoo bar\t "))
+ end)
+
+ describe("split()", function()
+ it("removes empty", function()
+ assert.same({ "hello" }, string.split("hello"))
+ assert.same({ "hello", "world" }, string.split("hello,world"))
+ assert.same({ "hello", "world" }, string.split("hello,world,,,"))
+ assert.same({ "hello", "world" }, string.split(",,,hello,world"))
+ assert.same({ "hello", "world", "2" }, string.split("hello,,,world,2"))
+ assert.same({ "hello ", " world" }, string.split("hello :| world", ":|"))
+ end)
+
+ it("keeps empty", function()
+ assert.same({ "hello" }, string.split("hello", ",", true))
+ assert.same({ "hello", "world" }, string.split("hello,world", ",", true))
+ assert.same({ "hello", "world", "" }, string.split("hello,world,", ",", true))
+ assert.same({ "hello", "", "", "world", "2" }, string.split("hello,,,world,2", ",", true))
+ assert.same({ "", "", "hello", "world", "2" }, string.split(",,hello,world,2", ",", true))
+ assert.same({ "hello ", " world | :" }, string.split("hello :| world | :", ":|"))
+ end)
+
+ it("max_splits", function()
+ assert.same({ "one" }, string.split("one", ",", true, 2))
+ assert.same({ "one,two,three,four" }, string.split("one,two,three,four", ",", true, 0))
+ assert.same({ "one", "two", "three,four" }, string.split("one,two,three,four", ",", true, 2))
+ assert.same({ "one", "", "two,three,four" }, string.split("one,,two,three,four", ",", true, 2))
+ assert.same({ "one", "two", "three,four" }, string.split("one,,,,,,two,three,four", ",", false, 2))
+ end)
+
+ it("pattern", function()
+ assert.same({ "one", "two" }, string.split("one,two", ",", false, -1, true))
+ assert.same({ "one", "two", "three" }, string.split("one2two3three", "%d", false, -1, true))
+ end)
+ end)
+end)
+
+describe("privs", function()
+ it("from string", function()
+ assert.same({ a = true, b = true }, core.string_to_privs("a,b"))
+ end)
+
+ it("to string", function()
+ assert.equal("one", core.privs_to_string({ one=true }))
+
+ local ret = core.privs_to_string({ a=true, b=true })
+ assert(ret == "a,b" or ret == "b,a")
+ end)
+end)
+
+describe("pos", function()
+ it("from string", function()
+ assert.same({ x = 10, y = 5.1, z = -2}, core.string_to_pos("10.0, 5.1, -2"))
+ assert.same({ x = 10, y = 5.1, z = -2}, core.string_to_pos("( 10.0, 5.1, -2)"))
+ assert.is_nil(core.string_to_pos("asd, 5, -2)"))
+ end)
+
+ it("to string", function()
+ assert.equal("(10.1,5.2,-2.3)", core.pos_to_string({ x = 10.1, y = 5.2, z = -2.3}))
+ end)
+end)
+
+describe("table", function()
+ it("indexof()", function()
+ assert.equal(1, table.indexof({"foo", "bar"}, "foo"))
+ assert.equal(-1, table.indexof({"foo", "bar"}, "baz"))
+ end)
+end)
diff --git a/builtin/common/tests/serialize_spec.lua b/builtin/common/tests/serialize_spec.lua
new file mode 100644
index 000000000..c41b0a372
--- /dev/null
+++ b/builtin/common/tests/serialize_spec.lua
@@ -0,0 +1,44 @@
+_G.core = {}
+
+_G.setfenv = require 'busted.compatibility'.setfenv
+
+dofile("builtin/common/serialize.lua")
+
+describe("serialize", function()
+ it("works", function()
+ local test_in = {cat={sound="nyan", speed=400}, dog={sound="woof"}}
+ local test_out = core.deserialize(core.serialize(test_in))
+
+ assert.same(test_in, test_out)
+ end)
+
+ it("handles characters", function()
+ local test_in = {escape_chars="\n\r\t\v\\\"\'", non_european="θשׁ٩∂"}
+ local test_out = core.deserialize(core.serialize(test_in))
+ assert.same(test_in, test_out)
+ end)
+
+ it("handles recursive structures", function()
+ local test_in = { hello = "world" }
+ test_in.foo = test_in
+
+ local test_out = core.deserialize(core.serialize(test_in))
+ assert.same(test_in, test_out)
+ end)
+
+ it("strips functions in safe mode", function()
+ local test_in = {
+ func = function(a, b)
+ error("test")
+ end,
+ foo = "bar"
+ }
+
+ local str = core.serialize(test_in)
+ assert.not_nil(str:find("loadstring"))
+
+ local test_out = core.deserialize(str, true)
+ assert.is_nil(test_out.func)
+ assert.equals(test_out.foo, "bar")
+ end)
+end)
diff --git a/builtin/common/tests/vector_spec.lua b/builtin/common/tests/vector_spec.lua
new file mode 100644
index 000000000..79f032f28
--- /dev/null
+++ b/builtin/common/tests/vector_spec.lua
@@ -0,0 +1,46 @@
+_G.vector = {}
+dofile("builtin/common/vector.lua")
+
+describe("vector", function()
+ describe("new()", function()
+ it("constructs", function()
+ assert.same({ x = 0, y = 0, z = 0 }, vector.new())
+ assert.same({ x = 1, y = 2, z = 3 }, vector.new(1, 2, 3))
+ assert.same({ x = 3, y = 2, z = 1 }, vector.new({ x = 3, y = 2, z = 1 }))
+
+ local input = vector.new({ x = 3, y = 2, z = 1 })
+ local output = vector.new(input)
+ assert.same(input, output)
+ assert.are_not.equal(input, output)
+ end)
+
+ it("throws on invalid input", function()
+ assert.has.errors(function()
+ vector.new({ x = 3 })
+ end)
+
+ assert.has.errors(function()
+ vector.new({ d = 3 })
+ end)
+ end)
+ end)
+
+ it("equal()", function()
+ local function assertE(a, b)
+ assert.is_true(vector.equals(a, b))
+ end
+ local function assertNE(a, b)
+ assert.is_false(vector.equals(a, b))
+ end
+
+ assertE({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
+ assertE({x = -1, y = 0, z = 1}, {x = -1, y = 0, z = 1})
+ local a = { x = 2, y = 4, z = -10 }
+ assertE(a, a)
+ assertNE({x = -1, y = 0, z = 1}, a)
+ end)
+
+ it("add()", function()
+ assert.same({ x = 2, y = 4, z = 6 }, vector.add(vector.new(1, 2, 3), { x = 1, y = 2, z = 3 }))
+ end)
+end)