Software / code / prosody
Annotate
tests/test_util_multitable.lua @ 2024:46a9c7c99476
prosody.cfg.lua.dist: Convert to unix line endings from DOS
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Tue, 20 Oct 2009 18:12:46 +0100 |
| parent | 1523:841d61be198f |
| child | 2923:b7049746bd29 |
| rev | line source |
|---|---|
|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
1 -- Prosody IM |
| 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 |