Modul:DateTime/test
Erscheinungsbild
Vorlagenprogrammierung | Diskussionen | Lua | Test | Unterseiten | |||
Modul | Deutsch | English
|
Modul: | Dokumentation |
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
--[=[ 2014-03-20
Debug Module:DateTime
]=]
-- local globals
local DateTime = require( "Module:DateTime" )
DateTime = DateTime.DateTime
local Tests = { }
local Params = { "lang",
"bc",
"year",
"month",
"month2",
"dom",
"dom2",
"hour",
"hour2",
"min",
"sec",
"msec",
"zone" }
local function fault( a )
-- Formatiere Fehler mit class=error
return string.format( "<span class=\"error\">%s</span>", a )
end -- fault()
local function freeze( about, around )
-- Protect string wikisyntax
-- Parameter:
-- about -- string, to be protected
-- around -- embed in <code>
-- Returns:
-- string
local r = mw.getCurrentFrame():callParserFunction(
"#tag:syntaxhighlight",
{ about,
lang="text",
enclose="none" } )
if around then
r = string.format( "<code>%s</code>", r )
end
return r
end -- freeze()
Tests.fetcher = function ( args )
-- Evaluate constructor function
-- Parameter:
-- args -- template parameters
-- 2 -- string to be interpreted, or empty
-- *** -- expected field values, k=v
-- Returns:
-- string
local r
local s = ( args[ 2 ] or "" )
local o = DateTime( s )
if s == "" then
r = "\n==== fetcher() ====\n"
else
r = string.format( "\n==== %s ====\n", s )
end
if o then
local n = table.maxn( Params )
local score, single, suppose
s = mw.text.trim( s )
if s == "" then
s = "''empty''"
end
r = r ..
"{| class='wikitable'\n" ..
"|-\n" ..
"! item !! expect !! got !! diff\n"
for i = 1, n do
single = Params[ i ]
score = o[ single ]
suppose = args[ single ]
if score ~= nil or suppose ~= nil then
r = string.format( "%s\n|-\n| %s || ", r, single )
if suppose then
r = string.format( "%s<code>%s</code>", r, suppose )
end
r = r .. " || "
if score ~= nil then
score = tostring( score )
r = string.format( "%s<code>%s</code>",
r, score )
end
if score ~= suppose then
r = string.format( "%s || %s",
r, fault( "!!!!!!!!!!" ) )
end
end
end -- for i
r = r .. "\n|}\n"
elseif args.failed then
r = r .. "'''failed'''"
else
r = r .. "<span class=\"error\">FAILED</span>"
end
return r
end -- Tests.fetcher()
Tests.field = function ( args )
-- Evaluate template function
-- Parameter:
-- args -- template parameters
-- template -- which template
-- 1 -- string with first template parameter
-- 2 -- string with second template parameter
-- ... -- strings with more template parameters
-- r -- expected result (string)
-- Returns:
-- string with table row
local r = "\n|-\n| "
local l, d = pcall( require, "Module:DateTime/sort" )
local source = args.template
if l and source then
local sort, v
local suppose = args.r or ""
source = mw.text.trim( source )
r = string.format( "%s<code>{{%s",
r, source )
for i = 1, 9 do
v = args[ i ]
if v then
r = string.format( "%s|%s",
r, v )
end
end -- for i
for k, v in pairs( args ) do
if type( k ) == "string" and
k ~= "f" and k ~= "r" and k ~= "template" then
r = string.format( "%s|%s=%s",
r, k, v )
end
end -- for k, v
r = r .. "}}</code> || "
r = r:gsub( "{{", "{{" )
:gsub( "}}", "}}" )
sort = d.test( source, args )
r = string.format( "%s%s ||", r, sort )
if sort == suppose then
r = string.format( "%s<code>%s</code>", r, suppose )
else
r = string.format( "%s%s !!!!!!!!!! %s",
r,
freeze( suppose, true ),
fault( freeze( sort, true ) ) )
end
end
return r
end -- Tests.field()
Tests.follow = function ( args )
-- Evaluate sort function
-- Parameter:
-- args -- template parameters
-- 2 -- string to be interpreted
-- 3 -- string with heading cell, or empty
-- r -- expected result (number)
-- Returns:
-- string with table row
local r = "|-\n| "
local l, d = pcall( require, "Module:DateTime/sort" )
if l then
local source = args[ 2 ] or ""
local sort = d.fruit( source, false )
local suppose = args.r or ""
if args[ 3 ] then
r = string.format( "%s%s || ", r, args[ 3 ] )
end
r = string.format( "%s%s || <code>%s</code> || ",
r, source, sort )
if sort == suppose then
r = string.format( "%s<code>%s</code>", r, suppose )
else
r = string.format( "%s%s !!!!!!!!!!",
r, fault( suppose ) )
end
end
return r
end -- Tests.follow()
Tests.formatter = function ( args )
-- Evaluate formatting function
-- Parameter:
-- args -- template parameters
-- 2 -- string to be interpreted, or empty
-- 3 -- string with format, or empty
-- r -- expected result
-- Returns:
-- string
local r
local source = ( args[ 2 ] or "" )
local o = DateTime( source )
local shower = ( args[ 3 ] or "" )
if o then
r = o:format( shower, "de" )
end
if r then
local syntax = freeze( r, false )
if r ~= args.r then
local should = ( args.r or "" )
r = string.format( "%s<br />%s",
fault( r ), should )
end
r = string.format( "%s<br />%s",
r, syntax )
else
r = fault( "???????" )
end
r = string.format( "\n==== \"%s\" ====\n%s<br />%s",
shower, source, r )
return r
end -- Tests.formatter()
-- Export
local p = { }
function p.f( frame )
local r
local params = frame:getParent().args
local fun = params.f or params[ 1 ]
if fun then
local l
l, r = pcall( Tests[ fun ], params )
end
return r
end -- p.f
return p