Zum Inhalt springen

Modul:DateTime/test

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 23. März 2014 um 21:59 Uhr durch PerfektesChaos (Diskussion | Beiträge) (update). Sie kann sich erheblich von der aktuellen Version unterscheiden.
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&#124;%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&#124;%s=%s",
                                   r, k, v )
            end
        end -- for k, v
        r    = r ..  "}}</code> || "
        r    = r:gsub( "{{", "&#123;&#123;" )
                :gsub( "}}", "&#125;&#125;" )
        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