mod_smacks: Change boolean attribute from '1' to 'true' for compatibility
Conversations 2.10.10 and earlier expect this to be literally 'true' and don't
recognise '1'. This leads to it not attempting resumption with Prosody at all
since this change was introduced in 36ba170c4fd0.
Thanks to Zash for noticing, debugging and diagnosing this issue.
This issue is fixed in Conversations commit 052c58f3 (unreleased at the time
of writing).
local array = require "util.array";
describe("util.array", function ()
describe("creation", function ()
describe("from table", 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);
assert.falsy(a1 == { "a", "b" }, "Behavior of metatables changed in Lua 5.3");
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);
describe("slice", function ()
it("works", function ()
local a = array({ "a", "b", "c" });
assert.equal(array.slice(a, 1, 2), array{ "a", "b" });
assert.equal(array.slice(a, 1, 3), array{ "a", "b", "c" });
assert.equal(array.slice(a, 2, 3), array{ "b", "c" });
assert.equal(array.slice(a, 2), array{ "b", "c" });
assert.equal(array.slice(a, -4), array{ "a", "b", "c" });
assert.equal(array.slice(a, -3), array{ "a", "b", "c" });
assert.equal(array.slice(a, -2), array{ "b", "c" });
assert.equal(array.slice(a, -1), array{ "c" });
end);
it("can mutate", function ()
local a = array({ "a", "b", "c" });
assert.equal(a:slice(-1), array{"c"});
assert.equal(a, array{"c"});
end);
end);
end);
-- TODO The various array.foo(array ina, array outa) functions
end);