Модуль:Sandbox/Dts/testcases

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]
local p = require('Модуль:UnitTests')

function char_difference(s1, s2)
    if s1 == s2 then return '' end
    local max = math.min(#s1, #s2)
    for i = 1, max do
        if s1:sub(i,i) ~= s2:sub(i,i) then return i end
    end
    return max + 1
end

function first_difference(expected, actuall)
	local list_s1 = mw.text.split(mw.text.decode(expected, true),"%s")
	local list_s2 = mw.text.split(mw.text.decode(actuall, true),"%s")
	for i, s1val in pairs(list_s1) do
		s2val = list_s2[i]
		if (not s2val) then
			return "missing: " .. s1val
		end
		if (s1val ~= s2val) then
			local chardiff = char_difference(s2val, s1val);
			local retval =  "value:\n <nowiki>" .. s2val .. "</nowiki>\nshould be:\n <nowiki>" .. s1val .. "</nowiki>"
-- adding ascii of expected/recieved where they differ:
--			retval = retval .. "\n" .. chardiff .. ".."  .. (chardiff + 10) .. ":\nrecieved: "
--			for _, val in pairs({string.byte(s2val, chardiff, chardiff + 10)}) do
--				retval = retval .. val .. ", "
--			end 
--			retval = retval .. "\nexpected: "
--			for _, val in pairs({string.byte(s1val, chardiff, chardiff + 10)}) do
--				retval = retval .. val .. ", "
--			end
			return retval
		end
	end
	if table.getn(list_s2) > table.getn(list_s1) then
		return "extra value: " .. list_s2[table.getn(list_s1)]
	end
	return "o.k"
end

function p:test_initial()
	p:preprocess_equals_preprocess_many('{{#invoke:Sandbox/Dts|dts|', '}}', '{{dts|', '}}', {
		{'2001'},
		{'|1|1'},
		{'-50|July'},
		{'-1000|July|4'},
		{'5|July|4|BC'},
		{'40|July|4|BC'},
		{'1|July|4|BC'},
		{'88|July|4'},
		{'2007|7|11'},
		{'2001|sep|11'},
	})
end

function p:test_dmy()
	p:preprocess_equals_preprocess_many('{{#invoke:Sandbox/Dts|dts|', '}}', '{{dts|', '}}', {
		{'format=dmy|2001'},
		{'format=dmy||1|1'},
		{'format=dmy|-50|July'},
		{'format=dmy|July'},
		{'format=dmy||July'},
		{'format=dmy|-1000|July|4'},
		{'format=dmy|5|July|4|BC'},
		{'format=dmy|40|July|4|BC'},
		{'format=dmy|1|July|4|BC'},
		{'format=dmy|88|July|4'},
		{'format=dmy|2007|7|11'},
		{'format=dmy|2001|sep|11'},
	})
end

function p:test_single_arg()
	p:preprocess_equals_preprocess_many('{{#invoke:Sandbox/Dts|dts|', '}}', '{{dts|', '}}', {
		{'2001'},
		{'1 January'},
		{'July 19'},
		{'July 1923'},
		{'10 July 1994'},
		{'July 4, 1555'},
		{'24 Sep 2004'},
		{'format=mdy|1 July 1893'},
		{'format=dmy|July 4, 1688'},
		{'format=dmy|2007-7-11'},
		{'2001-11-11'}
	})
end

function p.printTable(tbl)
	local retval = ""
	for key, val in pairs(tbl) do
		if type(val) == "table" then
			retval = retval .. tostring(key) .. "={" .. p.printTable(val) .."},"
		else
			retval = retval .. tostring(key) .. "=".. tostring(val) ..","
		end
	end
	return retval
end

function p.printargs(frame)
	local args=require('Модуль:Arguments').getArgs(frame)
	return p.printTable(args)
end

return p