Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Humanipedia
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Module:UnitTests/doc
Module
Discussion
English
Read
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
UnitTests provides a unit test facility that can be used by other scripts using '''require'''. See [[Wikipedia:Lua#Unit_testing]] for details. The following is a sample from [[Module:Example/testcases]]: {{#tag:syntaxhighlight| -- Unit tests for [[Module:Example]]. Click talk page to run tests. local p = require('Module:UnitTests') function p:test_hello() self:preprocess_equals('<nowiki>{{#invoke:Example | hello}}</nowiki>', 'Hello World!') end return p |lang="lua"}} The talk page [[Module talk:Example/testcases]] executes it with <code><nowiki>{{#invoke: Example/testcases | run_tests}}</nowiki></code>. Test methods like test_hello above '''must begin with''' "'''test'''". == Methods == === run_tests === * {{code|1=run_tests}}: Runs all tests. Normally used on talk page of unit tests. <syntaxhighlight lang="wikitext"> {{#invoke:Example/testcases|run_tests}} </syntaxhighlight> * If {{code|1=differs_at}} is specified, a column will be added showing the first character position where the expected and actual results differ. <syntaxhighlight lang="wikitext"> {{#invoke:Example/testcases|run_tests|differs_at=1}} </syntaxhighlight> * If {{code|1=highlight}} is specified, failed tests will be highlighted to make them easier to spot. A [[WP:USERSCRIPT|user script]] that [[User:Fred_Gandt/moveFailedModuleTestsToTop.js|moves failed tests to the top]] is also available. <syntaxhighlight lang="wikitext"> {{#invoke:Example/testcases|run_tests|highlight=1}} </syntaxhighlight> * If {{code|1=live_sandbox}} is specified, the header will show the columns "Test", "Live", "Sandbox", "Expected". This is required when using the {{code|1=preprocess_equals_sandbox_many}} method. === preprocess_equals === * {{code|1=preprocess_equals(text, expected, options)}}: Gives a piece of wikitext to preprocess and an expected resulting value. Scripts and templates can be invoked in the same manner they would be in a page. <syntaxhighlight lang="lua"> self:preprocess_equals('{{#invoke:Example | hello}}', 'Hello, world!', {nowiki=1}) </syntaxhighlight> === preprocess_equals_many === * {{code|1=preprocess_equals_many(prefix, suffix, cases, options)}}: Performs a series of preprocess_equals() calls on a set of given pairs. Automatically adds the given prefix and suffix to each text. <syntaxhighlight lang="lua"> self:preprocess_equals_many('{{#invoke:Example | hello_to |', '}}', { {'John', 'Hello, John!'}, {'Jane', 'Hello, Jane!'}, }, {nowiki=1}) </syntaxhighlight> === preprocess_equals_preprocess === * {{code|1=preprocess_equals_preprocess(text, expected, options)}}: Gives two pieces of wikitext to preprocess and determines if they produce the same value. Useful for comparing scripts to existing templates. <syntaxhighlight lang="lua"> self:preprocess_equals_preprocess('{{#invoke:Example | hello}}', '{{Hello}}', {nowiki=1}) </syntaxhighlight> === preprocess_equals_preprocess_many === * {{code|1=preprocess_equals_preprocess_many(prefix1, suffix1, prefix2, suffix2, cases, options)}}: Performs a series of preprocess_equals_preprocess() calls on a set of given pairs. The prefix/suffix supplied for both arguments is added automatically. If in any case the second part is not specified, the first part will be used. <syntaxhighlight lang="lua"> self:preprocess_equals_preprocess_many('{{#invoke:ConvertNumeric | numeral_to_english|', '}}', '{{spellnum', '}}', { {'2'}, -- equivalent to {'2','2'}, {'-2', '-2.0'}, }, {nowiki=1}) </syntaxhighlight> === preprocess_equals_sandbox_many === * {{code|1=preprocess_equals_sandbox_many(module, function, cases, options)}}: Performs a series of preprocess_equals_compare() calls on a set of given pairs. The test compares the live version of the module vs the /sandbox version and vs an expected result. Ensure live_sandbox is specified or there may be some errors in the output. <syntaxhighlight lang="lua"> self:preprocess_equals_sandbox_many('{{#invoke:Example', 'hello_to', { {'John', 'Hello, John!'}, {'Jane', 'Hello, Jane!'}, }, {nowiki=1}) </syntaxhighlight> === equals === * {{code|1=equals(name, actual, expected, options)}}: Gives a computed value and the expected value, and checks if they are equal according to the == operator. Useful for testing modules that are designed to be used by other modules rather than using #invoke. <syntaxhighlight lang="lua"> self:equals('Simple addition', 2 + 2, 4, {nowiki=1}) </syntaxhighlight> === equals_deep === * {{code|1=equals_deep(name, actual, expected, options)}}: Like equals, but handles tables by doing a deep comparison. Neither value should contain circular references, as they are not handled by the current implementation and may result in an infinite loop. <syntaxhighlight lang="lua"> self:equals_deep('Table comparison', createRange(1,3), {1,2,3}, {nowiki=1}) </syntaxhighlight> == Test options == These are the valid options that can be passed into the options parameters of the test functions listed above. === nowiki === Enabling this wraps the output text in {{tag|nowiki}} tags to avoid the text being rendered (E.g. <nowiki><span>[[Example|Page]]</span></nowiki> instead of <span>[[Example|Page]]</span>) === combined === {{hatnote|Only available in <code>preprocess_equals</code> and <code>preprocess_equals_preprocess</code>}} Enabling this will display the output text in both the rendered mode and the nowiki mode to allow for both a raw text and visual comparison. === templatestyles === {{hatnote|Only available in <code>preprocess_equals</code> and <code>preprocess_equals_preprocess</code>}} Enabling this fixes the IDs in the [[mw:Strip marker|strip markers]] {{tag|templatestyles}} produces when processed to avoid incorrectly failing the tests. === stripmarker === {{hatnote|Only available in <code>preprocess_equals</code> and <code>preprocess_equals_preprocess</code>}} Enabling this fixes the IDs in ''all'' strip markers produces when processed to avoid incorrectly failing the tests. === display === {{hatnote|Only available in <code>equals</code>}} An optional function that changes how the output from the tests are displayed. This doesn't effect the comparison process. == See also == * [[Module:ScribuntoUnit]] β alternative unit test module <includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|| <!-- Categories go here and interwikis go in Wikidata. --> [[Category:Modules for test tools]] [[Category:Modules that check for strip markers]] }}</includeonly>
Summary:
Please note that all contributions to Humanipedia may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Humanipedia:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Code
(
edit
)
Template:Cross
(
edit
)
Template:Hatnote
(
edit
)
Template:Hello
(
edit
)
Template:Spellnum', '
(
edit
)
Template:Tag
(
edit
)
Template:Tick
(
edit
)
Module:Arguments
(
edit
)
Module:ConvertNumeric
(
edit
)
Module:Example
(
edit
)
Module:Example/testcases
(
edit
)
Module:Hatnote
(
edit
)
Module:Hatnote/styles.css
(
edit
)
Module:UnitTests
(
edit
)