!! article
Module:Test
!! text
local p = {}
local isoTestData = ''
local bit = require('bit')
function p.tooFewArgs()
require()
end
function p.getAllArgs( frame )
local buf = {}
local names = {}
local values = {}
for name, value in pairs( frame.args ) do
table.insert(names, name)
values[name] = value
end
table.sort(names, function (a, b) return tostring(a) < tostring(b) end)
for index, name in ipairs(names) do
if #buf ~= 0 then
table.insert( buf, ', ' )
end
table.insert( buf, name .. '=' .. values[name] )
end
return table.concat( buf )
end
function p.getAllArgs2( frame )
local buf = {}
local names = {}
local values = {}
for name, value in frame:argumentPairs() do
table.insert(names, name)
values[name] = value
end
table.sort(names, function (a, b) return tostring(a) < tostring(b) end)
for index, name in ipairs(names) do
if #buf ~= 0 then
table.insert( buf, ', ' )
end
table.insert( buf, name .. '=' .. values[name] )
end
return table.concat( buf )
end
function p.getNumericArgs( frame )
local buf = {}
for index, value in ipairs(frame.args) do
if #buf ~= 0 then
table.insert( buf, ', ' )
end
table.insert( buf, index .. '=' .. value )
end
return table.concat( buf )
end
function p.getArg( frame )
local name = frame.args[1]
return frame:getArgument( name ):expand()
end
function p.getArgLength( frame )
local name = frame.args[1]
return #(frame.args[name])
end
function p.getArgType( frame )
local name = frame.args[1]
return type( frame.args[name] )
end
function p.hello()
return 'hello'
end
function p.emptyTable()
return {}
end
function p.import()
return require('Module:Test2').countBeans()
end
function p.bitop()
return bit.bor(1, bit.bor(2, bit.bor(4, 8)))
end
function p.isolationTestUpvalue( frame )
isoTestData = isoTestData .. frame.args[1]
return isoTestData
end
function p.isolationTestGlobal( frame )
if isoTestDataGlobal == nil then
isoTestDataGlobal = ''
end
isoTestDataGlobal = isoTestDataGlobal .. frame.args[1]
return isoTestDataGlobal
end
function p.getParentArgs( frame )
return p.getAllArgs( frame:getParent() )
end
function p.testExpandTemplate( frame )
return frame:expandTemplate{
title = 'Scribunto_all_args',
args = { x = 1, y = 2, z = '|||' }
}
end
function p.testExpandTemplateWithHeaders( frame )
return frame:expandTemplate{
title = 'Scribunto_template_with_headers'
}
end
function p.testNewTemplateParserValue( frame )
return
frame:newTemplateParserValue{
title = 'Scribunto_all_args',
args = { x = 1, y = 2, z = 'blah' }
} : expand()
end
function p.testPreprocess( frame )
return frame:preprocess( '{{Scribunto_all_args|{{{1}}}}}|x=y' )
end
function p.testNewParserValue( frame )
return frame:newParserValue( '{{Scribunto_all_args|{{{1}}}}}|x=y' ):expand()
end
function p.null( frame )
return '\0'
end
function p.isSubsting( frame )
return tostring( mw.isSubsting() )
end
function p.getFrameTitle( frame )
return frame:getTitle()
end
p['test=InFunctionName'] = function( frame )
return frame.args[1]
end
function p.testStrippedCss( frame )
return mw.html.create( 'div' ):css( 'color', frame.args[1] )
end
function p.testFrameCaching( frame )
return string.format(
'Parent frame is the root: %s. Child frame is the root: %s.',
frame:getParent():preprocess('
Script error: No such module "foo".
!! end !! test Scribunto: no such function !! input {{#invoke:test|blah}} !! resultScript error: The function "blah" does not exist.
!! end !! test Scribunto: hello world !! input {{#invoke:test|hello}} !! resulthello
!! end !! test Scribunto: getAllArgs !! input {{#invoke:test|getAllArgs|x|y|z|a=1|b=2|c=3|7=?}} !! result1=x, 2=y, 3=z, 7=?, a=1, b=2, c=3
!! end !! test Scribunto: getAllArgs, deprecated style !! input {{#invoke:test|getAllArgs2|x|y|z|a=1|b=2|c=3|7=?}} !! result1=x, 2=y, 3=z, 7=?, a=1, b=2, c=3
!! end !! test Scribunto: getNumericArgs !! input {{#invoke:test|getNumericArgs|x|y|z|a=1|b=2|c=3|7=?}} !! result1=x, 2=y, 3=z
!! end !! test Scribunto: named numeric parameters !! input {{#invoke:test|getArg|2|a|2=b}} {{#invoke:test|getArg|2|2=a|b}} !! resultb b
!! end !! test Scribunto: template-style argument trimming !! input {{#invoke:test|getArgLength|2| x }} {{#invoke:test|getArgLength|2|2= x }} !! result3 1
!! end !! test Scribunto: missing argument !! input {{#invoke:test|getArgType|2}} {{#invoke:test|getArgType|blah}} !! resultnil nil
!! end !! test Scribunto: parent frame access !! input {{Scribunto_all_args|x|y|z|a = 1|b = 2|c = 3}} !! result1=x, 2=y, 3=z, a=1, b=2, c=3
!! end !! test Scribunto: expandTemplate !! input {{#invoke:test|testExpandTemplate}} !! resultx=1, y=2, z=|||
!! end !! test Scribunto: expandTemplate with headers !! input ==foo== {{#invoke:test|testExpandTemplateWithHeaders}} !! resultx=1, y=2, z=blah
!! end !! test Scribunto: preprocess !! input {{#invoke:test|testPreprocess|foo}} !! result1=foo|x=y
!! end !! test Scribunto: newParserValue !! input {{#invoke:test|testNewParserValue|foo}} !! result1=foo|x=y
!! end !! test Scribunto: table return !! input {{#invoke:test|emptyTable}} !! resulttable
!! end !! test Scribunto: require !! input {{#invoke:test|import}} !! result3
!! end !! test Scribunto: access to a module imported at the chunk level !! input {{#invoke:test|bitop}} !! result15
!! end !! test Scribunto: invoke instance upvalue isolation !! input {{#invoke:test|isolationTestUpvalue|1}} {{#invoke:test|isolationTestUpvalue|2}} {{#invoke:test|isolationTestUpvalue|3}} !! result1 2 3
!! end !! test Scribunto: invoke instance global isolation !! input {{#invoke:test|isolationTestGlobal|1}} {{#invoke:test|isolationTestGlobal|2}} {{#invoke:test|isolationTestGlobal|3}} !! result1 2 3
!! end !! test Scribunto: ASCII null !! input {{#invoke:test|null}} !! result�
!! end !! test Scribunto: isSubsting during PST !! options pst !! input {{safesubst:#invoke:test|isSubsting}} !! result true !! end !! test Scribunto: isSubsting during normal parse !! input {{safesubst:#invoke:test|isSubsting}} !! resultfalse
!! end !! test Scribunto: frame:getTitle !! input {{#invoke:test|getFrameTitle}} !! resultModule:Test
!! end !! test Scribunto: Metatable on export table !! input {{#invoke:Metatables|zero}} {{#invoke:Metatables|one}} {{#invoke:Metatables|two}} !! resultYou called the zero method from p You called the one method from mt1 You called the two method from mt2
!! end !! test Scribunto: Correct argument numbering with equals sign in function name !! input {{#invoke:test|test=InFunctionName|good|bad}} !! resultgood
!! end !! test Scribunto: Strip markers in CSS !! input {{#invoke:test|testStrippedCss|Root: Parent frame is the root: yes. Child frame is the root: no. Template: Parent frame is the root: no. Child frame is the root: no.
!! end