test_util_multitable: make mt variable local [luacheck]
[prosody.git] / tests / test_util_multitable.lua
1 -- Prosody IM
2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
4 --
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
7 --
8
9
10 function new(new, multitable)
11         local mt = new();
12         assert_table(mt, "Multitable is a table");
13         assert_function(mt.add, "Multitable has method add");
14         assert_function(mt.get, "Multitable has method get");
15         assert_function(mt.remove, "Multitable has method remove");
16
17         get(mt.get, multitable);
18 end
19
20 function get(get, multitable)
21         local function has_items(list, ...)
22                 local should_have = {};
23                 if select('#', ...) > 0 then
24                         assert_table(list, "has_items: list is table", 3);
25                 else
26                         assert_is_not(list and #list > 0, "No items, and no list");
27                         return true, "has-all";
28                 end
29                 for n=1,select('#', ...) do should_have[select(n, ...)] = true; end
30                 for n, item in ipairs(list) do
31                         if not should_have[item] then return false, "too-many"; end
32                         should_have[item] = nil;
33                 end
34                 if next(should_have) then
35                         return false, "not-enough";
36                 end
37                 return true, "has-all";
38         end
39         local function assert_has_all(message, list, ...)
40                 return assert_equal(select(2, has_items(list, ...)), "has-all", message or "List has all expected items, and no more", 2);
41         end
42
43         local mt = multitable.new();
44
45         local trigger1, trigger2, trigger3 = {}, {}, {};
46         local item1, item2, item3 = {}, {}, {};
47
48         assert_has_all("Has no items with trigger1", mt:get(trigger1));
49
50
51         mt:add(1, 2, 3, item1);
52
53         assert_has_all("Has item1 for 1, 2, 3", mt:get(1, 2, 3), item1);
54
55 -- Doesn't support nil
56 --[[    mt:add(nil, item1);
57         mt:add(nil, item2);
58         mt:add(nil, item3);
59
60         assert_has_all("Has all items with (nil)", mt:get(nil), item1, item2, item3);
61 ]]
62 end