File

tests/test_util_multitable.lua @ 5915:e6fed1d80116

Back out 1b0ac7950129, as SSLv3 appears to still be in moderate use on the network. Also, although obsolete, SSLv3 isn't documented to have any weaknesses that TLS 1.0 (the most common version used today) doesn't also have. Get your act together clients!
author Matthew Wild <mwild1@gmail.com>
date Tue, 12 Nov 2013 02:13:01 +0000
parent 3540:bc139431830b
child 5776:bd0ff8ae98a8
line wrap: on
line source

-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 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