aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/util_array_spec.lua154
-rw-r--r--spec/util_error_spec.lua68
2 files changed, 222 insertions, 0 deletions
diff --git a/spec/util_array_spec.lua b/spec/util_array_spec.lua
new file mode 100644
index 00000000..acd2e882
--- /dev/null
+++ b/spec/util_array_spec.lua
@@ -0,0 +1,154 @@
+local array = require "util.array";
+describe("util.array", function ()
+ describe("creation", function ()
+ describe("from tablle", function ()
+ it("works", function ()
+ local a = array({"a", "b", "c"});
+ assert.same({"a", "b", "c"}, a);
+ end);
+ end);
+
+ describe("from iterator", function ()
+ it("works", function ()
+ -- collects the first value, ie the keys
+ local a = array(ipairs({true, true, true}));
+ assert.same({1, 2, 3}, a);
+ end);
+ end);
+
+ describe("collect", function ()
+ it("works", function ()
+ -- collects the first value, ie the keys
+ local a = array.collect(ipairs({true, true, true}));
+ assert.same({1, 2, 3}, a);
+ end);
+ end);
+
+ end);
+
+ describe("metatable", function ()
+ describe("operator", function ()
+ describe("addition", function ()
+ it("works", function ()
+ local a = array({ "a", "b" });
+ local b = array({ "c", "d" });
+ assert.same({"a", "b", "c", "d"}, a + b);
+ end);
+ end);
+
+ describe("equality", function ()
+ it("works", function ()
+ local a1 = array({ "a", "b" });
+ local a2 = array({ "a", "b" });
+ local b = array({ "c", "d" });
+ assert.truthy(a1 == a2);
+ assert.falsy(a1 == b);
+ end);
+ end);
+
+ describe("division", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c" });
+ local b = a / function (i) if i ~= "b" then return i .. "x" end end;
+ assert.same({ "ax", "cx" }, b);
+ end);
+ end);
+
+ end);
+ end);
+
+ describe("methods", function ()
+ describe("map", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c" });
+ local b = a:map(string.upper);
+ assert.same({ "A", "B", "C" }, b);
+ end);
+ end);
+
+ describe("filter", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c" });
+ a:filter(function (i) return i ~= "b" end);
+ assert.same({ "a", "c" }, a);
+ end);
+ end);
+
+ describe("sort", function ()
+ it("works", function ()
+ local a = array({ 5, 4, 3, 1, 2, });
+ a:sort();
+ assert.same({ 1, 2, 3, 4, 5, }, a);
+ end);
+ end);
+
+ describe("unique", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c", "c", "a", "b" });
+ a:unique();
+ assert.same({ "a", "b", "c" }, a);
+ end);
+ end);
+
+ describe("pluck", function ()
+ it("works", function ()
+ local a = array({ { a = 1, b = -1 }, { a = 2, b = -2 }, });
+ a:pluck("a");
+ assert.same({ 1, 2 }, a);
+ end);
+ end);
+
+
+ describe("reverse", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c" });
+ a:reverse();
+ assert.same({ "c", "b", "a" }, a);
+ end);
+ end);
+
+ -- TODO :shuffle
+
+ describe("append", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c" });
+ a:append(array({ "d", "e", }));
+ assert.same({ "a", "b", "c", "d", "e" }, a);
+ end);
+ end);
+
+ describe("push", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c" });
+ a:push("d"):push("e");
+ assert.same({ "a", "b", "c", "d", "e" }, a);
+ end);
+ end);
+
+ describe("pop", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c" });
+ assert.equal("c", a:pop());
+ assert.same({ "a", "b", }, a);
+ end);
+ end);
+
+ describe("concat", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c" });
+ assert.equal("a,b,c", a:concat(","));
+ end);
+ end);
+
+ describe("length", function ()
+ it("works", function ()
+ local a = array({ "a", "b", "c" });
+ assert.equal(3, a:length());
+ end);
+ end);
+
+ end);
+
+ -- TODO The various array.foo(array ina, array outa) functions
+end);
+
diff --git a/spec/util_error_spec.lua b/spec/util_error_spec.lua
new file mode 100644
index 00000000..d8534c2b
--- /dev/null
+++ b/spec/util_error_spec.lua
@@ -0,0 +1,68 @@
+local errors = require "util.error"
+
+describe("util.error", function ()
+ describe("new()", function ()
+ it("works", function ()
+ local err = errors.new("bork", "bork bork");
+ assert.not_nil(err);
+ assert.equal("cancel", err.type);
+ assert.equal("undefined-condition", err.condition);
+ assert.same("bork bork", err.context);
+ end);
+
+ describe("templates", function ()
+ it("works", function ()
+ local templates = {
+ ["fail"] = {
+ type = "wait",
+ condition = "internal-server-error",
+ };
+ };
+ local err = errors.new("fail", { traceback = "in some file, somewhere" }, templates);
+ assert.equal("wait", err.type);
+ assert.equal("internal-server-error", err.condition);
+ assert.same({ traceback = "in some file, somewhere" }, err.context);
+ end);
+ end);
+
+ end);
+
+ describe("is_err()", function ()
+ it("works", function ()
+ assert.truthy(errors.is_err(errors.new()));
+ assert.falsy(errors.is_err("not an error"));
+ end);
+ end);
+
+ describe("coerce", function ()
+ it("works", function ()
+ local ok, err = errors.coerce(nil, "it dun goofed");
+ assert.is_nil(ok);
+ assert.truthy(errors.is_err(err))
+ end);
+ end);
+
+ describe("from_stanza", function ()
+ it("works", function ()
+ local st = require "util.stanza";
+ local m = st.message({ type = "chat" });
+ local e = st.error_reply(m, "modify", "bad-request");
+ local err = errors.from_stanza(e);
+ assert.truthy(errors.is_err(err));
+ assert.equal("modify", err.type);
+ assert.equal("bad-request", err.condition);
+ assert.equal(e, err.context.stanza);
+ end);
+ end);
+
+ describe("__tostring", function ()
+ it("doesn't throw", function ()
+ assert.has_no.errors(function ()
+ -- See 6f317e51544d
+ tostring(errors.new());
+ end);
+ end);
+ end);
+
+end);
+