File

tests/test_util_multitable.lua @ 8706:e2919978673e

net.http: Fix parameter order to http request callbacks Commit e3b9dc9dd940 changed the parameter order in 2013, but did not update the names of the parameters in the callback function. Due to this inconsistency, 12df41a5a4b1 accidentally reversed the order when fixing the variable names without fixing where they are used. Additionally the documentation was incorrect (since 2013), and this has also now been fixed.
author Matthew Wild <mwild1@gmail.com>
date Wed, 04 Apr 2018 18:27:44 +0100
parent 7511:ef6505962351
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)
	local 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 _, 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

	local 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