Comparison

spec/util_multitable_spec.lua @ 8236:4878e4159e12

Port tests to the `busted` test runner
author Waqas Hussain <waqas20@gmail.com>
date Fri, 15 Sep 2017 17:07:57 -0400
comparison
equal deleted inserted replaced
8235:7d9a2c200736 8236:4878e4159e12
1
2 local multitable = require "util.multitable";
3
4 describe("util.multitable", function()
5 describe("#new()", function()
6 it("should create a multitable", function()
7 local mt = multitable.new();
8 assert.is_table(mt, "Multitable is a table");
9 assert.is_function(mt.add, "Multitable has method add");
10 assert.is_function(mt.get, "Multitable has method get");
11 assert.is_function(mt.remove, "Multitable has method remove");
12 end);
13 end);
14
15 describe("#get()", function()
16 it("should allow getting correctly", function()
17 local function has_items(list, ...)
18 local should_have = {};
19 if select('#', ...) > 0 then
20 assert.is_table(list, "has_items: list is table", 3);
21 else
22 assert.is.falsy(list and #list > 0, "No items, and no list");
23 return true, "has-all";
24 end
25 for n=1,select('#', ...) do should_have[select(n, ...)] = true; end
26 for _, item in ipairs(list) do
27 if not should_have[item] then return false, "too-many"; end
28 should_have[item] = nil;
29 end
30 if next(should_have) then
31 return false, "not-enough";
32 end
33 return true, "has-all";
34 end
35 local function assert_has_all(message, list, ...)
36 return assert.are.equal(select(2, has_items(list, ...)), "has-all", message or "List has all expected items, and no more", 2);
37 end
38
39 local mt = multitable.new();
40
41 local trigger1, trigger2, trigger3 = {}, {}, {};
42 local item1, item2, item3 = {}, {}, {};
43
44 assert_has_all("Has no items with trigger1", mt:get(trigger1));
45
46
47 mt:add(1, 2, 3, item1);
48
49 assert_has_all("Has item1 for 1, 2, 3", mt:get(1, 2, 3), item1);
50 end);
51 end);
52
53 -- Doesn't support nil
54 --[[ mt:add(nil, item1);
55 mt:add(nil, item2);
56 mt:add(nil, item3);
57
58 assert_has_all("Has all items with (nil)", mt:get(nil), item1, item2, item3);
59 ]]
60 end);