!! options
parsoid-compatible
version=2
!! end
# Force the test runner to ensure the extension is loaded
!! functionhooks
invoke
!! endfunctionhooks
!! 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\".
No further details are available.
" !! html/phpScript error: No such module "foo".
!! html/parsoidScript error: No such module "foo".
!! end !! test Scribunto: no such function !! options parsoid={ "modes": ["wt2html","wt2wt"] } cat extension=ScribuntoErrors-d64a22ba !! wikitext {{#invoke:test|blah}} !! metadata cat=Pages_with_script_errors sort= extension[ScribuntoErrors-d64a22ba]="Script error: The function \"blah\" does not exist.
No further details are available.
" !! html/phpScript error: The function "blah" does not exist.
!! html/parsoidScript error: The function "blah" does not exist.
!! end !! test Scribunto: hello world !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|hello}} !! htmlhello
!! end !! test Scribunto: redirect to hello world !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:redirected|hello}} {{#invoke:redirected "with" quotes|hello}} {{#invoke:redirected|testIsRedirect|Module:Redirected}} {{#invoke:redirected "with" quotes|testIsRedirect|Module:Test "with" quotes}} {{#invoke:redirected "with" quotes|testIsRedirect|Module:Redirected "with" quotes}} !! htmlhello hello redirects to Module:Test redirects to Module:Test redirects to Module:Test "with" quotes
!! end !! test Scribunto: getAllArgs !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|getAllArgs|x|y|z|a=1|b=2|c=3|7=?}} !! html1=x, 2=y, 3=z, 7=?, a=1, b=2, c=3
!! end !! test Scribunto: getAllArgs, deprecated style !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|getAllArgs2|x|y|z|a=1|b=2|c=3|7=?}} !! html1=x, 2=y, 3=z, 7=?, a=1, b=2, c=3
!! end !! test Scribunto: getNumericArgs !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|getNumericArgs|x|y|z|a=1|b=2|c=3|7=?}} !! html1=x, 2=y, 3=z
!! end !! test Scribunto: named numeric parameters !! options parsoid={ "modes": ["wt2html","wt2wt"] } !! wikitext {{#invoke:test|getArg|2|a|2=b}} {{#invoke:test|getArg|2|2=a|b}} !! html/phpb b
!! html/parsoidb b
!! end !! test Scribunto: template-style argument trimming !! options parsoid={ "modes": ["wt2html","wt2wt"] } !! wikitext {{#invoke:test|getArgLength|2| x }} {{#invoke:test|getArgLength|2|2= x }} !! html/php3 1
!! html/parsoid3 1
!! end !! test Scribunto: missing argument !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|getArgType|2}} {{#invoke:test|getArgType|blah}} !! htmlnil nil
!! end !! test Scribunto: parent frame access !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{Scribunto_all_args|x|y|z|a = 1|b = 2|c = 3}} !! html1=x, 2=y, 3=z, a=1, b=2, c=3
!! end !! test Scribunto: expandTemplate !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|testExpandTemplate}} !! htmlx=1, y=2, z=|||
!! end !! test Scribunto: expandTemplate with headers !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext ==foo== {{#invoke:test|testExpandTemplateWithHeaders}} !! htmlx=1, y=2, z=blah
!! end !! test Scribunto: preprocess !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|testPreprocess|foo}} !! html1=foo|x=y
!! end !! test Scribunto: newParserValue !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|testNewParserValue|foo}} !! html1=foo|x=y
!! end !! test Scribunto: table return !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|emptyTable}} !! htmltable
!! end !! test Scribunto: require !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|import}} !! html3
!! end !! test Scribunto: access to a module imported at the chunk level !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|bitop}} !! html15
!! end !! test Scribunto: invoke instance upvalue isolation !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|isolationTestUpvalue|1}} {{#invoke:test|isolationTestUpvalue|2}} {{#invoke:test|isolationTestUpvalue|3}} !! html1 2 3
!! end !! test Scribunto: invoke instance global isolation !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|isolationTestGlobal|1}} {{#invoke:test|isolationTestGlobal|2}} {{#invoke:test|isolationTestGlobal|3}} !! html1 2 3
!! end !! test Scribunto: ASCII null !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|null}} !! html�
!! end !! test Scribunto: isSubsting during PST !! options pst parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{safesubst:#invoke:test|isSubsting}} !! html true !! end !! test Scribunto: isSubsting during normal parse !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{safesubst:#invoke:test|isSubsting}} !! htmlfalse
!! end !! test Scribunto: frame:getTitle !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|getFrameTitle}} !! htmlModule:Test
!! end !! test Scribunto: Metatable on export table !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:Metatables|zero}} {{#invoke:Metatables|one}} {{#invoke:Metatables|two}} !! htmlYou 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 !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#invoke:test|test=InFunctionName|good|bad}} !! htmlgood
!! end !! test Scribunto: Strip markers in CSS !! options parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true } !! wikitext {{#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 # Tests for T272507 !! article Module:EchoTest !! text local p = {} function p.echo(frame) return frame.args[1] end return p !! end !! article Module:UnstripTest !! text local p = {} function p.unstrip(frame) return mw.text.nowiki(mw.text.unstripNoWiki(frame.args[1])) end return p !! end !! test Scribunto: Test unstripNowiki behavior !! options parsoid={ "modes": ["wt2html","wt2wt"] } !! wikitext {{#invoke:EchoTest|echo|foo [[Foo]]
foo [[Foo]]
!! html/parsoidfoo [[Foo]]
foo [[Foo]]
!! end