Moduuli:Vertailuarvotesti

Wikipediasta
Siirry navigaatioon Siirry hakuun

Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Vertailuarvotesti/ohje

local t = {}
local base_path="Moduuli:Vertailuarvotesti/testdata/";

function load_reference_args (pagename )
	local reference_args;
	local title=base_path .. pagename;
	moduletitle=mw.title.new(title);
	if not moduletitle then
		error('"' .. map .. '" is not a valid name for a module', 2)
	elseif moduletitle.exists then
		reference_args = mw.loadData(title)
	end
	return reference_args;
end

function t.print_reference_args (frame)
	local ret="";
	local pagename=frame.args['sivun nimi'] or mw.title.getCurrentTitle().rootText;
	local reference_args=load_reference_args(pagename);
	local args=cleanParameters(reference_args)
	ret=dump(args);
	return "<pre>return " .. ret .."</pre>";
end

function t.check(frame)
	local tunnus=frame.args[1] or frame.args['tunnus'] or 'TEST_3';
	local pagename=frame.args['sivun nimi'] or mw.title.getCurrentTitle().rootText;
	local parent = frame:getParent();
	local input_args={};
	local ret="";
	local fail_msg="<span class='wd_tests'>[https://tools.wmflabs.org/fiwiki-tools/testit/".. tunnus .."/FAIL/VERTAILU Vertailu-testin tulos virheellinen]</span>[[Luokka:Vertailu-testin tulos virheellinen]]";
	local ok_msg="<span class='wd_tests'>[https://tools.wmflabs.org/fiwiki-tools/testit/".. tunnus .."/OK/VERTAILU Vertailu-testi OK]</span>";	

	if not parent then
		return "";
	end
	input_args=cleanParameters(parent.args);

	local reference_args=load_reference_args(pagename);
	if not reference_args then
		return "";
	end
	reference_args=cleanParameters(reference_args);

	for k,v in pairs(reference_args) do
		if v ~=nil and v~="" then
			re=false;
			input_v=input_args[k] or "";
			if v=="-" then
				v="";
			elseif string.sub(v, 1,1)=="/" and string.sub(v, -1, -1)=="/" then
				re=string.sub(v, 2,-2);
			end
			if (input_v~=v) and not (re and mw.ustring.find(input_v, re)) then
				return  fail_msg;
			end
		end
	end
	return ok_msg;
end


function t.print_test_results(frame)
	local pagename=frame.args['sivun nimi'] or mw.title.getCurrentTitle().rootText;
	pagename=mw.text.trim(pagename);
	local title=base_path .. pagename;
--	return title;
	
	local parent = frame:getParent();
	local input_args={};
	local ret="Vertailun tulokset.\n s=syöte, v=odotettu syöte.\n\n";
	if not parent then
		return "FAIL";
	end
	input_args=cleanParameters(parent.args);

	local reference_args=load_reference_args(pagename);
	if not reference_args then
		return title;
	end
	reference_args=cleanParameters(reference_args);
	for k,v in pairs(reference_args) do
		if v ~=nil and v~="" then
			input_v=input_args[k] or "";
			if v=="-" then
				v="";
			elseif string.sub(v, 1,1)=="/" and string.sub(v, -1, -1)=="/" then
				re=mw.text.unstripNoWiki(string.sub(v, 2,-2));
			end
			state=(input_v==v) or (re and mw.ustring.find(input_v, re)) ;
			ret=ret .. k .." = " .. tostring(state) .. "\n s=\"" .. input_v .."\"\n v=\"" .. v .."\"\n\n";
		end
	end
	return "Vertailutiedot: [[" .. base_path .. pagename .."]]\n\n<pre>" .. ret .."</pre>";
end

function t.print_args ( frame )
	local pagename=mw.title.getCurrentTitle().rootText;
	local parent = frame:getParent();
	local args={};
	local ret="";
	if parent ~= nil then
		args=cleanParameters(parent.args);
	end
	ret = dump(args);
	return "Vertailutiedot: [[" .. base_path .. pagename .."]]\n\n<pre>return " .. ret .."</pre>";
end

function cleanParameters( frame_args )
    local new_args = {};
    local index = 1;
    local value;
    
    for k,v in pairs(frame_args) do
        value = frame_args[k]
        value=mw.text.killMarkers( value );
        value=mw.ustring.gsub(tostring(value),"%b<>", "")
        value=mw.ustring.gsub(tostring(value),"%s+", " ")
		value=mw.text.trim(value);
        value=mw.text.nowiki(value);
        
        new_args[k] = value;
    end
    
    return new_args;
end  

function dump(o)
    if type(o) == 'table' then
        local s = '{\n'
        for k,v in pairs(o) do
                if type(k) ~= 'number' then k = '"'..k..'"' end
                if type(v) == 'nil' then k = '"'..tostring(k)..'"' end
 
                s = s .. '['..k..'] = ' .. dump(v) .. ',\n'
        end
        return s .. '}'
    else
        return '"' .. tostring(o) .. '"'
    end
end

return t