Module:LuaCall/testcases
This module is rated as alpha. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome. |
This module allows you to call any one single preinstalled Lua function, so that you don't need to write a module for one desired feature.
Usage
[ཞུན་དག]Main
[ཞུན་དག]{{#invoke:LuaCall|main|arbitrary variables|parameters|functioncall}}
The arbitrary variables are any key of your choice =
any value of your choice. Values are interpreted as strings unless tonumber(value)
isn't nil
, i.e. numbers should be converted to the numeric type. No effort is made to interpret tables.
The parameters all begin with reserved_
, which arbitrary variable should use.
reserved_return
sets which output from the function you want, and defaults to 1. For example, setting it to 2 for mw.ustring.gsub will return the number of replacements made.reserved_debug
- nonzero value forces display of a not particularly useful debug text
The functioncall is written as some.function.name(a,b,c)
where some.function.name means something in the Extension:Scribunto/Lua reference manual and a,b,c are the arbitrary variable names you've chosen.
Examples
[ཞུན་དག]Main
[ཞུན་དག]{{#invoke:LuaCall|main|a=test |b=7|string.rep(a,b)}}
→ test test test test test test test{{#invoke:LuaCall|main|pattern=(%a)|replace=%1.|string=I can't get no satisfaction|mw.ustring.gsub(string,pattern,replace)|reserved_return=1}}
→ I. c.a.n.'t. g.e.t. n.o. s.a.t.i.s.f.a.c.t.i.o.n.{{#invoke:LuaCall|main|pattern=(%a)|replace=%1.|string=I can't get no satisfaction|mw.ustring.gsub(string,pattern,replace)|reserved_return=2}}
→ 22{{#invoke:LuaCall|main|value=1.4512|math.ceil(value)}}
→ 2{{#invoke:LuaCall|main|value=1.4512|math.modf(value)}}
→ 1{{#invoke:LuaCall|main|value=1.4512|math.modf(value)|reserved_return=2}}
→ 0.4512{{#invoke:LuaCall|main|mw.text.nowiki(s)|s={{URL|1=https://www.Amazon.com/}}}}
→ <span class="url">[https://www.Amazon.com/ www<wbr/>.amazon<wbr/>.com]</span>
Call
[ཞུན་དག]{{#invoke:LuaCall|call|string.format|%04x|127}}
→ 007f{{#invoke:LuaCall|call|math.modf|1.4512}}
→ 1{{#invoke:LuaCall|call|math.modf|1.4512|return=2}}
→ 1
Errors
[ཞུན་དག]The module may generate script errors — whenever your call is not valid Lua code, you see the error you would normally have. For example,
{{#invoke:LuaCall|main|value=1.4512|math.fmod(value)}}
→
Lua error in Module:LuaCall at line 36: bad argument #2 to 'reserved_call' (number expected, got no value).
because the second value is lacking. No effort is made to trap these.
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
function suite:testmain()
self:assertResultEquals(
[=[_test test test test test test test ]=],
[=[{{#invoke:LuaCall|main|a=test |b=7|string.rep(a,b)}}]=],
"<code>"..mw.text.nowiki([=[{{#invoke:LuaCall|main|a=test |b=7|string.rep(a,b)}}]=].."</code>"))
self:assertResultEquals(
[=[_I. c.a.n.'t. g.e.t. n.o. s.a.t.i.s.f.a.c.t.i.o.n.]=],
[=[{{#invoke:LuaCall|main|pattern=(%a)|replace=%1.|string=I can't get no satisfaction|mw.ustring.gsub(string,pattern,replace)|reserved_return=1}}]=],
[=[<code><nowiki>{{#invoke:LuaCall|main|pattern=(%a)|replace=%1.|string=I can't get no satisfaction|mw.ustring.gsub(string,pattern,replace)|reserved_return=1}}</nowiki></code>]=])
self:assertResultEquals(
[=[_22]=],
[=[{{#invoke:LuaCall|main|pattern=(%a)|replace=%1.|string=I can't get no satisfaction|mw.ustring.gsub(string,pattern,replace)|reserved_return=2}}]=],
[=[<code><nowiki>{{#invoke:LuaCall|main|pattern=(%a)|replace=%1.|string=I can't get no satisfaction|mw.ustring.gsub(string,pattern,replace)|reserved_return=2}}</nowiki></code>]=])
self:assertResultEquals(
[=[_2]=],
[=[{{#invoke:LuaCall|main|value=1.4512|math.ceil(value)}}]=],
[=[<code><nowiki>{{#invoke:LuaCall|main|value=1.4512|math.ceil(value)}}</nowiki></code>]=])
self:assertResultEquals(
[=[_1]=],
[=[{{#invoke:LuaCall|main|value=1.4512|math.modf(value)}}]=],
[=[<code><nowiki>{{#invoke:LuaCall|main|value=1.4512|math.modf(value)}}</nowiki></code>]=])
self:assertResultEquals(
[=[_0.4512]=],
[=[{{#invoke:LuaCall|main|value=1.4512|math.modf(value)|reserved_return=2}}]=],
[=[<code><nowiki>{{#invoke:LuaCall|main|value=1.4512|math.modf(value)|reserved_return=2}}</nowiki></code>]=])
self:assertResultEquals(
[=[_181]=],
[=[{{#invoke:LuaCall|main|value=... that the '''[[Privacy and Civil Liberties Oversight Board report on mass surveillance]]''' recommended against imposing a [[data retention]] requirement on U.S. phone companies?|string.len(value)}}]=],
[=[<code><nowiki>{{#invoke:LuaCall|main|value=... that the '''[[Privacy and Civil Liberties Oversight Board report on mass surveillance]]''' recommended against imposing a [[data retention]] requirement on U.S. phone companies?|string.len(value)}}</nowiki></code>]=])
self:assertResultEquals(
[=[_bc]=],
[=[{{#invoke:LuaCall|main|value=abcd|start=2|end=3|string.sub(value,start,end)}}]=],
[=[For comparison with [[n:Template:Evalx]]: <code><nowiki>{{#invoke:LuaCall|main|value=abcd|start=2|end=3|string.sub(value,start,end)}}</nowiki></code>]=])
end
return suite