CINXE.COM
ಮಾಡ್ಯೂಲ್:ScribuntoUnit - ವಿಕಿಪೀಡಿಯ
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available" lang="kn" dir="ltr"> <head> <meta charset="UTF-8"> <title>ಮಾಡ್ಯೂಲ್:ScribuntoUnit - ವಿಕಿಪೀಡಿಯ</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available";var cookie=document.cookie.match(/(?:^|; )knwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["0\t1\t2\t3\t4\t5\t6\t7\t8\t9","೦\t೧\t೨\t೩\t೪\t೫\t೬\t೭\t೮\t೯"],"wgDefaultDateFormat":"dmy","wgMonthNames":["","ಜನವರಿ","ಫೆಬ್ರವರಿ","ಮಾರ್ಚ್","ಏಪ್ರಿಲ್","ಮೇ","ಜೂನ್","ಜುಲೈ","ಆಗಸ್ಟ್","ಸೆಪ್ಟೆಂಬರ್","ಅಕ್ಟೋಬರ್","ನವೆಂಬರ್","ಡಿಸೆಂಬರ್"],"wgRequestId":"14f52260-73b6-4936-9269-c3d9d92d5353","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"ಮಾಡ್ಯೂಲ್:ScribuntoUnit","wgTitle":"ScribuntoUnit","wgCurRevisionId":1161032,"wgRevisionId":1161032,"wgArticleId":56937,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Pages using deprecated source tags"],"wgPageViewLanguage":"kn","wgPageContentLanguage":"kn","wgPageContentModel":"Scribunto","wgRelevantPageName":"ಮಾಡ್ಯೂಲ್:ScribuntoUnit","wgRelevantArticleId":56937,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q15427778","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false,"wgSiteNoticeId":"2.3"}; RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.dismissableSiteNotice.styles":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.switcher","ext.gadget.Link_Edit","ext.gadget.ProveIt","ext.gadget.refToolbar","ext.urlShortener.toolbar","ext.centralauth.centralautologin","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.shortUrl","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.dismissableSiteNotice"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=kn&modules=ext.dismissableSiteNotice.styles%7Cext.pygments%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=kn&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=kn&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.19"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="ಮಾಡ್ಯೂಲ್:ScribuntoUnit - ವಿಕಿಪೀಡಿಯ"> <meta property="og:type" content="website"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//kn.m.wikipedia.org/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit"> <link rel="alternate" type="application/x-wiki" title="ಸಂಪಾದಿಸಿ" href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="ವಿಕಿಪೀಡಿಯ (kn)"> <link rel="EditURI" type="application/rsd+xml" href="//kn.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://kn.wikipedia.org/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.kn"> <link rel="alternate" type="application/atom+xml" title="ವಿಕಿಪೀಡಿಯ ಅಣು ಫೀಡು" href="/w/index.php?title=%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject mw-editable page-ಮಾಡ್ಯೂಲ್_ScribuntoUnit rootpage-ಮಾಡ್ಯೂಲ್_ScribuntoUnit skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">ವಿಷಯಕ್ಕೆ ಹೋಗು</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" title="Main menu" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="ಪಟ್ಟಿ" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">ಪಟ್ಟಿ</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">ಪಟ್ಟಿ</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">ಮರೆ ಮಾಡಿ</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> ಸಂಚರಣೆ </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/%E0%B2%AE%E0%B3%81%E0%B2%96%E0%B3%8D%E0%B2%AF_%E0%B2%AA%E0%B3%81%E0%B2%9F" title="ಮುಖ್ಯ ಪುಟ ನೋಡಿ [z]" accesskey="z"><span>ಮುಖ್ಯ ಪುಟ</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%95%E0%B2%BF%E0%B2%AA%E0%B3%80%E0%B2%A1%E0%B2%BF%E0%B2%AF:%E0%B2%B8%E0%B2%AE%E0%B3%81%E0%B2%A6%E0%B2%BE%E0%B2%AF_%E0%B2%AA%E0%B3%81%E0%B2%9F" title="ಯೋಜನೆಯ ಬಗ್ಗೆ, ನೀವು ಏನು ಮಾಡಬಹುದು, ಎಲ್ಲಿ ಇದರ ಬಗ್ಗೆ ತಿಳಿದುಕೊಳ್ಳಬಹುದು"><span>ಸಮುದಾಯ ಪುಟ</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%95%E0%B2%BF%E0%B2%AA%E0%B3%80%E0%B2%A1%E0%B2%BF%E0%B2%AF:%E0%B2%AA%E0%B3%8D%E0%B2%B0%E0%B2%9A%E0%B2%B2%E0%B2%BF%E0%B2%A4_%E0%B2%B8%E0%B2%82%E0%B2%97%E0%B2%A4%E0%B2%BF%E0%B2%97%E0%B2%B3%E0%B3%81" title="ಪ್ರಸಕ್ತ ಆಗುಹೋಗುಗಳ ಬಗ್ಗೆ ಹಿನ್ನಲೆ ಮಾಹಿತಿ ಪಡೆಯಿರಿ"><span>ಪ್ರಚಲಿತ</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:RecentChanges" title="ವಿಕಿಯಲ್ಲಿನ ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳ ಪಟ್ಟಿ. [r]" accesskey="r"><span>ಇತ್ತೀಚೆಗಿನ ಬದಲಾವಣೆಗಳು</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:Random" title="ಯಾವುದಾದರು ಪುಟವೊಂದನ್ನು ತೋರಿಸು [x]" accesskey="x"><span>ಯಾವುದೋ ಒಂದು ಪುಟ</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/%E0%B2%B8%E0%B2%B9%E0%B2%BE%E0%B2%AF:%E0%B2%AA%E0%B2%B0%E0%B2%BF%E0%B2%B5%E0%B2%BF%E0%B2%A1%E0%B2%BF" title="ಇದರ ಬಗ್ಗೆ ತಿಳಿದುಕೊಳ್ಳಲು ಜಾಗ."><span>ಸಹಾಯ</span></a></li><li id="n-ಅರಳಿ-ಕಟ್ಟೆ" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%95%E0%B2%BF%E0%B2%AA%E0%B3%80%E0%B2%A1%E0%B2%BF%E0%B2%AF:%E0%B2%85%E0%B2%B0%E0%B2%B3%E0%B2%BF_%E0%B2%95%E0%B2%9F%E0%B3%8D%E0%B2%9F%E0%B3%86"><span>ಅರಳಿ ಕಟ್ಟೆ</span></a></li><li id="n-specialpages" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:SpecialPages"><span>ವಿಶೇಷ ಪುಟಗಳು</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/%E0%B2%AE%E0%B3%81%E0%B2%96%E0%B3%8D%E0%B2%AF_%E0%B2%AA%E0%B3%81%E0%B2%9F" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="ವಿಕಿಪೀಡಿಯ" src="/static/images/mobile/copyright/wikipedia-wordmark-kn.svg" style="width: 7.625em; height: 2.5em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="ವಿಕಿಪೀಡಿಯ ಅನ್ನು ಹುಡುಕಿ [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>ಹುಡುಕು</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="ವಿಕಿಪೀಡಿಯ ಅನ್ನು ಹುಡುಕಿ" aria-label="ವಿಕಿಪೀಡಿಯ ಅನ್ನು ಹುಡುಕಿ" autocapitalize="sentences" title="ವಿಕಿಪೀಡಿಯ ಅನ್ನು ಹುಡುಕಿ [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="ವಿಶೇಷ:Search"> </div> <button class="cdx-button cdx-search-input__end-button">ಹುಡುಕು</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="ವೈಯಕ್ತಿಕ ಉಪಕರಣಗಳು"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="ಗೋಚರ"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="ಗೋಚರ" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">ಗೋಚರ</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=kn.wikipedia.org&uselang=kn" class=""><span>ದೇಣಿಗೆ</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:CreateAccount&returnto=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D%3AScribuntoUnit" title="ನೀವು ಹೊಸ ಖಾತೆಯನ್ನು ತೆರೆದು ಲಾಗಿನ್ ಆಗುವುದನ್ನು ಹುರಿದುಂಬಿಸುತ್ತೇವೆ; ಆದಾಗ್ಯೂ, ಇದು ಅವಶ್ಯವೇನಲ್ಲ" class=""><span>ಹೊಸ ಖಾತೆ ತೆರೆಯಿರಿ</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:UserLogin&returnto=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D%3AScribuntoUnit" title="ನೀವು ಲಾಗ್ ಇನ್ ಆಗಬೇಕೆಂದು ಕೋರುತ್ತೇವೆ, ಆದರೆ ಅದು ಖಡ್ಡಾಯ ಎನೂ ಅಲ್ಲ. [o]" accesskey="o" class=""><span>ಲಾಗ್ ಇನ್</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="More options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="ವೈಯಕ್ತಿಕ ಉಪಕರಣಗಳು" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">ವೈಯಕ್ತಿಕ ಉಪಕರಣಗಳು</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=kn.wikipedia.org&uselang=kn"><span>ದೇಣಿಗೆ</span></a></li><li id="pt-contribute" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:Contribute"><span class="vector-icon mw-ui-icon-edit mw-ui-icon-wikimedia-edit"></span> <span>Contribute</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:CreateAccount&returnto=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D%3AScribuntoUnit" title="ನೀವು ಹೊಸ ಖಾತೆಯನ್ನು ತೆರೆದು ಲಾಗಿನ್ ಆಗುವುದನ್ನು ಹುರಿದುಂಬಿಸುತ್ತೇವೆ; ಆದಾಗ್ಯೂ, ಇದು ಅವಶ್ಯವೇನಲ್ಲ"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>ಹೊಸ ಖಾತೆ ತೆರೆಯಿರಿ</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:UserLogin&returnto=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D%3AScribuntoUnit" title="ನೀವು ಲಾಗ್ ಇನ್ ಆಗಬೇಕೆಂದು ಕೋರುತ್ತೇವೆ, ಆದರೆ ಅದು ಖಡ್ಡಾಯ ಎನೂ ಅಲ್ಲ. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>ಲಾಗ್ ಇನ್</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> ಲಾಗ್ ಔಟ್ ಆದ ಸಂಪಾದಕರಿಗೆ ಪುಟಗಳು <a href="/wiki/%E0%B2%B8%E0%B2%B9%E0%B2%BE%E0%B2%AF:Introduction" aria-label="Learn more about editing"><span>ಹೆಚ್ಚಿನ ಮಾಹಿತಿ</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anontalk" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:MyTalk" title="ಈ ip ವಿಳಾಸದಿಂದ ಮಾಡಲಾದ ಸಂಪಾದನೆಗಳ ಬಗ್ಗೆ ಚರ್ಚೆ [n]" accesskey="n"><span>IP ಚರ್ಚಾಪುಟ</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><div id="mw-dismissablenotice-anonplace"></div><script>(function(){var node=document.getElementById("mw-dismissablenotice-anonplace");if(node){node.outerHTML="\u003Cdiv class=\"mw-dismissable-notice\"\u003E\u003Cdiv class=\"mw-dismissable-notice-close\"\u003E[\u003Ca tabindex=\"0\" role=\"button\"\u003Eಮರೆಮಾಡಲು\u003C/a\u003E]\u003C/div\u003E\u003Cdiv class=\"mw-dismissable-notice-body\"\u003E\u003C!-- CentralNotice --\u003E\u003Cdiv id=\"localNotice\" data-nosnippet=\"\"\u003E\u003Cdiv class=\"anonnotice\" lang=\"kn\" dir=\"ltr\"\u003E\u003Ctable style=\"background-color: #FFFFC2; color: #333; width: 100%; border: 2px solid #FFF; padding: 5px;\"\u003E\n\u003Ctbody\u003E\u003Ctr\u003E\n\u003Ctd colspan=\"2\" align=\"center\" style=\"text-align:center\"\u003Eಬರೆಯುವಾಗ ಕೀಲಿಮಣೆ ಐಕಾನ್ ಒತ್ತಿ ಕನ್ನಡ ಆಯ್ದುಕೊಳ್ಳುವುದರ ಅಥವಾ Ctrl+M ಒತ್ತುವುದರ ಮೂಲಕ ಈಗ ನೇರವಾಗಿ ಕನ್ನಡದಲ್ಲಿ ಬರೆಯಬಹುದು! ವಿವರಗಳಿಗೆ \u003Ca href=\"/wiki/%E0%B2%B8%E0%B2%B9%E0%B2%BE%E0%B2%AF:%E0%B2%B2%E0%B2%BF%E0%B2%AA%E0%B3%8D%E0%B2%AF%E0%B2%82%E0%B2%A4%E0%B2%B0\" title=\"ಸಹಾಯ:ಲಿಪ್ಯಂತರ\"\u003Eಈ ಪುಟ ನೋಡಿ.\u003C/a\u003E\n\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E";}}());</script></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="ಪರಿವಿಡಿ" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">ಪರಿವಿಡಿ</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">ಮರೆ ಮಾಡಿ</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">ಮುನ್ನುಡಿ</div> </a> </li> <li id="toc-Test_module_structure" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Test_module_structure"> <div class="vector-toc-text"> <span class="vector-toc-numb">೧</span> <span>Test module structure</span> </div> </a> <ul id="toc-Test_module_structure-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Running_the_tests" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Running_the_tests"> <div class="vector-toc-text"> <span class="vector-toc-numb">೨</span> <span>Running the tests</span> </div> </a> <ul id="toc-Running_the_tests-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Tests" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Tests"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩</span> <span>Tests</span> </div> </a> <button aria-controls="toc-Tests-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Tests subsection</span> </button> <ul id="toc-Tests-sublist" class="vector-toc-list"> <li id="toc-Error_messages" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Error_messages"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೧</span> <span>Error messages</span> </div> </a> <ul id="toc-Error_messages-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-assertTrue,_assertFalse" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#assertTrue,_assertFalse"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೨</span> <span>assertTrue, assertFalse</span> </div> </a> <ul id="toc-assertTrue,_assertFalse-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-assertStringContains" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#assertStringContains"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೩</span> <span>assertStringContains</span> </div> </a> <ul id="toc-assertStringContains-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-assertNotStringContains" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#assertNotStringContains"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೪</span> <span>assertNotStringContains</span> </div> </a> <ul id="toc-assertNotStringContains-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-assertEquals" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#assertEquals"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೫</span> <span>assertEquals</span> </div> </a> <ul id="toc-assertEquals-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-assertWithinDelta" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#assertWithinDelta"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೬</span> <span>assertWithinDelta</span> </div> </a> <ul id="toc-assertWithinDelta-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-assertDeepEquals" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#assertDeepEquals"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೭</span> <span>assertDeepEquals</span> </div> </a> <ul id="toc-assertDeepEquals-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-assertTemplateEquals" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#assertTemplateEquals"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೮</span> <span>assertTemplateEquals</span> </div> </a> <ul id="toc-assertTemplateEquals-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-assertResultEquals" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#assertResultEquals"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೯</span> <span>assertResultEquals</span> </div> </a> <ul id="toc-assertResultEquals-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-assertSameResult" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#assertSameResult"> <div class="vector-toc-text"> <span class="vector-toc-numb">೩.೧೦</span> <span>assertSameResult</span> </div> </a> <ul id="toc-assertSameResult-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">೪</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="ಪರಿವಿಡಿ" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" title="Table of Contents" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">ಮಾಡ್ಯೂಲ್</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">ScribuntoUnit</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="ಇನ್ನೊಂದು ಭಾಷೆಯ ಲೇಖನಕ್ಕೆ ಹೋಗಿ. ೩೦ ಭಾಷೆಗಳಲ್ಲಿ ಲಭ್ಯವಿದೆ" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-30" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">೩೦ ಭಾಷೆಗಳು</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D9%88%D8%AD%D8%AF%D8%A9:ScribuntoUnit" title="وحدة:ScribuntoUnit – ಅರೇಬಿಕ್" lang="ar" hreflang="ar" data-title="وحدة:ScribuntoUnit" data-language-autonym="العربية" data-language-local-name="ಅರೇಬಿಕ್" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-arz mw-list-item"><a href="https://arz.wikipedia.org/wiki/%D9%88%D8%AD%D8%AF%D8%A9:ScribuntoUnit" title="وحدة:ScribuntoUnit – Egyptian Arabic" lang="arz" hreflang="arz" data-title="وحدة:ScribuntoUnit" data-language-autonym="مصرى" data-language-local-name="Egyptian Arabic" class="interlanguage-link-target"><span>مصرى</span></a></li><li class="interlanguage-link interwiki-ban mw-list-item"><a href="https://ban.wikipedia.org/wiki/Modul:ScribuntoUnit" title="Modul:ScribuntoUnit – ಬಲಿನೀಸ್" lang="ban" hreflang="ban" data-title="Modul:ScribuntoUnit" data-language-autonym="Basa Bali" data-language-local-name="ಬಲಿನೀಸ್" class="interlanguage-link-target"><span>Basa Bali</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:ScribuntoUnit" title="Модул:ScribuntoUnit – ಬಲ್ಗೇರಿಯನ್" lang="bg" hreflang="bg" data-title="Модул:ScribuntoUnit" data-language-autonym="Български" data-language-local-name="ಬಲ್ಗೇರಿಯನ್" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/Modul:ScribuntoUnit" title="Modul:ScribuntoUnit – ಬೋಸ್ನಿಯನ್" lang="bs" hreflang="bs" data-title="Modul:ScribuntoUnit" data-language-autonym="Bosanski" data-language-local-name="ಬೋಸ್ನಿಯನ್" class="interlanguage-link-target"><span>Bosanski</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Modul:ScribuntoUnit" title="Modul:ScribuntoUnit – ಜೆಕ್" lang="cs" hreflang="cs" data-title="Modul:ScribuntoUnit" data-language-autonym="Čeština" data-language-local-name="ಜೆಕ್" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Modul:ScribuntoUnit" title="Modul:ScribuntoUnit – ಡ್ಯಾನಿಶ್" lang="da" hreflang="da" data-title="Modul:ScribuntoUnit" data-language-autonym="Dansk" data-language-local-name="ಡ್ಯಾನಿಶ್" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Module:ScribuntoUnit" title="Module:ScribuntoUnit – ಇಂಗ್ಲಿಷ್" lang="en" hreflang="en" data-title="Module:ScribuntoUnit" data-language-autonym="English" data-language-local-name="ಇಂಗ್ಲಿಷ್" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:ScribuntoUnit" title="پودمان:ScribuntoUnit – ಪರ್ಶಿಯನ್" lang="fa" hreflang="fa" data-title="پودمان:ScribuntoUnit" data-language-autonym="فارسی" data-language-local-name="ಪರ್ಶಿಯನ್" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Modul:ScribuntoUnit" title="Modul:ScribuntoUnit – ಹಂಗೇರಿಯನ್" lang="hu" hreflang="hu" data-title="Modul:ScribuntoUnit" data-language-autonym="Magyar" data-language-local-name="ಹಂಗೇರಿಯನ್" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Modul:ScribuntoUnit" title="Modul:ScribuntoUnit – ಇಂಡೋನೇಶಿಯನ್" lang="id" hreflang="id" data-title="Modul:ScribuntoUnit" data-language-autonym="Bahasa Indonesia" data-language-local-name="ಇಂಡೋನೇಶಿಯನ್" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-ilo mw-list-item"><a href="https://ilo.wikipedia.org/wiki/Modulo:ScribuntoUnit" title="Modulo:ScribuntoUnit – ಇಲ್ಲಿಕೋ" lang="ilo" hreflang="ilo" data-title="Modulo:ScribuntoUnit" data-language-autonym="Ilokano" data-language-local-name="ಇಲ್ಲಿಕೋ" class="interlanguage-link-target"><span>Ilokano</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Modulo:ScribuntoUnit" title="Modulo:ScribuntoUnit – ಇಟಾಲಿಯನ್" lang="it" hreflang="it" data-title="Modulo:ScribuntoUnit" data-language-autonym="Italiano" data-language-local-name="ಇಟಾಲಿಯನ್" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:ScribuntoUnit" title="モジュール:ScribuntoUnit – ಜಾಪನೀಸ್" lang="ja" hreflang="ja" data-title="モジュール:ScribuntoUnit" data-language-autonym="日本語" data-language-local-name="ಜಾಪನೀಸ್" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%93%88:ScribuntoUnit" title="모듈:ScribuntoUnit – ಕೊರಿಯನ್" lang="ko" hreflang="ko" data-title="모듈:ScribuntoUnit" data-language-autonym="한국어" data-language-local-name="ಕೊರಿಯನ್" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/Module:ScribuntoUnit" title="Module:ScribuntoUnit – ಲಿಥುವೇನಿಯನ್" lang="lt" hreflang="lt" data-title="Module:ScribuntoUnit" data-language-autonym="Lietuvių" data-language-local-name="ಲಿಥುವೇನಿಯನ್" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Modulis:ScribuntoUnit" title="Modulis:ScribuntoUnit – ಲಾಟ್ವಿಯನ್" lang="lv" hreflang="lv" data-title="Modulis:ScribuntoUnit" data-language-autonym="Latviešu" data-language-local-name="ಲಾಟ್ವಿಯನ್" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Modul:ScribuntoUnit" title="Modul:ScribuntoUnit – ನಾರ್ವೆಜಿಯನ್ ಬೊಕ್ಮಲ್" lang="nb" hreflang="nb" data-title="Modul:ScribuntoUnit" data-language-autonym="Norsk bokmål" data-language-local-name="ನಾರ್ವೆಜಿಯನ್ ಬೊಕ್ಮಲ್" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/M%C3%B3dulo:ScribuntoUnit" title="Módulo:ScribuntoUnit – ಪೋರ್ಚುಗೀಸ್" lang="pt" hreflang="pt" data-title="Módulo:ScribuntoUnit" data-language-autonym="Português" data-language-local-name="ಪೋರ್ಚುಗೀಸ್" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:ScribuntoUnit" title="Модуль:ScribuntoUnit – ರಷ್ಯನ್" lang="ru" hreflang="ru" data-title="Модуль:ScribuntoUnit" data-language-autonym="Русский" data-language-local-name="ರಷ್ಯನ್" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-shn mw-list-item"><a href="https://shn.wikipedia.org/wiki/%E1%80%99%E1%80%B1%E1%82%83%E1%82%87%E1%81%B5%E1%80%BB%E1%80%B0%E1%80%B8:ScribuntoUnit" title="မေႃႇၵျူး:ScribuntoUnit – ಶಾನ್" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:ScribuntoUnit" data-language-autonym="တႆး" data-language-local-name="ಶಾನ್" class="interlanguage-link-target"><span>တႆး</span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wikipedia.org/wiki/Module:ScribuntoUnit" title="Module:ScribuntoUnit – ಸಿಂಹಳ" lang="si" hreflang="si" data-title="Module:ScribuntoUnit" data-language-autonym="සිංහල" data-language-local-name="ಸಿಂಹಳ" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Module:ScribuntoUnit" title="Module:ScribuntoUnit – Simple English" lang="en-simple" hreflang="en-simple" data-title="Module:ScribuntoUnit" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Modul:ScribuntoUnit" title="Modul:ScribuntoUnit – ಸ್ಲೋವೇನಿಯನ್" lang="sl" hreflang="sl" data-title="Modul:ScribuntoUnit" data-language-autonym="Slovenščina" data-language-local-name="ಸ್ಲೋವೇನಿಯನ್" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:ScribuntoUnit" title="Модул:ScribuntoUnit – ಸೆರ್ಬಿಯನ್" lang="sr" hreflang="sr" data-title="Модул:ScribuntoUnit" data-language-autonym="Српски / srpski" data-language-local-name="ಸೆರ್ಬಿಯನ್" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A1%E0%B8%AD%E0%B8%94%E0%B8%B9%E0%B8%A5:ScribuntoUnit" title="มอดูล:ScribuntoUnit – ಥಾಯ್" lang="th" hreflang="th" data-title="มอดูล:ScribuntoUnit" data-language-autonym="ไทย" data-language-local-name="ಥಾಯ್" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:ScribuntoUnit" title="Модуль:ScribuntoUnit – ಉಕ್ರೇನಿಯನ್" lang="uk" hreflang="uk" data-title="Модуль:ScribuntoUnit" data-language-autonym="Українська" data-language-local-name="ಉಕ್ರೇನಿಯನ್" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/M%C3%B4_%C4%91un:ScribuntoUnit" title="Mô đun:ScribuntoUnit – ವಿಯೆಟ್ನಾಮೀಸ್" lang="vi" hreflang="vi" data-title="Mô đun:ScribuntoUnit" data-language-autonym="Tiếng Việt" data-language-local-name="ವಿಯೆಟ್ನಾಮೀಸ್" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Module:ScribuntoUnit" title="Module:ScribuntoUnit – ಚೈನೀಸ್" lang="zh" hreflang="zh" data-title="Module:ScribuntoUnit" data-language-autonym="中文" data-language-local-name="ಚೈನೀಸ್" class="interlanguage-link-target"><span>中文</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:ScribuntoUnit" title="模組:ScribuntoUnit – ಕ್ಯಾಂಟನೀಸ್" lang="yue" hreflang="yue" data-title="模組:ScribuntoUnit" data-language-autonym="粵語" data-language-local-name="ಕ್ಯಾಂಟನೀಸ್" class="interlanguage-link-target"><span>粵語</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q15427778#sitelinks-wikipedia" title="ಇತರ ಭಾಷಾ ಕೊಂಡಿಗಳನ್ನು ಸಂಪಾದಿಸು" class="wbc-editpage">ಕೊಂಡಿಗಳನ್ನು ಸಂಪಾದಿಸಿ</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="ನಾಮವರ್ಗಗಳು"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-module" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit" title="View the module page [c]" accesskey="c"><span>Module</span></a></li><li id="ca-talk" class="new vector-tab-noicon mw-list-item"><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D_%E0%B2%9A%E0%B2%B0%E0%B3%8D%E0%B2%9A%E0%B3%86%E0%B2%AA%E0%B3%81%E0%B2%9F:ScribuntoUnit&action=edit&redlink=1" rel="discussion" class="new" title="ಮಾಹಿತಿ ಪುಟದ ಬಗ್ಗೆ ಚರ್ಚೆ (ಪುಟವು ಇನ್ನೂ ಸೃಷ್ಟಿತವಾಗಿಲ್ಲ) [t]" accesskey="t"><span>ಚರ್ಚೆ</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="ಭಾಷಾ ರೂಪಾಂತರವನ್ನು ಬದಲಾಯಿಸಿ" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="ನೋಟಗಳು"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit"><span>ಓದು</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit&action=edit" title="ಈ ಪುಟದ ಸೋರ್ಸ್ ಕೋಡ್ ಸಂಪಾದಿಸಿ [e]" accesskey="e"><span>ಮೂಲವನ್ನು ಸಂಪಾದಿಸು</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit&action=history" title="ಈ ಪುಟದ ಹಳೆಯ ಆವೃತ್ತಿಗಳು. [h]" accesskey="h"><span>ಇತಿಹಾಸವನ್ನು ನೋಡಿ</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="ಉಪಕರಣಗಳು" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">ಉಪಕರಣಗಳು</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">ಉಪಕರಣಗಳು</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">ಮರೆ ಮಾಡಿ</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit"><span>ಓದು</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit&action=edit" title="ಈ ಪುಟದ ಸೋರ್ಸ್ ಕೋಡ್ ಸಂಪಾದಿಸಿ [e]" accesskey="e"><span>ಮೂಲವನ್ನು ಸಂಪಾದಿಸು</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit&action=history"><span>ಇತಿಹಾಸವನ್ನು ನೋಡಿ</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> ಸಾಮಾನ್ಯ </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:WhatLinksHere/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit" title="ಇಲ್ಲಿಗೆ ಸಂಪರ್ಕ ಹೊಂದಿರುವ ಎಲ್ಲಾ ವಿಕಿ ಪುಟಗಳ ಪಟ್ಟಿ [j]" accesskey="j"><span>ಇಲ್ಲಿಗೆ ಯಾವ ಸಂಪರ್ಕ ಕೂಡುತ್ತದೆ</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:RecentChangesLinked/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit" rel="nofollow" title="ಈ ಪುಟದಿಂದ ಸಂಪರ್ಕ ಹೊಂದಿರುವ ಪುಟಗಳಲ್ಲಿನ ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳು [k]" accesskey="k"><span>ಸಂಬಂಧಪಟ್ಟ ಬದಲಾವಣೆಗಳು</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit&oldid=1161032" title="ಪುಟದ ಈ ಆವೃತ್ತಿಗೆ ಶಾಶ್ವತ ಕೊಂಡಿ"><span>ಸ್ಥಿರ ಕೊಂಡಿ</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit&action=info" title="ಈ ಪುಟದ ಕುರಿತ ಹೆಚ್ಚಿನ ಮಾಹಿತಿ"><span>ಪುಟದ ಮಾಹಿತಿ</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:UrlShortener&url=https%3A%2F%2Fkn.wikipedia.org%2Fwiki%2F%25E0%25B2%25AE%25E0%25B2%25BE%25E0%25B2%25A1%25E0%25B3%258D%25E0%25B2%25AF%25E0%25B3%2582%25E0%25B2%25B2%25E0%25B3%258D%3AScribuntoUnit"><span>ಪುಟ್ಟ ಕೊಂಡಿ</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:QrCode&url=https%3A%2F%2Fkn.wikipedia.org%2Fwiki%2F%25E0%25B2%25AE%25E0%25B2%25BE%25E0%25B2%25A1%25E0%25B3%258D%25E0%25B2%25AF%25E0%25B3%2582%25E0%25B2%25B2%25E0%25B3%258D%3AScribuntoUnit"><span>ಕ್ಯೂಆರ್ ಚಿತ್ರ ಇಳಿಸಿಕೊಳ್ಳಿ.</span></a></li><li id="t-shorturl" class="mw-list-item"><a href="//kn.wikipedia.org/s/128f" title="Copy this short link for sharing"><span>ಸಣ್ಣ ಯು.ಆರ್.ಎಲ್</span></a></li> </ul> </div> </div> <div id="p-electronpdfservice-sidebar-portlet-heading" class="vector-menu mw-portlet mw-portlet-electronpdfservice-sidebar-portlet-heading" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="electron-print_pdf" class="mw-list-item"><a href="/w/index.php?title=%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:DownloadAsPdf&page=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D%3AScribuntoUnit&action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="javascript:print();" rel="alternate" title="ಈ ಪುಟದ ಮುದ್ರಣ ಮಾಡಬಹುದಾದಂತ ಆವೃತ್ತಿ [p]" accesskey="p"><span>ಮುದ್ರಣ ಆವೃತ್ತಿ</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> ಇತರೆ ಯೋಜನೆಗಳಲ್ಲಿ </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Module:ScribuntoUnit" hreflang="en"><span>ವಿಕಿಮೀಡಿಯಾ ಕಾಮನ್ಸ್</span></a></li><li class="wb-otherproject-link wb-otherproject-mediawiki mw-list-item"><a href="https://www.mediawiki.org/wiki/Module:ScribuntoUnit" hreflang="en"><span>ಮೀಡಿಯಾವಿಕಿ</span></a></li><li class="wb-otherproject-link wb-otherproject-meta mw-list-item"><a href="https://meta.wikimedia.org/wiki/Module:ScribuntoUnit" hreflang="en"><span>ಮೆಟಾ-ವಿಕಿ</span></a></li><li class="wb-otherproject-link wb-otherproject-outreach mw-list-item"><a href="https://outreach.wikimedia.org/wiki/Module:ScribuntoUnit" hreflang="en"><span>Wikimedia Outreach</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q15427778" title="ಸಂಪರ್ಕ ಮಾಹಿತಿ ಸಂಗ್ರಹ ಐಟಂಗೆ ಲಿಂಕ್ ಮಾಡಿ [g]" accesskey="g"><span>ವಿಕಿಡಾಟಾ ವಸ್ತು</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="ಗೋಚರ"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">ಗೋಚರ</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">ಮರೆ ಮಾಡಿ</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">ವಿಕಿಪೀಡಿಯದಿಂದ, ಇದು ಮುಕ್ತ ಹಾಗೂ ಸ್ವತಂತ್ರ ವಿಶ್ವಕೋಶ</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="kn" dir="ltr"><p>This module provides <a href="/w/index.php?title=Unit_test&action=edit&redlink=1" class="new" title="Unit test (ಪುಟವು ಇನ್ನೂ ಸೃಷ್ಟಿತವಾಗಿಲ್ಲ)">unit tests</a> for other <a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%95%E0%B2%BF%E0%B2%AA%E0%B3%80%E0%B2%A1%E0%B2%BF%E0%B2%AF:Lua" title="ವಿಕಿಪೀಡಿಯ:Lua">Lua</a> modules. To test a module, you must create a separate test module, usually located at <code>Module:<i>Module name</i>/testcases</code>. The module is tested with the ScribuntoUnit module, which verifies that the operations defined in the test module produce the expected results. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Test_module_structure">Test module structure</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-1" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: Test module structure"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>To make a test module (test suite), start with the following code: </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">myModule</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Module:MyModule'</span><span class="p">)</span> <span class="c1">-- the module to be tested</span> <span class="kd">local</span> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Module:ScribuntoUnit'</span><span class="p">)</span> <span class="kd">local</span> <span class="n">suite</span> <span class="o">=</span> <span class="n">ScribuntoUnit</span><span class="p">:</span><span class="n">new</span><span class="p">()</span> </pre></div> <p>After you have done this you can add individual test functions to the <code>suite</code> object. Any function that begins with <code>test</code> is treated as a test. (Other functions will be ignored by ScribuntoUnit, but can be used in the tests themselves.) </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">function</span> <span class="nc">suite</span><span class="p">:</span><span class="nf">testSomeCall</span><span class="p">()</span> <span class="n">self</span><span class="p">:</span><span class="n">assertEquals</span><span class="p">(</span><span class="s1">'expected value'</span><span class="p">,</span> <span class="n">myModule</span><span class="p">.</span><span class="n">someCall</span><span class="p">(</span><span class="mi">123</span><span class="p">))</span> <span class="n">self</span><span class="p">:</span><span class="n">assertEquals</span><span class="p">(</span><span class="s1">'other expected value'</span><span class="p">,</span> <span class="n">myModule</span><span class="p">.</span><span class="n">someCall</span><span class="p">(</span><span class="mi">456</span><span class="p">))</span> <span class="kr">end</span> <span class="kr">function</span> <span class="nc">suite</span><span class="p">:</span><span class="nf">testSomeOtherCall</span><span class="p">()</span> <span class="n">self</span><span class="p">:</span><span class="n">assertEquals</span><span class="p">(</span><span class="s1">'expected value'</span><span class="p">,</span> <span class="n">myModule</span><span class="p">.</span><span class="n">someOtherCall</span><span class="p">(</span><span class="mi">123</span><span class="p">))</span> <span class="n">self</span><span class="p">:</span><span class="n">assertEquals</span><span class="p">(</span><span class="s1">'other expected value'</span><span class="p">,</span> <span class="n">myModule</span><span class="p">.</span><span class="n">someOtherCall</span><span class="p">(</span><span class="mi">456</span><span class="p">))</span> <span class="kr">end</span> </pre></div> <p>The tests you write should make assertions, and ScribuntoUnit will check whether those assertions are true. For example, <code>assertEquals</code> checks that both of the arguments it is given are equal. If ScribuntoUnit doesn't find an assertion to be true, then the test will fail and an error message will be generated. The error message will show which assertion failed verification (other checks on the assertions are not made at this time). </p><p>To finish the test module, you need to return the <code>suite</code> object. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">return</span> <span class="n">suite</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="Running_the_tests">Running the tests</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-2" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: Running the tests"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The tests can be run in two ways: through the Lua debug console, and from a wiki page using #invoke. If you are running the tests through the debug console, use the code <code>require('Module:MyModule/tests').run()</code>. If you are running them from a wiki page, use the code <code>{{#invoke:MyModule/tests|run}}</code>. This will generate a table containing the results. It is also possible to display a more compact table by using the code <code>{{#invoke:MyModule/tests|run|displayMode=short}}</code>. </p> <div class="mw-heading mw-heading2"><h2 id="Tests">Tests</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-3" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: Tests"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Error_messages">Error messages</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-4" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: Error messages"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The last parameter of all the test methods is an message that is displayed if validation fails. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertEquals</span><span class="p">(</span><span class="s1">'expected value'</span><span class="p">,</span> <span class="n">myModule</span><span class="p">.</span><span class="n">someCall</span><span class="p">(</span><span class="mi">123</span><span class="p">),</span> <span class="s1">'This tests whether the function x does y.'</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="assertTrue,_assertFalse"><span id="assertTrue.2C_assertFalse"></span>assertTrue, assertFalse</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-5" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: assertTrue, assertFalse"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> <span class="n">self</span><span class="p">:</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </pre></div> <p>These test whether the assertion evaluates to <code>true</code> or <code>false</code>. Note that in Lua <code>false</code> and <code>nil</code> evaluate to <code>false</code>, and everything else evaluates to <code>true</code>. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertTrue</span><span class="p">(</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">4</span><span class="p">)</span> <span class="n">self</span><span class="p">:</span><span class="n">assertTrue</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">)</span> <span class="n">self</span><span class="p">:</span><span class="n">assertFalse</span><span class="p">(</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">5</span><span class="p">)</span> <span class="n">self</span><span class="p">:</span><span class="n">assertFalse</span><span class="p">(</span><span class="kc">nil</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="assertStringContains">assertStringContains</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-6" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: assertStringContains"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertStringContains</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">plain</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </pre></div> <p>This tests whether <code>pattern</code> is found in the string <code>s</code>. If <code>plain</code> is true, then <code>pattern</code> is interpreted as literal text; otherwise, <code>pattern</code> is interpreted as a <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">ustring pattern</a>. </p><p>If the string is not found, the error message shows the values of <code>pattern</code> and <code>s</code>; if <code>s</code> is more than 70 characters long then a truncated version is displayed. This method is useful for testing specific behaviours in complex wikitext. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertStringContains</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">,</span> <span class="s2">"foobar"</span><span class="p">)</span> <span class="c1">-- passes</span> <span class="n">self</span><span class="p">:</span><span class="n">assertStringContains</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">,</span> <span class="s2">"fobar"</span><span class="p">)</span> <span class="c1">-- fails</span> <span class="n">self</span><span class="p">:</span><span class="n">assertStringContains</span><span class="p">(</span><span class="s2">".oo"</span><span class="p">,</span> <span class="s2">"foobar"</span><span class="p">)</span> <span class="c1">-- passes: matches "foo"</span> <span class="n">self</span><span class="p">:</span><span class="n">assertStringContains</span><span class="p">(</span><span class="s2">".oo"</span><span class="p">,</span> <span class="s2">"foobar"</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="c1">-- fails: . is interpreted as a literal character</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="assertNotStringContains">assertNotStringContains</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-7" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: assertNotStringContains"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertNotStringContains</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">plain</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </pre></div> <p>This is the opposite of <code>assertStringContains</code>. The test will fail if <code>pattern</code> is found in the string <code>s</code>. If <code>plain</code> is true, then <code>pattern</code> is interpreted as literal text; otherwise, <code>pattern</code> is interpreted as a <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">ustring pattern</a>. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertStringContains</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">,</span> <span class="s2">"foobar"</span><span class="p">)</span> <span class="c1">-- fails</span> <span class="n">self</span><span class="p">:</span><span class="n">assertStringContains</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">,</span> <span class="s2">"fobar"</span><span class="p">)</span> <span class="c1">-- passes</span> <span class="n">self</span><span class="p">:</span><span class="n">assertStringContains</span><span class="p">(</span><span class="s2">".oo"</span><span class="p">,</span> <span class="s2">"foobar"</span><span class="p">)</span> <span class="c1">-- fails: matches "foo"</span> <span class="n">self</span><span class="p">:</span><span class="n">assertStringContains</span><span class="p">(</span><span class="s2">".oo"</span><span class="p">,</span> <span class="s2">"foobar"</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="c1">-- passes: . is interpreted as a literal character</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="assertEquals">assertEquals</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-8" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: assertEquals"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertEquals</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">actual</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </pre></div> <p>This tests whether the first parameter is equal to the second parameter. If both parameters are numbers, the values are instead compared using <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">assertWithinDelta</code> with delta 1e-8 (0.00000001) since numbers are represented as <a href="/w/index.php?title=Floating_point&action=edit&redlink=1" class="new" title="Floating point (ಪುಟವು ಇನ್ನೂ ಸೃಷ್ಟಿತವಾಗಿಲ್ಲ)">floating points</a> with limited precision. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertEquals</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">calculator</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="assertWithinDelta">assertWithinDelta</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-9" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: assertWithinDelta"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertWithinDelta</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">actual</span><span class="p">,</span> <span class="n">delta</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </pre></div> <p>For two numbers, this tests whether the first is within a given distance (delta) from the second. This is useful to compare <a href="/w/index.php?title=Floating_point&action=edit&redlink=1" class="new" title="Floating point (ಪುಟವು ಇನ್ನೂ ಸೃಷ್ಟಿತವಾಗಿಲ್ಲ)">floating point</a> numbers, which are used to represent numbers in the standard installation of Lua. (To be precise, it uses <a href="/w/index.php?title=Double-precision_floating_point&action=edit&redlink=1" class="new" title="Double-precision floating point (ಪುಟವು ಇನ್ನೂ ಸೃಷ್ಟಿತವಾಗಿಲ್ಲ)">double-precision floating point</a> numbers.) For example, on the version of Scribunto installed on the English Wikipedia, the expression <code>0.3 – 0.2 == 0.1</code> evaluates to <code>false</code>. This is because in practice, the expression <code>0.3 – 0.2</code> equals <code>0.09999999999999997780…</code> and the number <code>0.1</code> equals <code>0.10000000000000000555…</code>. The slight error between the two means that Lua does not consider them equal. Therefore, to test for equality between two floating point numbers, we should accept values within a small distance (delta) of each other, not just equal values. Note that this problem does not affect integers, which can be represented exactly using double-precision floating point numbers up to values of 2^53. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertWithinDelta</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">calculator</span><span class="p">.</span><span class="n">subtract</span><span class="p">(</span><span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">),</span> <span class="mf">1e-10</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="assertDeepEquals">assertDeepEquals</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-10" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: assertDeepEquals"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertDeepEquals</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">actual</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </pre></div> <p>This tests whether the first parameter is equal to the second parameter. If the parameters are tables, they are compared recursively, and their <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Metatables" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">__eq metamethods</a> are respected. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertDeepEquals</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="assertTemplateEquals">assertTemplateEquals</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-11" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: assertTemplateEquals"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertTemplateEquals</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </pre></div> <p>This tests whether the first parameter equals a template call. The second parameter is the template name, and the third parameter is a table of the template arguments. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertTemplateEquals</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="s1">'add'</span><span class="p">,</span> <span class="p">{</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">})</span> <span class="c1">-- true if {{add|2|2}} equals 4</span> </pre></div> <p>Note that some tags written in XML notation cannot be tested correctly; see the note for the <code>assertResultEquals</code> function below. </p> <div class="mw-heading mw-heading3"><h3 id="assertResultEquals">assertResultEquals</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-12" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: assertResultEquals"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertResultEquals</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </pre></div> <p>This tests whether the first parameter equals the expansion of any wikitext. The second parameter can be any wikitext. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertResultEquals</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="s1">'{{#invoke:Calculator|add|2|2}}'</span><span class="p">)</span> </pre></div> <p>Note that some special tags written in XML notation, such as <code><pre></code>, <code><nowiki></code>, <code><gallery></code> and <code><ref></code> cannot be compared correctly. These tags are converted to <a href="/w/index.php?title=%E0%B2%B8%E0%B2%B9%E0%B2%BE%E0%B2%AF:Strip_markers&action=edit&redlink=1" class="new" title="ಸಹಾಯ:Strip markers (ಪುಟವು ಇನ್ನೂ ಸೃಷ್ಟಿತವಾಗಿಲ್ಲ)">strip markers</a> before they are processed by Lua. Strip markers are unique, even when generated from identical input, so any tests testing these tags for equality will fail. This also applies to the <code>assertTemplateEquals</code> and <code>assertSameResult</code> functions. </p> <div class="mw-heading mw-heading3"><h3 id="assertSameResult">assertSameResult</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-13" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: assertSameResult"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertSameResult</span><span class="p">(</span><span class="n">text1</span><span class="p">,</span> <span class="n">text2</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </pre></div> <p>This tests whether the expansion of a given string of wikitext equals the expansion of another string of wikitext. This can be useful for verifying that a module behaves in the same way as a template it is intended to replace. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">self</span><span class="p">:</span><span class="n">assertSameResult</span><span class="p">(</span><span class="s1">'{{add|2|2}}'</span><span class="p">,</span> <span class="s1">'{{#invoke:Calculator|add|2|2}}'</span><span class="p">)</span> </pre></div> <p>Note that some tags written in XML notation cannot be tested correctly; see the note for the <code>assertResultEquals</code> function above. </p> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit/doc&action=edit&section=T-14" title="ವಿಭಾಗ ಸಂಪಾದಿಸಿ: See also"><span>ಬದಲಾಯಿಸಿ</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:UnitTests" title="ಮಾಡ್ಯೂಲ್:UnitTests">Module:UnitTests</a></li></ul> <hr /><div class="mw-highlight mw-highlight-lang-lua mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos" data-line="1"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-2"><a href="#L-2"><span class="linenos" data-line="2"></span></a><span class="c1">-- Unit tests for Scribunto.</span> </span><span id="L-3"><a href="#L-3"><span class="linenos" data-line="3"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a><span class="nb">require</span><span class="p">(</span><span class="s1">'strict'</span><span class="p">)</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a> </span><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a><span class="kd">local</span> <span class="n">DebugHelper</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-7"><a href="#L-7"><span class="linenos" data-line="7"></span></a><span class="kd">local</span> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a><span class="c1">-- The cfg table contains all localisable strings and configuration, to make it</span> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a><span class="c1">-- easier to port this module to another wiki.</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a><span class="kd">local</span> <span class="n">cfg</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s1">'Module:ScribuntoUnit/config'</span><span class="p">)</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a><span class="c1">-- Concatenates keys and values, ideal for displaying a template or parser function argument table.</span> </span><span id="L-15"><a href="#L-15"><span class="linenos" data-line="15"></span></a><span class="c1">-- @param keySeparator glue between key and value (defaults to " = ")</span> </span><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a><span class="c1">-- @param separator glue between different key-value pairs (defaults to ", ")</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a><span class="c1">-- @example concatWithKeys({a = 1, b = 2, c = 3}, ' => ', ', ') => "a => 1, b => 2, c => 3"</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a><span class="c1">-- </span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a><span class="kr">function</span> <span class="nc">DebugHelper</span><span class="p">.</span><span class="nf">concatWithKeys</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">keySeparator</span><span class="p">,</span> <span class="n">separator</span><span class="p">)</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a> <span class="n">keySeparator</span> <span class="o">=</span> <span class="n">keySeparator</span> <span class="ow">or</span> <span class="s1">' = '</span> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">separator</span> <span class="ow">or</span> <span class="s1">', '</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a> <span class="kd">local</span> <span class="n">concatted</span> <span class="o">=</span> <span class="s1">''</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a> <span class="kd">local</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a> <span class="kd">local</span> <span class="n">first</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-25"><a href="#L-25"><span class="linenos" data-line="25"></span></a> <span class="kd">local</span> <span class="n">unnamedArguments</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a> <span class="kr">if</span> <span class="n">first</span> <span class="kr">then</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a> <span class="kr">else</span> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a> <span class="n">concatted</span> <span class="o">=</span> <span class="n">concatted</span> <span class="o">..</span> <span class="n">separator</span> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a> <span class="kr">end</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="o">==</span> <span class="n">i</span> <span class="ow">and</span> <span class="n">unnamedArguments</span> <span class="kr">then</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a> <span class="n">concatted</span> <span class="o">=</span> <span class="n">concatted</span> <span class="o">..</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="kr">else</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a> <span class="n">unnamedArguments</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a> <span class="n">concatted</span> <span class="o">=</span> <span class="n">concatted</span> <span class="o">..</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="o">..</span> <span class="n">keySeparator</span> <span class="o">..</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> <span class="kr">end</span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a> <span class="kr">end</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a> <span class="kr">return</span> <span class="n">concatted</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a><span class="kr">end</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a><span class="c1">-- Compares two tables recursively (non-table values are handled correctly as well).</span> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a><span class="c1">-- @param ignoreMetatable if false, t1.__eq is used for the comparison</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a><span class="c1">-- </span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a><span class="kr">function</span> <span class="nc">DebugHelper</span><span class="p">.</span><span class="nf">deepCompare</span><span class="p">(</span><span class="n">t1</span><span class="p">,</span> <span class="n">t2</span><span class="p">,</span> <span class="n">ignoreMetatable</span><span class="p">)</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a> <span class="kd">local</span> <span class="n">type1</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">t1</span><span class="p">)</span> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a> <span class="kd">local</span> <span class="n">type2</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">t2</span><span class="p">)</span> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a> <span class="kr">if</span> <span class="n">type1</span> <span class="o">~=</span> <span class="n">type2</span> <span class="kr">then</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="kr">return</span> <span class="kc">false</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a> <span class="kr">end</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a> <span class="kr">if</span> <span class="n">type1</span> <span class="o">~=</span> <span class="s1">'table'</span> <span class="kr">then</span> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a> <span class="kr">return</span> <span class="n">t1</span> <span class="o">==</span> <span class="n">t2</span> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a> <span class="kr">end</span> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a> <span class="kd">local</span> <span class="n">metatable</span> <span class="o">=</span> <span class="nb">getmetatable</span><span class="p">(</span><span class="n">t1</span><span class="p">)</span> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">ignoreMetatable</span> <span class="ow">and</span> <span class="n">metatable</span> <span class="ow">and</span> <span class="n">metatable</span><span class="p">.</span><span class="n">__eq</span> <span class="kr">then</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a> <span class="kr">return</span> <span class="n">t1</span> <span class="o">==</span> <span class="n">t2</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> <span class="kr">end</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="kr">for</span> <span class="n">k1</span><span class="p">,</span> <span class="n">v1</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">t1</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a> <span class="kd">local</span> <span class="n">v2</span> <span class="o">=</span> <span class="n">t2</span><span class="p">[</span><span class="n">k1</span><span class="p">]</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a> <span class="kr">if</span> <span class="n">v2</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">deepCompare</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a> <span class="kr">return</span> <span class="kc">false</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> <span class="kr">end</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a> <span class="kr">end</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a> <span class="kr">for</span> <span class="n">k2</span><span class="p">,</span> <span class="n">v2</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">t2</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> <span class="kr">if</span> <span class="n">t1</span><span class="p">[</span><span class="n">k2</span><span class="p">]</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="kr">return</span> <span class="kc">false</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="kr">end</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="kr">end</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> <span class="kr">return</span> <span class="kc">true</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a><span class="kr">end</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a><span class="c1">-- Raises an error with stack information</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a><span class="c1">-- @param details a table with error details</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a><span class="c1">-- - should have a 'text' key which is the error message to display</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a><span class="c1">-- - a 'trace' key will be added with the stack data</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a><span class="c1">-- - and a 'source' key with file/line number</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a><span class="c1">-- - a metatable will be added for error handling</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a><span class="c1">-- </span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a><span class="kr">function</span> <span class="nc">DebugHelper</span><span class="p">.</span><span class="nf">raise</span><span class="p">(</span><span class="n">details</span><span class="p">,</span> <span class="n">level</span><span class="p">)</span> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a> <span class="n">level</span> <span class="o">=</span> <span class="p">(</span><span class="n">level</span> <span class="ow">or</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a> <span class="n">details</span><span class="p">.</span><span class="n">trace</span> <span class="o">=</span> <span class="nb">debug.traceback</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="n">level</span><span class="p">)</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a> <span class="n">details</span><span class="p">.</span><span class="n">source</span> <span class="o">=</span> <span class="nb">string.match</span><span class="p">(</span><span class="n">details</span><span class="p">.</span><span class="n">trace</span><span class="p">,</span> <span class="s1">'^%s*stack traceback:%s*(%S*: )'</span><span class="p">)</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a><span class="c1">-- setmetatable(details, {</span> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a><span class="c1">-- __tostring: function() return details.text end</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a><span class="c1">-- })</span> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a> <span class="nb">error</span><span class="p">(</span><span class="n">details</span><span class="p">,</span> <span class="n">level</span><span class="p">)</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a><span class="kr">end</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a><span class="c1">-- when used in a test, that test gets ignored, and the skipped count increases by one.</span> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a><span class="c1">-- </span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">markTestSkipped</span><span class="p">()</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span><span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="n">skipped</span> <span class="o">=</span> <span class="kc">true</span><span class="p">},</span> <span class="mi">3</span><span class="p">)</span> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a><span class="kr">end</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a><span class="c1">-- Checks that the input is true</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a><span class="c1">-- </span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertTrue</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">actual</span> <span class="kr">then</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span><span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Failed to assert that %s is true"</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">actual</span><span class="p">)),</span> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> <span class="kr">end</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a><span class="kr">end</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a><span class="c1">-- Checks that the input is false</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a><span class="c1">-- </span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertFalse</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="kr">if</span> <span class="n">actual</span> <span class="kr">then</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span><span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Failed to assert that %s is false"</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">actual</span><span class="p">)),</span> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="kr">end</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a><span class="kr">end</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a><span class="c1">-- Checks an input string contains the expected string</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a><span class="c1">-- @param plain search is made with a plain string instead of a ustring pattern</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a><span class="c1">-- </span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertStringContains</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">plain</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span> <span class="o">~=</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"Pattern type error (expected string, got %s)"</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">pattern</span><span class="p">)),</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> <span class="kr">end</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">~=</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"String type error (expected string, got %s)"</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">s</span><span class="p">)),</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="kr">end</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">plain</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s1">'Failed to find %s "%s" in string "%s"'</span><span class="p">,</span> <span class="n">plain</span> <span class="ow">and</span> <span class="s2">"plain string"</span> <span class="ow">or</span> <span class="s2">"pattern"</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">s</span><span class="p">),</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="kr">end</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a><span class="kr">end</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a><span class="c1">-- Checks an input string doesn't contain the expected string</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a><span class="c1">-- @param plain search is made with a plain string instead of a ustring pattern</span> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a><span class="c1">-- </span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertNotStringContains</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">plain</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span> <span class="o">~=</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"Pattern type error (expected string, got %s)"</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">pattern</span><span class="p">)),</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="kr">end</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">~=</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"String type error (expected string, got %s)"</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">s</span><span class="p">)),</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="kr">end</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="kd">local</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">plain</span><span class="p">)</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="kr">then</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> <span class="kd">local</span> <span class="n">match</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">sub</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s1">'Found match "%s" for %s "%s"'</span><span class="p">,</span> <span class="n">match</span><span class="p">,</span> <span class="n">plain</span> <span class="ow">and</span> <span class="s2">"plain string"</span> <span class="ow">or</span> <span class="s2">"pattern"</span><span class="p">,</span> <span class="n">pattern</span><span class="p">),</span> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a> <span class="kr">end</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a><span class="kr">end</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></span></a> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a><span class="c1">-- Checks that an input has the expected value.</span> </span><span id="L-187"><a href="#L-187"><span class="linenos" data-line="187"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></span></a><span class="c1">-- @example assertEquals(4, add(2,2), "2+2 should be 4")</span> </span><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a><span class="c1">-- </span> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertEquals</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">actual</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">expected</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'number'</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">actual</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'number'</span> <span class="kr">then</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">assertWithinDelta</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">actual</span><span class="p">,</span> <span class="mf">1e-8</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> <span class="kr">elseif</span> <span class="n">expected</span> <span class="o">~=</span> <span class="n">actual</span> <span class="kr">then</span> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Failed to assert that %s equals expected %s"</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">actual</span><span class="p">),</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">expected</span><span class="p">)),</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actual</span><span class="p">,</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">expected</span><span class="p">,</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> <span class="kr">end</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a><span class="kr">end</span> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a><span class="c1">-- Checks that 'actual' is within 'delta' of 'expected'.</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a><span class="c1">-- @example assertEquals(1/3, 9/3, "9/3 should be 1/3", 0.000001)</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertWithinDelta</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">actual</span><span class="p">,</span> <span class="n">delta</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">expected</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Expected value %s is not a number"</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">expected</span><span class="p">)),</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actual</span><span class="p">,</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">expected</span><span class="p">,</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> <span class="kr">end</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">actual</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Actual value %s is not a number"</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">actual</span><span class="p">)),</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actual</span><span class="p">,</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">expected</span><span class="p">,</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a> <span class="kr">end</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a> <span class="kd">local</span> <span class="n">diff</span> <span class="o">=</span> <span class="n">expected</span> <span class="o">-</span> <span class="n">actual</span> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a> <span class="kr">if</span> <span class="n">diff</span> <span class="o"><</span> <span class="mi">0</span> <span class="kr">then</span> <span class="n">diff</span> <span class="o">=</span> <span class="o">-</span> <span class="n">diff</span> <span class="kr">end</span> <span class="c1">-- instead of importing math.abs</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a> <span class="kr">if</span> <span class="n">diff</span> <span class="o">></span> <span class="n">delta</span> <span class="kr">then</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Failed to assert that %f is within %f of expected %f"</span><span class="p">,</span> <span class="n">actual</span><span class="p">,</span> <span class="n">delta</span><span class="p">,</span> <span class="n">expected</span><span class="p">),</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actual</span><span class="p">,</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">expected</span><span class="p">,</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a> <span class="kr">end</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a><span class="kr">end</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a><span class="c1">-- Checks that a table has the expected value (including sub-tables).</span> </span><span id="L-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a><span class="c1">-- @example assertDeepEquals({{1,3}, {2,4}}, partition(odd, {1,2,3,4}))</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertDeepEquals</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">actual</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">deepCompare</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">actual</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">expected</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'table'</span> <span class="kr">then</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">dumpObject</span><span class="p">(</span><span class="n">expected</span><span class="p">)</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> <span class="kr">end</span> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">actual</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'table'</span> <span class="kr">then</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">dumpObject</span><span class="p">(</span><span class="n">actual</span><span class="p">)</span> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> <span class="kr">end</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Failed to assert that %s equals expected %s"</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">actual</span><span class="p">),</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">expected</span><span class="p">)),</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actual</span><span class="p">,</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">expected</span><span class="p">,</span> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> <span class="kr">end</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a><span class="kr">end</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a><span class="c1">-- Checks that a wikitext gives the expected result after processing.</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a><span class="c1">-- @example assertResultEquals("Hello world", "{{concat|Hello|world}}")</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertResultEquals</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a> <span class="kd">local</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">frame</span> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a> <span class="kd">local</span> <span class="n">actual</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">preprocess</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> <span class="kr">if</span> <span class="n">expected</span> <span class="o">~=</span> <span class="n">actual</span> <span class="kr">then</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Failed to assert that %s equals expected %s after preprocessing"</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">expected</span><span class="p">)),</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actual</span><span class="p">,</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a> <span class="n">actualRaw</span> <span class="o">=</span> <span class="n">text</span><span class="p">,</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">expected</span><span class="p">,</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a> <span class="kr">end</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a><span class="kr">end</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a><span class="c1">-- Checks that two wikitexts give the same result after processing.</span> </span><span id="L-286"><a href="#L-286"><span class="linenos" data-line="286"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-287"><a href="#L-287"><span class="linenos" data-line="287"></span></a><span class="c1">-- @example assertSameResult("{{concat|Hello|world}}", "{{deleteLastChar|Hello world!}}")</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertSameResult</span><span class="p">(</span><span class="n">text1</span><span class="p">,</span> <span class="n">text2</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a> <span class="kd">local</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">frame</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a> <span class="kd">local</span> <span class="n">processed1</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">preprocess</span><span class="p">(</span><span class="n">text1</span><span class="p">)</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="kd">local</span> <span class="n">processed2</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">preprocess</span><span class="p">(</span><span class="n">text2</span><span class="p">)</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="kr">if</span> <span class="n">processed1</span> <span class="o">~=</span> <span class="n">processed2</span> <span class="kr">then</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Failed to assert that %s equals expected %s after preprocessing"</span><span class="p">,</span> <span class="n">processed1</span><span class="p">,</span> <span class="n">processed2</span><span class="p">),</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">processed1</span><span class="p">,</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="n">actualRaw</span> <span class="o">=</span> <span class="n">text1</span><span class="p">,</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">processed2</span><span class="p">,</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> <span class="n">expectedRaw</span> <span class="o">=</span> <span class="n">text2</span><span class="p">,</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="kr">end</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a><span class="kr">end</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a><span class="c1">-- Checks that a parser function gives the expected output.</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a><span class="c1">-- @example assertParserFunctionEquals("Hello world", "msg:concat", {"Hello", " world"})</span> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertParserFunctionEquals</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">pfname</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a> <span class="kd">local</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">frame</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="kd">local</span> <span class="n">actual</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">callParserFunction</span><span class="p">{</span> <span class="n">name</span> <span class="o">=</span> <span class="n">pfname</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">}</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> <span class="kr">if</span> <span class="n">expected</span> <span class="o">~=</span> <span class="n">actual</span> <span class="kr">then</span> </span><span id="L-313"><a href="#L-313"><span class="linenos" data-line="313"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-314"><a href="#L-314"><span class="linenos" data-line="314"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-315"><a href="#L-315"><span class="linenos" data-line="315"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Failed to assert that %s with args %s equals expected %s after preprocessing"</span><span class="p">,</span> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">concatWithKeys</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">pfname</span><span class="p">,</span> <span class="n">expected</span><span class="p">),</span> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actual</span><span class="p">,</span> </span><span id="L-318"><a href="#L-318"><span class="linenos" data-line="318"></span></a> <span class="n">actualRaw</span> <span class="o">=</span> <span class="n">pfname</span><span class="p">,</span> </span><span id="L-319"><a href="#L-319"><span class="linenos" data-line="319"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">expected</span><span class="p">,</span> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a> <span class="kr">end</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a><span class="kr">end</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a><span class="c1">-- Checks that a template gives the expected output.</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a><span class="c1">-- @example assertTemplateEquals("Hello world", "concat", {"Hello", " world"})</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertTemplateEquals</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> <span class="kd">local</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">frame</span> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a> <span class="kd">local</span> <span class="n">actual</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">expandTemplate</span><span class="p">{</span> <span class="n">title</span> <span class="o">=</span> <span class="n">template</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">}</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> <span class="kr">if</span> <span class="n">expected</span> <span class="o">~=</span> <span class="n">actual</span> <span class="kr">then</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"Failed to assert that %s with args %s equals expected %s after preprocessing"</span><span class="p">,</span> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">concatWithKeys</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">template</span><span class="p">,</span> <span class="n">expected</span><span class="p">),</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actual</span><span class="p">,</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> <span class="n">actualRaw</span> <span class="o">=</span> <span class="n">template</span><span class="p">,</span> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">expected</span><span class="p">,</span> </span><span id="L-340"><a href="#L-340"><span class="linenos" data-line="340"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a> <span class="kr">end</span> </span><span id="L-343"><a href="#L-343"><span class="linenos" data-line="343"></span></a><span class="kr">end</span> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a> </span><span id="L-345"><a href="#L-345"><span class="linenos" data-line="345"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-346"><a href="#L-346"><span class="linenos" data-line="346"></span></a><span class="c1">-- Checks whether a function throws an error</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a><span class="c1">-- @param fn the function to test</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a><span class="c1">-- @param expectedMessage optional the expected error message</span> </span><span id="L-349"><a href="#L-349"><span class="linenos" data-line="349"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-350"><a href="#L-350"><span class="linenos" data-line="350"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertThrows</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span> <span class="n">expectedMessage</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-351"><a href="#L-351"><span class="linenos" data-line="351"></span></a> <span class="kd">local</span> <span class="n">succeeded</span><span class="p">,</span> <span class="n">actualMessage</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span> </span><span id="L-352"><a href="#L-352"><span class="linenos" data-line="352"></span></a> <span class="kr">if</span> <span class="n">succeeded</span> <span class="kr">then</span> </span><span id="L-353"><a href="#L-353"><span class="linenos" data-line="353"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-354"><a href="#L-354"><span class="linenos" data-line="354"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-355"><a href="#L-355"><span class="linenos" data-line="355"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="s1">'Expected exception but none was thrown'</span><span class="p">,</span> </span><span id="L-356"><a href="#L-356"><span class="linenos" data-line="356"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> <span class="kr">end</span> </span><span id="L-359"><a href="#L-359"><span class="linenos" data-line="359"></span></a> <span class="c1">-- For strings, strip the line number added to the error message</span> </span><span id="L-360"><a href="#L-360"><span class="linenos" data-line="360"></span></a> <span class="n">actualMessage</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">actualMessage</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a> <span class="ow">and</span> <span class="nb">string.match</span><span class="p">(</span><span class="n">actualMessage</span><span class="p">,</span> <span class="s1">'Module:[^:]*:[0-9]*: (.*)'</span><span class="p">)</span> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> <span class="ow">or</span> <span class="n">actualMessage</span> </span><span id="L-363"><a href="#L-363"><span class="linenos" data-line="363"></span></a> <span class="kd">local</span> <span class="n">messagesMatch</span> <span class="o">=</span> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">deepCompare</span><span class="p">(</span><span class="n">expectedMessage</span><span class="p">,</span> <span class="n">actualMessage</span><span class="p">)</span> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> <span class="kr">if</span> <span class="n">expectedMessage</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">messagesMatch</span> <span class="kr">then</span> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a> <span class="n">expected</span> <span class="o">=</span> <span class="n">expectedMessage</span><span class="p">,</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actualMessage</span><span class="p">,</span> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s1">'Expected exception with message %s, but got message %s'</span><span class="p">,</span> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a> <span class="nb">tostring</span><span class="p">(</span><span class="n">expectedMessage</span><span class="p">),</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">actualMessage</span><span class="p">)</span> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a> <span class="p">),</span> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-374"><a href="#L-374"><span class="linenos" data-line="374"></span></a> <span class="kr">end</span> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a><span class="kr">end</span> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></span></a> </span><span id="L-377"><a href="#L-377"><span class="linenos" data-line="377"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a><span class="c1">-- Checks whether a function doesn't throw an error</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a><span class="c1">-- @param fn the function to test</span> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a><span class="c1">-- @param message optional description of the test</span> </span><span id="L-381"><a href="#L-381"><span class="linenos" data-line="381"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">assertDoesNotThrow</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> </span><span id="L-382"><a href="#L-382"><span class="linenos" data-line="382"></span></a> <span class="kd">local</span> <span class="n">succeeded</span><span class="p">,</span> <span class="n">actualMessage</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span> </span><span id="L-383"><a href="#L-383"><span class="linenos" data-line="383"></span></a> <span class="kr">if</span> <span class="n">succeeded</span> <span class="kr">then</span> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a> <span class="kr">return</span> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a> <span class="kr">end</span> </span><span id="L-386"><a href="#L-386"><span class="linenos" data-line="386"></span></a> <span class="c1">-- For strings, strip the line number added to the error message</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a> <span class="n">actualMessage</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">actualMessage</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a> <span class="ow">and</span> <span class="nb">string.match</span><span class="p">(</span><span class="n">actualMessage</span><span class="p">,</span> <span class="s1">'Module:[^:]*:[0-9]*: (.*)'</span><span class="p">)</span> </span><span id="L-389"><a href="#L-389"><span class="linenos" data-line="389"></span></a> <span class="ow">or</span> <span class="n">actualMessage</span> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a> <span class="n">DebugHelper</span><span class="p">.</span><span class="n">raise</span><span class="p">({</span> </span><span id="L-391"><a href="#L-391"><span class="linenos" data-line="391"></span></a> <span class="n">ScribuntoUnit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-392"><a href="#L-392"><span class="linenos" data-line="392"></span></a> <span class="n">actual</span> <span class="o">=</span> <span class="n">actualMessage</span><span class="p">,</span> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s1">'Expected no exception, but got exception with message %s'</span><span class="p">,</span> </span><span id="L-394"><a href="#L-394"><span class="linenos" data-line="394"></span></a> <span class="nb">tostring</span><span class="p">(</span><span class="n">actualMessage</span><span class="p">)</span> </span><span id="L-395"><a href="#L-395"><span class="linenos" data-line="395"></span></a> <span class="p">),</span> </span><span id="L-396"><a href="#L-396"><span class="linenos" data-line="396"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> </span><span id="L-397"><a href="#L-397"><span class="linenos" data-line="397"></span></a> <span class="p">},</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-398"><a href="#L-398"><span class="linenos" data-line="398"></span></a><span class="kr">end</span> </span><span id="L-399"><a href="#L-399"><span class="linenos" data-line="399"></span></a> </span><span id="L-400"><a href="#L-400"><span class="linenos" data-line="400"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-401"><a href="#L-401"><span class="linenos" data-line="401"></span></a><span class="c1">-- Creates a new test suite.</span> </span><span id="L-402"><a href="#L-402"><span class="linenos" data-line="402"></span></a><span class="c1">-- @param o a table with test functions (alternatively, the functions can be added later to the returned suite)</span> </span><span id="L-403"><a href="#L-403"><span class="linenos" data-line="403"></span></a><span class="c1">-- </span> </span><span id="L-404"><a href="#L-404"><span class="linenos" data-line="404"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">new</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> </span><span id="L-405"><a href="#L-405"><span class="linenos" data-line="405"></span></a> <span class="n">o</span> <span class="o">=</span> <span class="n">o</span> <span class="ow">or</span> <span class="p">{}</span> </span><span id="L-406"><a href="#L-406"><span class="linenos" data-line="406"></span></a> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="p">{</span><span class="n">__index</span> <span class="o">=</span> <span class="n">self</span><span class="p">})</span> </span><span id="L-407"><a href="#L-407"><span class="linenos" data-line="407"></span></a> <span class="n">o</span><span class="p">.</span><span class="n">run</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">run</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">frame</span><span class="p">)</span> <span class="kr">end</span> </span><span id="L-408"><a href="#L-408"><span class="linenos" data-line="408"></span></a> <span class="kr">return</span> <span class="n">o</span> </span><span id="L-409"><a href="#L-409"><span class="linenos" data-line="409"></span></a><span class="kr">end</span> </span><span id="L-410"><a href="#L-410"><span class="linenos" data-line="410"></span></a> </span><span id="L-411"><a href="#L-411"><span class="linenos" data-line="411"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-412"><a href="#L-412"><span class="linenos" data-line="412"></span></a><span class="c1">-- Resets global counters</span> </span><span id="L-413"><a href="#L-413"><span class="linenos" data-line="413"></span></a><span class="c1">-- </span> </span><span id="L-414"><a href="#L-414"><span class="linenos" data-line="414"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">init</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-415"><a href="#L-415"><span class="linenos" data-line="415"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">frame</span> <span class="o">=</span> <span class="n">frame</span> <span class="ow">or</span> <span class="n">mw</span><span class="p">.</span><span class="n">getCurrentFrame</span><span class="p">()</span> </span><span id="L-416"><a href="#L-416"><span class="linenos" data-line="416"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">successCount</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-417"><a href="#L-417"><span class="linenos" data-line="417"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">failureCount</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-418"><a href="#L-418"><span class="linenos" data-line="418"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">skipCount</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-419"><a href="#L-419"><span class="linenos" data-line="419"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">results</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-420"><a href="#L-420"><span class="linenos" data-line="420"></span></a><span class="kr">end</span> </span><span id="L-421"><a href="#L-421"><span class="linenos" data-line="421"></span></a> </span><span id="L-422"><a href="#L-422"><span class="linenos" data-line="422"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-423"><a href="#L-423"><span class="linenos" data-line="423"></span></a><span class="c1">-- Runs a single testcase</span> </span><span id="L-424"><a href="#L-424"><span class="linenos" data-line="424"></span></a><span class="c1">-- @param name test nume</span> </span><span id="L-425"><a href="#L-425"><span class="linenos" data-line="425"></span></a><span class="c1">-- @param test function containing assertions</span> </span><span id="L-426"><a href="#L-426"><span class="linenos" data-line="426"></span></a><span class="c1">-- </span> </span><span id="L-427"><a href="#L-427"><span class="linenos" data-line="427"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">runTest</span><span class="p">(</span><span class="n">suite</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">test</span><span class="p">)</span> </span><span id="L-428"><a href="#L-428"><span class="linenos" data-line="428"></span></a> <span class="kd">local</span> <span class="n">success</span><span class="p">,</span> <span class="n">details</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span><span class="n">test</span><span class="p">,</span> <span class="n">suite</span><span class="p">)</span> </span><span id="L-429"><a href="#L-429"><span class="linenos" data-line="429"></span></a> </span><span id="L-430"><a href="#L-430"><span class="linenos" data-line="430"></span></a> <span class="kr">if</span> <span class="n">success</span> <span class="kr">then</span> </span><span id="L-431"><a href="#L-431"><span class="linenos" data-line="431"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">successCount</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">successCount</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-432"><a href="#L-432"><span class="linenos" data-line="432"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">results</span><span class="p">,</span> <span class="p">{</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="p">,</span> <span class="n">success</span> <span class="o">=</span> <span class="kc">true</span><span class="p">})</span> </span><span id="L-433"><a href="#L-433"><span class="linenos" data-line="433"></span></a> <span class="kr">elseif</span> <span class="nb">type</span><span class="p">(</span><span class="n">details</span><span class="p">)</span> <span class="o">~=</span> <span class="s1">'table'</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">details</span><span class="p">.</span><span class="n">ScribuntoUnit</span> <span class="kr">then</span> <span class="c1">-- a real error, not a failed assertion</span> </span><span id="L-434"><a href="#L-434"><span class="linenos" data-line="434"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">failureCount</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">failureCount</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-435"><a href="#L-435"><span class="linenos" data-line="435"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">results</span><span class="p">,</span> <span class="p">{</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="p">,</span> <span class="nb">error</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="n">message</span> <span class="o">=</span> <span class="s1">'Lua error -- '</span> <span class="o">..</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">details</span><span class="p">)})</span> </span><span id="L-436"><a href="#L-436"><span class="linenos" data-line="436"></span></a> <span class="kr">elseif</span> <span class="n">details</span><span class="p">.</span><span class="n">skipped</span> <span class="kr">then</span> </span><span id="L-437"><a href="#L-437"><span class="linenos" data-line="437"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">skipCount</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">skipCount</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-438"><a href="#L-438"><span class="linenos" data-line="438"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">results</span><span class="p">,</span> <span class="p">{</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="p">,</span> <span class="n">skipped</span> <span class="o">=</span> <span class="kc">true</span><span class="p">})</span> </span><span id="L-439"><a href="#L-439"><span class="linenos" data-line="439"></span></a> <span class="kr">else</span> </span><span id="L-440"><a href="#L-440"><span class="linenos" data-line="440"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">failureCount</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">failureCount</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-441"><a href="#L-441"><span class="linenos" data-line="441"></span></a> <span class="kd">local</span> <span class="n">message</span> <span class="o">=</span> <span class="n">details</span><span class="p">.</span><span class="n">source</span> </span><span id="L-442"><a href="#L-442"><span class="linenos" data-line="442"></span></a> <span class="kr">if</span> <span class="n">details</span><span class="p">.</span><span class="n">message</span> <span class="kr">then</span> </span><span id="L-443"><a href="#L-443"><span class="linenos" data-line="443"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> <span class="o">..</span> <span class="n">details</span><span class="p">.</span><span class="n">message</span> <span class="o">..</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> </span><span id="L-444"><a href="#L-444"><span class="linenos" data-line="444"></span></a> <span class="kr">end</span> </span><span id="L-445"><a href="#L-445"><span class="linenos" data-line="445"></span></a> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span> <span class="o">..</span> <span class="n">details</span><span class="p">.</span><span class="n">text</span> </span><span id="L-446"><a href="#L-446"><span class="linenos" data-line="446"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">results</span><span class="p">,</span> <span class="p">{</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="p">,</span> <span class="nb">error</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="n">message</span> <span class="o">=</span> <span class="n">message</span><span class="p">,</span> <span class="n">expected</span> <span class="o">=</span> <span class="n">details</span><span class="p">.</span><span class="n">expected</span><span class="p">,</span> <span class="n">actual</span> <span class="o">=</span> <span class="n">details</span><span class="p">.</span><span class="n">actual</span><span class="p">,</span> <span class="n">testname</span> <span class="o">=</span> <span class="n">details</span><span class="p">.</span><span class="n">message</span><span class="p">})</span> </span><span id="L-447"><a href="#L-447"><span class="linenos" data-line="447"></span></a> <span class="kr">end</span> </span><span id="L-448"><a href="#L-448"><span class="linenos" data-line="448"></span></a><span class="kr">end</span> </span><span id="L-449"><a href="#L-449"><span class="linenos" data-line="449"></span></a> </span><span id="L-450"><a href="#L-450"><span class="linenos" data-line="450"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-451"><a href="#L-451"><span class="linenos" data-line="451"></span></a><span class="c1">-- Runs all tests and displays the results.</span> </span><span id="L-452"><a href="#L-452"><span class="linenos" data-line="452"></span></a><span class="c1">-- </span> </span><span id="L-453"><a href="#L-453"><span class="linenos" data-line="453"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">runSuite</span><span class="p">(</span><span class="n">suite</span><span class="p">,</span> <span class="n">frame</span><span class="p">)</span> </span><span id="L-454"><a href="#L-454"><span class="linenos" data-line="454"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">init</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-455"><a href="#L-455"><span class="linenos" data-line="455"></span></a> <span class="kd">local</span> <span class="n">names</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-456"><a href="#L-456"><span class="linenos" data-line="456"></span></a> <span class="kr">for</span> <span class="n">name</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">suite</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-457"><a href="#L-457"><span class="linenos" data-line="457"></span></a> <span class="kr">if</span> <span class="n">name</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s1">'^test'</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-458"><a href="#L-458"><span class="linenos" data-line="458"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> </span><span id="L-459"><a href="#L-459"><span class="linenos" data-line="459"></span></a> <span class="kr">end</span> </span><span id="L-460"><a href="#L-460"><span class="linenos" data-line="460"></span></a> <span class="kr">end</span> </span><span id="L-461"><a href="#L-461"><span class="linenos" data-line="461"></span></a> <span class="nb">table.sort</span><span class="p">(</span><span class="n">names</span><span class="p">)</span> <span class="c1">-- Put tests in alphabetical order.</span> </span><span id="L-462"><a href="#L-462"><span class="linenos" data-line="462"></span></a> <span class="kr">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">name</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">names</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-463"><a href="#L-463"><span class="linenos" data-line="463"></span></a> <span class="kd">local</span> <span class="n">func</span> <span class="o">=</span> <span class="n">suite</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> </span><span id="L-464"><a href="#L-464"><span class="linenos" data-line="464"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">runTest</span><span class="p">(</span><span class="n">suite</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span> </span><span id="L-465"><a href="#L-465"><span class="linenos" data-line="465"></span></a> <span class="kr">end</span> </span><span id="L-466"><a href="#L-466"><span class="linenos" data-line="466"></span></a> <span class="kr">return</span> <span class="p">{</span> </span><span id="L-467"><a href="#L-467"><span class="linenos" data-line="467"></span></a> <span class="n">successCount</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">successCount</span><span class="p">,</span> </span><span id="L-468"><a href="#L-468"><span class="linenos" data-line="468"></span></a> <span class="n">failureCount</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">failureCount</span><span class="p">,</span> </span><span id="L-469"><a href="#L-469"><span class="linenos" data-line="469"></span></a> <span class="n">skipCount</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">skipCount</span><span class="p">,</span> </span><span id="L-470"><a href="#L-470"><span class="linenos" data-line="470"></span></a> <span class="n">results</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">results</span><span class="p">,</span> </span><span id="L-471"><a href="#L-471"><span class="linenos" data-line="471"></span></a> <span class="p">}</span> </span><span id="L-472"><a href="#L-472"><span class="linenos" data-line="472"></span></a><span class="kr">end</span> </span><span id="L-473"><a href="#L-473"><span class="linenos" data-line="473"></span></a> </span><span id="L-474"><a href="#L-474"><span class="linenos" data-line="474"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-475"><a href="#L-475"><span class="linenos" data-line="475"></span></a><span class="c1">-- #invoke entry point for running the tests.</span> </span><span id="L-476"><a href="#L-476"><span class="linenos" data-line="476"></span></a><span class="c1">-- Can be called without a frame, in which case it will use mw.log for output</span> </span><span id="L-477"><a href="#L-477"><span class="linenos" data-line="477"></span></a><span class="c1">-- @param displayMode see displayResults()</span> </span><span id="L-478"><a href="#L-478"><span class="linenos" data-line="478"></span></a><span class="c1">-- </span> </span><span id="L-479"><a href="#L-479"><span class="linenos" data-line="479"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">run</span><span class="p">(</span><span class="n">suite</span><span class="p">,</span> <span class="n">frame</span><span class="p">)</span> </span><span id="L-480"><a href="#L-480"><span class="linenos" data-line="480"></span></a> <span class="kd">local</span> <span class="n">testData</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">runSuite</span><span class="p">(</span><span class="n">suite</span><span class="p">,</span> <span class="n">frame</span><span class="p">)</span> </span><span id="L-481"><a href="#L-481"><span class="linenos" data-line="481"></span></a> <span class="kr">if</span> <span class="n">frame</span> <span class="ow">and</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> <span class="kr">then</span> </span><span id="L-482"><a href="#L-482"><span class="linenos" data-line="482"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">displayResults</span><span class="p">(</span><span class="n">testData</span><span class="p">,</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">displayMode</span> <span class="ow">or</span> <span class="s1">'table'</span><span class="p">)</span> </span><span id="L-483"><a href="#L-483"><span class="linenos" data-line="483"></span></a> <span class="kr">else</span> </span><span id="L-484"><a href="#L-484"><span class="linenos" data-line="484"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">displayResults</span><span class="p">(</span><span class="n">testData</span><span class="p">,</span> <span class="s1">'log'</span><span class="p">)</span> </span><span id="L-485"><a href="#L-485"><span class="linenos" data-line="485"></span></a> <span class="kr">end</span> </span><span id="L-486"><a href="#L-486"><span class="linenos" data-line="486"></span></a><span class="kr">end</span> </span><span id="L-487"><a href="#L-487"><span class="linenos" data-line="487"></span></a> </span><span id="L-488"><a href="#L-488"><span class="linenos" data-line="488"></span></a><span class="c1">-------------------------------------------------------------------------------</span> </span><span id="L-489"><a href="#L-489"><span class="linenos" data-line="489"></span></a><span class="c1">-- Displays test results </span> </span><span id="L-490"><a href="#L-490"><span class="linenos" data-line="490"></span></a><span class="c1">-- @param displayMode: 'table', 'log' or 'short'</span> </span><span id="L-491"><a href="#L-491"><span class="linenos" data-line="491"></span></a><span class="c1">-- </span> </span><span id="L-492"><a href="#L-492"><span class="linenos" data-line="492"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">displayResults</span><span class="p">(</span><span class="n">testData</span><span class="p">,</span> <span class="n">displayMode</span><span class="p">)</span> </span><span id="L-493"><a href="#L-493"><span class="linenos" data-line="493"></span></a> <span class="kr">if</span> <span class="n">displayMode</span> <span class="o">==</span> <span class="s1">'table'</span> <span class="kr">then</span> </span><span id="L-494"><a href="#L-494"><span class="linenos" data-line="494"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">displayResultsAsTable</span><span class="p">(</span><span class="n">testData</span><span class="p">)</span> </span><span id="L-495"><a href="#L-495"><span class="linenos" data-line="495"></span></a> <span class="kr">elseif</span> <span class="n">displayMode</span> <span class="o">==</span> <span class="s1">'log'</span> <span class="kr">then</span> </span><span id="L-496"><a href="#L-496"><span class="linenos" data-line="496"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">displayResultsAsLog</span><span class="p">(</span><span class="n">testData</span><span class="p">)</span> </span><span id="L-497"><a href="#L-497"><span class="linenos" data-line="497"></span></a> <span class="kr">elseif</span> <span class="n">displayMode</span> <span class="o">==</span> <span class="s1">'short'</span> <span class="kr">then</span> </span><span id="L-498"><a href="#L-498"><span class="linenos" data-line="498"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">displayResultsAsShort</span><span class="p">(</span><span class="n">testData</span><span class="p">)</span> </span><span id="L-499"><a href="#L-499"><span class="linenos" data-line="499"></span></a> <span class="kr">else</span> </span><span id="L-500"><a href="#L-500"><span class="linenos" data-line="500"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s1">'unknown display mode'</span><span class="p">)</span> </span><span id="L-501"><a href="#L-501"><span class="linenos" data-line="501"></span></a> <span class="kr">end</span> </span><span id="L-502"><a href="#L-502"><span class="linenos" data-line="502"></span></a><span class="kr">end</span> </span><span id="L-503"><a href="#L-503"><span class="linenos" data-line="503"></span></a> </span><span id="L-504"><a href="#L-504"><span class="linenos" data-line="504"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">displayResultsAsLog</span><span class="p">(</span><span class="n">testData</span><span class="p">)</span> </span><span id="L-505"><a href="#L-505"><span class="linenos" data-line="505"></span></a> <span class="kr">if</span> <span class="n">testData</span><span class="p">.</span><span class="n">failureCount</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-506"><a href="#L-506"><span class="linenos" data-line="506"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">log</span><span class="p">(</span><span class="s1">'FAILURES!!!'</span><span class="p">)</span> </span><span id="L-507"><a href="#L-507"><span class="linenos" data-line="507"></span></a> <span class="kr">elseif</span> <span class="n">testData</span><span class="p">.</span><span class="n">skipCount</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-508"><a href="#L-508"><span class="linenos" data-line="508"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">log</span><span class="p">(</span><span class="s1">'Some tests could not be executed without a frame and have been skipped. Invoke this test suite as a template to run all tests.'</span><span class="p">)</span> </span><span id="L-509"><a href="#L-509"><span class="linenos" data-line="509"></span></a> <span class="kr">end</span> </span><span id="L-510"><a href="#L-510"><span class="linenos" data-line="510"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">log</span><span class="p">(</span><span class="nb">string.format</span><span class="p">(</span><span class="s1">'Assertions: success: %d, error: %d, skipped: %d'</span><span class="p">,</span> <span class="n">testData</span><span class="p">.</span><span class="n">successCount</span><span class="p">,</span> <span class="n">testData</span><span class="p">.</span><span class="n">failureCount</span><span class="p">,</span> <span class="n">testData</span><span class="p">.</span><span class="n">skipCount</span><span class="p">))</span> </span><span id="L-511"><a href="#L-511"><span class="linenos" data-line="511"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">log</span><span class="p">(</span><span class="s1">'-------------------------------------------------------------------------------'</span><span class="p">)</span> </span><span id="L-512"><a href="#L-512"><span class="linenos" data-line="512"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">result</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">testData</span><span class="p">.</span><span class="n">results</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-513"><a href="#L-513"><span class="linenos" data-line="513"></span></a> <span class="kr">if</span> <span class="n">result</span><span class="p">.</span><span class="n">error</span> <span class="kr">then</span> </span><span id="L-514"><a href="#L-514"><span class="linenos" data-line="514"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">log</span><span class="p">(</span><span class="nb">string.format</span><span class="p">(</span><span class="s1">'%s: %s'</span><span class="p">,</span> <span class="n">result</span><span class="p">.</span><span class="n">name</span><span class="p">,</span> <span class="n">result</span><span class="p">.</span><span class="n">message</span><span class="p">))</span> </span><span id="L-515"><a href="#L-515"><span class="linenos" data-line="515"></span></a> <span class="kr">end</span> </span><span id="L-516"><a href="#L-516"><span class="linenos" data-line="516"></span></a> <span class="kr">end</span> </span><span id="L-517"><a href="#L-517"><span class="linenos" data-line="517"></span></a><span class="kr">end</span> </span><span id="L-518"><a href="#L-518"><span class="linenos" data-line="518"></span></a> </span><span id="L-519"><a href="#L-519"><span class="linenos" data-line="519"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">displayResultsAsShort</span><span class="p">(</span><span class="n">testData</span><span class="p">)</span> </span><span id="L-520"><a href="#L-520"><span class="linenos" data-line="520"></span></a> <span class="kd">local</span> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="n">cfg</span><span class="p">.</span><span class="n">shortResultsFormat</span><span class="p">,</span> <span class="n">testData</span><span class="p">.</span><span class="n">successCount</span><span class="p">,</span> <span class="n">testData</span><span class="p">.</span><span class="n">failureCount</span><span class="p">,</span> <span class="n">testData</span><span class="p">.</span><span class="n">skipCount</span><span class="p">)</span> </span><span id="L-521"><a href="#L-521"><span class="linenos" data-line="521"></span></a> <span class="kr">if</span> <span class="n">testData</span><span class="p">.</span><span class="n">failureCount</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-522"><a href="#L-522"><span class="linenos" data-line="522"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="s1">'<span class="error">'</span> <span class="o">..</span> <span class="n">text</span> <span class="o">..</span> <span class="s1">'</span>'</span> </span><span id="L-523"><a href="#L-523"><span class="linenos" data-line="523"></span></a> <span class="kr">end</span> </span><span id="L-524"><a href="#L-524"><span class="linenos" data-line="524"></span></a> <span class="kr">return</span> <span class="n">text</span> </span><span id="L-525"><a href="#L-525"><span class="linenos" data-line="525"></span></a><span class="kr">end</span> </span><span id="L-526"><a href="#L-526"><span class="linenos" data-line="526"></span></a> </span><span id="L-527"><a href="#L-527"><span class="linenos" data-line="527"></span></a><span class="kr">function</span> <span class="nc">ScribuntoUnit</span><span class="p">:</span><span class="nf">displayResultsAsTable</span><span class="p">(</span><span class="n">testData</span><span class="p">)</span> </span><span id="L-528"><a href="#L-528"><span class="linenos" data-line="528"></span></a> <span class="kd">local</span> <span class="n">successIcon</span><span class="p">,</span> <span class="n">failIcon</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">frame</span><span class="p">:</span><span class="n">preprocess</span><span class="p">(</span><span class="n">cfg</span><span class="p">.</span><span class="n">successIndicator</span><span class="p">),</span> <span class="n">self</span><span class="p">.</span><span class="n">frame</span><span class="p">:</span><span class="n">preprocess</span><span class="p">(</span><span class="n">cfg</span><span class="p">.</span><span class="n">failureIndicator</span><span class="p">)</span> </span><span id="L-529"><a href="#L-529"><span class="linenos" data-line="529"></span></a> <span class="kd">local</span> <span class="n">text</span> <span class="o">=</span> <span class="s1">''</span> </span><span id="L-530"><a href="#L-530"><span class="linenos" data-line="530"></span></a> <span class="kr">if</span> <span class="n">testData</span><span class="p">.</span><span class="n">failureCount</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-531"><a href="#L-531"><span class="linenos" data-line="531"></span></a> <span class="kd">local</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">message</span><span class="p">.</span><span class="n">newRawMessage</span><span class="p">(</span><span class="n">cfg</span><span class="p">.</span><span class="n">failureSummary</span><span class="p">,</span> <span class="n">testData</span><span class="p">.</span><span class="n">failureCount</span><span class="p">):</span><span class="n">plain</span><span class="p">()</span> </span><span id="L-532"><a href="#L-532"><span class="linenos" data-line="532"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">frame</span><span class="p">:</span><span class="n">preprocess</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> </span><span id="L-533"><a href="#L-533"><span class="linenos" data-line="533"></span></a> <span class="kr">if</span> <span class="n">cfg</span><span class="p">.</span><span class="n">failureCategory</span> <span class="kr">then</span> </span><span id="L-534"><a href="#L-534"><span class="linenos" data-line="534"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">cfg</span><span class="p">.</span><span class="n">failureCategory</span> <span class="o">..</span> <span class="n">msg</span> </span><span id="L-535"><a href="#L-535"><span class="linenos" data-line="535"></span></a> <span class="kr">end</span> </span><span id="L-536"><a href="#L-536"><span class="linenos" data-line="536"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="n">failIcon</span> <span class="o">..</span> <span class="s1">' '</span> <span class="o">..</span> <span class="n">msg</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span> </span><span id="L-537"><a href="#L-537"><span class="linenos" data-line="537"></span></a> <span class="kr">else</span> </span><span id="L-538"><a href="#L-538"><span class="linenos" data-line="538"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="n">successIcon</span> <span class="o">..</span> <span class="s1">' '</span> <span class="o">..</span> <span class="n">cfg</span><span class="p">.</span><span class="n">successSummary</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span> </span><span id="L-539"><a href="#L-539"><span class="linenos" data-line="539"></span></a> <span class="kr">end</span> </span><span id="L-540"><a href="#L-540"><span class="linenos" data-line="540"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="s1">'{| class="wikitable scribunto-test-table"</span><span class="se">\n</span><span class="s1">'</span> </span><span id="L-541"><a href="#L-541"><span class="linenos" data-line="541"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="s1">'!</span><span class="se">\n</span><span class="s1">! '</span> <span class="o">..</span> <span class="n">cfg</span><span class="p">.</span><span class="n">nameString</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">! '</span> <span class="o">..</span> <span class="n">cfg</span><span class="p">.</span><span class="n">expectedString</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">! '</span> <span class="o">..</span> <span class="n">cfg</span><span class="p">.</span><span class="n">actualString</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span> </span><span id="L-542"><a href="#L-542"><span class="linenos" data-line="542"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">result</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">testData</span><span class="p">.</span><span class="n">results</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-543"><a href="#L-543"><span class="linenos" data-line="543"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="s1">'|-</span><span class="se">\n</span><span class="s1">'</span> </span><span id="L-544"><a href="#L-544"><span class="linenos" data-line="544"></span></a> <span class="kr">if</span> <span class="n">result</span><span class="p">.</span><span class="n">error</span> <span class="kr">then</span> </span><span id="L-545"><a href="#L-545"><span class="linenos" data-line="545"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="s1">'| '</span> <span class="o">..</span> <span class="n">failIcon</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">| '</span> </span><span id="L-546"><a href="#L-546"><span class="linenos" data-line="546"></span></a> <span class="kr">if</span> <span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">expected</span> <span class="ow">and</span> <span class="n">result</span><span class="p">.</span><span class="n">actual</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-547"><a href="#L-547"><span class="linenos" data-line="547"></span></a> <span class="kd">local</span> <span class="n">name</span> <span class="o">=</span> <span class="n">result</span><span class="p">.</span><span class="n">name</span> </span><span id="L-548"><a href="#L-548"><span class="linenos" data-line="548"></span></a> <span class="kr">if</span> <span class="n">result</span><span class="p">.</span><span class="n">testname</span> <span class="kr">then</span> </span><span id="L-549"><a href="#L-549"><span class="linenos" data-line="549"></span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">name</span> <span class="o">..</span> <span class="s1">' / '</span> <span class="o">..</span> <span class="n">result</span><span class="p">.</span><span class="n">testname</span> </span><span id="L-550"><a href="#L-550"><span class="linenos" data-line="550"></span></a> <span class="kr">end</span> </span><span id="L-551"><a href="#L-551"><span class="linenos" data-line="551"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="n">name</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">| '</span> <span class="o">..</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">nowiki</span><span class="p">(</span><span class="nb">tostring</span><span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">expected</span><span class="p">))</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">| '</span> <span class="o">..</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">nowiki</span><span class="p">(</span><span class="nb">tostring</span><span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">actual</span><span class="p">))</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span> </span><span id="L-552"><a href="#L-552"><span class="linenos" data-line="552"></span></a> <span class="kr">else</span> </span><span id="L-553"><a href="#L-553"><span class="linenos" data-line="553"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="n">result</span><span class="p">.</span><span class="n">name</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">| '</span> <span class="o">..</span> <span class="s1">' colspan="2" | '</span> <span class="o">..</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">nowiki</span><span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">message</span><span class="p">)</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span> </span><span id="L-554"><a href="#L-554"><span class="linenos" data-line="554"></span></a> <span class="kr">end</span> </span><span id="L-555"><a href="#L-555"><span class="linenos" data-line="555"></span></a> <span class="kr">else</span> </span><span id="L-556"><a href="#L-556"><span class="linenos" data-line="556"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="s1">'| '</span> <span class="o">..</span> <span class="n">successIcon</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">| '</span> <span class="o">..</span> <span class="n">result</span><span class="p">.</span><span class="n">name</span> <span class="o">..</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">|</span><span class="se">\n</span><span class="s1">|</span><span class="se">\n</span><span class="s1">'</span> </span><span id="L-557"><a href="#L-557"><span class="linenos" data-line="557"></span></a> <span class="kr">end</span> </span><span id="L-558"><a href="#L-558"><span class="linenos" data-line="558"></span></a> <span class="kr">end</span> </span><span id="L-559"><a href="#L-559"><span class="linenos" data-line="559"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">..</span> <span class="s1">'|}</span><span class="se">\n</span><span class="s1">'</span> </span><span id="L-560"><a href="#L-560"><span class="linenos" data-line="560"></span></a> <span class="kr">return</span> <span class="n">text</span> </span><span id="L-561"><a href="#L-561"><span class="linenos" data-line="561"></span></a><span class="kr">end</span> </span><span id="L-562"><a href="#L-562"><span class="linenos" data-line="562"></span></a> </span><span id="L-563"><a href="#L-563"><span class="linenos" data-line="563"></span></a><span class="kr">return</span> <span class="n">ScribuntoUnit</span> </span></pre></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐7f76cf74bc‐4fv4w Cached time: 20250307093631 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] CPU time usage: 0.023 seconds Real time usage: 0.034 seconds Preprocessor visited node count: 121/1000000 Post‐expand include size: 7530/2097152 bytes Template argument size: 17/2097152 bytes Highest expansion depth: 5/100 Expensive parser function count: 23/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 14727/5000000 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 13.535 1 -total 100.00% 13.535 1 ಮಾಡ್ಯೂಲ್:ScribuntoUnit/doc 12.60% 1.705 1 ಟೆಂಪ್ಲೇಟು:Code --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?useformat=desktop&type=1x1&usesul3=0" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">"<a dir="ltr" href="https://kn.wikipedia.org/w/index.php?title=ಮಾಡ್ಯೂಲ್:ScribuntoUnit&oldid=1161032">https://kn.wikipedia.org/w/index.php?title=ಮಾಡ್ಯೂಲ್:ScribuntoUnit&oldid=1161032</a>" ಇಂದ ಪಡೆಯಲ್ಪಟ್ಟಿದೆ</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:Categories" title="ವಿಶೇಷ:Categories">ವರ್ಗ</a>: <ul><li><a href="/wiki/%E0%B2%B5%E0%B2%B0%E0%B3%8D%E0%B2%97:Pages_using_deprecated_source_tags" title="ವರ್ಗ:Pages using deprecated source tags">Pages using deprecated source tags</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> ಈ ಪುಟವನ್ನು ೨೨ ಮಾರ್ಚ್ ೨೦೨೩, ೧೯:೧೪ ರಂದು ಕೊನೆಯಾಗಿ ಸಂಪಾದಿಸಲಾಯಿತು.</li> <li id="footer-info-copyright"><a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/">ಕ್ರಿಯೇಟಿವ್ ಕಾಮನ್ಸ್ ಅಟ್ರಿಬ್ಯೂಷನ್-ಶೇರ್ ಅಲೈಕ್ ಪರವಾನಗಿ</a> ಅಡಿಯಲ್ಲಿ ಪಠ್ಯವು ಲಭ್ಯವಿದೆ ;ಹೆಚ್ಚುವರಿ ನಿಯಮಗಳು ಅನ್ವಯಿಸಬಹುದು. <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">ಬಳಕೆಯ ನಿಯಮಗಳನ್ನು</a> ನೋಡಿ.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">ಖಾಸಗಿ ಮಾಹಿತಿಯ ಬಗ್ಗೆ ನಿಲುವು</a></li> <li id="footer-places-about"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%95%E0%B2%BF%E0%B2%AA%E0%B3%80%E0%B2%A1%E0%B2%BF%E0%B2%AF:%E0%B2%A8%E0%B2%AE%E0%B3%8D%E0%B2%AE_%E0%B2%AC%E0%B2%97%E0%B3%8D%E0%B2%97%E0%B3%86">ಕನ್ನಡ ವಿಕಿಪೀಡಿಯ ಬಗ್ಗೆ</a></li> <li id="footer-places-disclaimers"><a href="/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%95%E0%B2%BF%E0%B2%AA%E0%B3%80%E0%B2%A1%E0%B2%BF%E0%B2%AF:%E0%B2%B8%E0%B2%BE%E0%B2%AE%E0%B2%BE%E0%B2%A8%E0%B3%8D%E0%B2%AF_%E0%B2%85%E0%B2%AC%E0%B2%BE%E0%B2%A7%E0%B3%8D%E0%B2%AF%E0%B2%A4%E0%B3%86%E0%B2%97%E0%B2%B3%E0%B3%81">ಹಕ್ಕು ನಿರಾಕರಣೆಗಳು</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">ಡೆವೆಲಪರ್ಗಳು</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/kn.wikipedia.org">ಅಂಕಿ ಅಂಶಗಳು</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">ಕುಕಿ ಹೇಳಿಕೆ</a></li> <li id="footer-places-mobileview"><a href="//kn.m.wikipedia.org/w/index.php?title=%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:ScribuntoUnit&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">ಮೊಬೈಲ್ ವೀಕ್ಷಣೆ</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/static/images/footer/wikimedia-button.svg" width="84" height="29"><img src="/static/images/footer/wikimedia.svg" width="25" height="25" alt="Wikimedia Foundation" lang="en" loading="lazy"></picture></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/w/resources/assets/poweredby_mediawiki.svg" width="88" height="31"><img src="/w/resources/assets/mediawiki_compact.svg" alt="Powered by MediaWiki" lang="en" width="25" height="25" loading="lazy"></picture></a></li> </ul> </footer> </div> </div> </div> <div class="vector-header-container vector-sticky-header-container"> <div id="vector-sticky-header" class="vector-sticky-header"> <div class="vector-sticky-header-start"> <div class="vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right" aria-hidden="true"> <button class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle" tabindex="-1" data-event-name="ui.vector-sticky-search-form.icon"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>ಹುಡುಕು</span> </button> </div> <div role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box"> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail"> <form action="/w/index.php" id="vector-sticky-search-form" class="cdx-search-input cdx-search-input--has-end-button"> <div class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="ವಿಕಿಪೀಡಿಯ ಅನ್ನು ಹುಡುಕಿ"> <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="ವಿಶೇಷ:Search"> </div> <button class="cdx-button cdx-search-input__end-button">ಹುಡುಕು</button> </form> </div> </div> </div> <div class="vector-sticky-header-context-bar"> <nav aria-label="ಪರಿವಿಡಿ" class="vector-toc-landmark"> <div id="vector-sticky-header-toc" class="vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc vector-button-flush-left" > <input type="checkbox" id="vector-sticky-header-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-sticky-header-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-sticky-header-toc-label" for="vector-sticky-header-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-sticky-header-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div class="vector-sticky-header-context-bar-primary" aria-hidden="true" ><span class="mw-page-title-namespace">ಮಾಡ್ಯೂಲ್</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">ScribuntoUnit</span></div> </div> </div> <div class="vector-sticky-header-end" aria-hidden="true"> <div class="vector-sticky-header-icons"> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-talk-sticky-header" tabindex="-1" data-event-name="talk-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-subject-sticky-header" tabindex="-1" data-event-name="subject-sticky-header"><span class="vector-icon mw-ui-icon-article mw-ui-icon-wikimedia-article"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-history-sticky-header" tabindex="-1" data-event-name="history-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-history mw-ui-icon-wikimedia-wikimedia-history"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only mw-watchlink" id="ca-watchstar-sticky-header" tabindex="-1" data-event-name="watch-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-star mw-ui-icon-wikimedia-wikimedia-star"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-edit-sticky-header" tabindex="-1" data-event-name="wikitext-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-wikiText mw-ui-icon-wikimedia-wikimedia-wikiText"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-ve-edit-sticky-header" tabindex="-1" data-event-name="ve-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-edit mw-ui-icon-wikimedia-wikimedia-edit"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-viewsource-sticky-header" tabindex="-1" data-event-name="ve-edit-protected-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-editLock mw-ui-icon-wikimedia-wikimedia-editLock"></span> <span></span> </a> </div> <div class="vector-sticky-header-buttons"> <button class="cdx-button cdx-button--weight-quiet mw-interlanguage-selector" id="p-lang-btn-sticky-header" tabindex="-1" data-event-name="ui.dropdown-p-lang-btn-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>೩೦ ಭಾಷೆಗಳು</span> </button> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive" id="ca-addsection-sticky-header" tabindex="-1" data-event-name="addsection-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbleAdd-progressive mw-ui-icon-wikimedia-speechBubbleAdd-progressive"></span> <span>ವಿಷಯ ಸೇರಿಸಿ</span> </a> </div> <div class="vector-sticky-header-icon-end"> <div class="vector-user-links"> </div> </div> </div> </div> </div> <div class="mw-portlet mw-portlet-dock-bottom emptyPortlet" id="p-dock-bottom"> <ul> </ul> </div> <script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-7f76cf74bc-4fv4w","wgBackendResponseTime":254,"wgPageParseReport":{"limitreport":{"cputime":"0.023","walltime":"0.034","ppvisitednodes":{"value":121,"limit":1000000},"postexpandincludesize":{"value":7530,"limit":2097152},"templateargumentsize":{"value":17,"limit":2097152},"expansiondepth":{"value":5,"limit":100},"expensivefunctioncount":{"value":23,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":14727,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 13.535 1 -total","100.00% 13.535 1 ಮಾಡ್ಯೂಲ್:ScribuntoUnit/doc"," 12.60% 1.705 1 ಟೆಂಪ್ಲೇಟು:Code"]},"cachereport":{"origin":"mw-web.codfw.main-7f76cf74bc-4fv4w","timestamp":"20250307093631","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>