896
|
1 -- Prosody IM v0.4
|
797
|
2 -- Copyright (C) 2008-2009 Matthew Wild
|
|
3 -- Copyright (C) 2008-2009 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 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 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
|