Add tests for util.multitable
authorMatthew Wild <mwild1@gmail.com>
Fri, 13 Feb 2009 16:43:44 +0000 (16:43 +0000)
committerMatthew Wild <mwild1@gmail.com>
Fri, 13 Feb 2009 16:43:44 +0000 (16:43 +0000)
tests/test_util_multitable.lua [new file with mode: 0644]

diff --git a/tests/test_util_multitable.lua b/tests/test_util_multitable.lua
new file mode 100644 (file)
index 0000000..aa93fc8
--- /dev/null
@@ -0,0 +1,62 @@
+-- Prosody IM v0.3
+-- Copyright (C) 2008-2009 Matthew Wild
+-- Copyright (C) 2008-2009 Waqas Hussain
+-- 
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
+--
+
+
+function new(new, multitable)
+       mt = new();
+       assert_table(mt, "Multitable is a table");
+       assert_function(mt.add, "Multitable has method add");
+       assert_function(mt.get, "Multitable has method get");
+       assert_function(mt.remove, "Multitable has method remove");
+
+       get(mt.get, multitable);
+end
+
+function get(get, multitable)
+       local function has_items(list, ...)
+               local should_have = {};
+               if select('#', ...) > 0 then
+                       assert_table(list, "has_items: list is table", 3);
+               else
+                       assert_is_not(list and #list > 0, "No items, and no list");
+                       return true, "has-all";
+               end
+               for n=1,select('#', ...) do should_have[select(n, ...)] = true; end
+               for n, item in ipairs(list) do
+                       if not should_have[item] then return false, "too-many"; end
+                       should_have[item] = nil;
+               end
+               if next(should_have) then
+                       return false, "not-enough";     
+               end
+               return true, "has-all";
+       end
+       local function assert_has_all(message, list, ...)
+               return assert_equal(select(2, has_items(list, ...)), "has-all", message or "List has all expected items, and no more", 2);
+       end
+
+       mt = multitable.new();
+       
+       local trigger1, trigger2, trigger3 = {}, {}, {};
+       local item1, item2, item3 = {}, {}, {};
+
+       assert_has_all("Has no items with trigger1", mt:get(trigger1));
+
+
+       mt:add(1, 2, 3, item1);
+
+       assert_has_all("Has item1 for 1, 2, 3", mt:get(1, 2, 3), item1);
+       
+-- Doesn't support nil
+--[[   mt:add(nil, item1);
+       mt:add(nil, item2);
+       mt:add(nil, item3);
+       
+       assert_has_all("Has all items with (nil)", mt:get(nil), item1, item2, item3);
+]]
+end