Difference between revisions of "Module:Hatnote/testcases"

From blackwiki
Jump to navigation Jump to search
blackwiki>Mr. Stradivarius
(make the section-only-link test names consistent)
m (2 revisions imported)
Line 1: Line 1:
local mHatnote = require('Module:Hatnote/sandbox') -- the module to be tested
+
{{template test cases}}
local ScribuntoUnit = require('Module:ScribuntoUnit')
 
local suite = ScribuntoUnit:new()
 
  
function suite:assertError(func, ...)
+
== Testing sandbox ==
local success, result = pcall(func, ...)
 
self:assertFalse(success)
 
end
 
  
function suite:assertNotEquals(expected, actual)
+
* <code><nowiki>{{hatnote/sandbox|category=no}}</nowiki></code>
self:assertTrue(expected ~= actual)
 
end
 
  
function suite:assertParentFrameCallEquals(expected, func, args)
+
{{hatnote/sandbox|category=no}}
args = args or {}
 
local current = mw.getCurrentFrame()
 
local parent = current:newChild{title = 'Parent', args = args}
 
local child = parent:newChild{title = 'Child'}
 
self:assertEquals(expected, func(child))
 
end
 
  
-------------------------------------------------------------------------------
+
* <code><nowiki>{{hatnote/sandbox|Foo}}</nowiki></code>
-- findNamespaceId tests
 
-------------------------------------------------------------------------------
 
  
function suite:testFindNamespaceIdInputErrors()
+
{{hatnote/sandbox|Foo}}
    self:assertError(mHatnote.findNamespaceId, 9)
 
    self:assertError(mHatnote.findNamespaceId)
 
    self:assertError(mHatnote.findNamespaceId, 'A page', 9)
 
end
 
  
function suite:testFindNamespaceIdNamespaces()
+
* <code><nowiki>{{hatnote/sandbox|Foo|extraclasses=seealso}}</nowiki></code>
self:assertEquals(0, mHatnote.findNamespaceId('Foo'))
 
self:assertEquals(2, mHatnote.findNamespaceId('User:Example'))
 
self:assertEquals(14, mHatnote.findNamespaceId('Category:Example'))
 
end
 
  
function suite:testFindNamespaceIdColonRemoval()
+
{{hatnote/sandbox|Foo|extraclasses=seealso}}
self:assertEquals(14, mHatnote.findNamespaceId(':Category:Example'))
 
end
 
  
function suite:testFindNamespaceIdSkipColonRemoval()
+
* <code><nowiki>{{hatnote/sandbox|Foo|selfref=yes}}</nowiki></code>
self:assertNotEquals(14, mHatnote.findNamespaceId(':Category:Example', false))
 
end
 
  
-------------------------------------------------------------------------------
+
{{hatnote/sandbox|Foo|selfref=yes}}
-- formatPages tests
 
-------------------------------------------------------------------------------
 
  
function suite:testFormatPages()
+
== Testing main template ==
self:assertDeepEquals({'[[:Foo]]', '[[:Bar]]'}, mHatnote.formatPages('Foo', 'Bar'))
 
end
 
  
-------------------------------------------------------------------------------
+
* <code><nowiki>{{hatnote|category=no}}</nowiki></code>
-- formatPageTables tests
 
-------------------------------------------------------------------------------
 
  
function suite:testFormatPageTables()
+
{{hatnote|category=no}}
self:assertDeepEquals(
 
{'[[:Foo|foo]]', '[[:Bar|bar]]'},
 
mHatnote.formatPageTables({'Foo', 'foo'}, {'Bar', 'bar'})
 
)
 
end
 
  
-------------------------------------------------------------------------------
+
* <code><nowiki>{{hatnote|Foo}}</nowiki></code>
-- makeWikitextError tests
 
-------------------------------------------------------------------------------
 
  
function suite:testMakeWikitextError()
+
{{hatnote|Foo}}
self:assertEquals(
 
'<strong class="error">Error: Foo.</strong>[[Category:Hatnote templates with errors]]',
 
mHatnote.makeWikitextError('Foo', nil, nil, mw.title.new('Example'))
 
)
 
end
 
  
function suite:testMakeWikitextErrorHelpLink()
+
* <code><nowiki>{{hatnote|Foo|extraclasses=seealso}}</nowiki></code>
self:assertEquals(
 
'<strong class="error">Error: Foo ([[Bar|help]]).</strong>[[Category:Hatnote templates with errors]]',
 
mHatnote.makeWikitextError('Foo', 'Bar', nil, mw.title.new('Example'))
 
)
 
end
 
  
function suite:testMakeWikitextErrorManualCategorySuppression()
+
{{hatnote|Foo|extraclasses=seealso}}
self:assertEquals(
 
'<strong class="error">Error: Foo.</strong>',
 
mHatnote.makeWikitextError('Foo', nil, false, mw.title.new('Example'))
 
)
 
end
 
  
function suite:testMakeWikitextErrorTalkPageCategorySuppression()
+
* <code><nowiki>{{hatnote|Foo|selfref=yes}}</nowiki></code>
self:assertEquals(
 
'<strong class="error">Error: Foo.</strong>',
 
mHatnote.makeWikitextError('Foo', nil, nil, mw.title.new('Talk:Example'))
 
)
 
end
 
  
-------------------------------------------------------------------------------
+
{{hatnote|Foo|selfref=yes}}
-- formatLink tests
 
-------------------------------------------------------------------------------
 
 
 
function suite:testFormatLink()
 
self:assertEquals('[[:Foo]]', mHatnote._formatLink{link = 'Foo'})
 
end
 
 
 
function suite:testFormatLinkColonHandling()
 
self:assertEquals(
 
'[[:Category:Foo]]',
 
mHatnote._formatLink{link = ':Category:Foo'}
 
)
 
end
 
 
 
function suite:testFormatLinkSectionLinking()
 
self:assertEquals(
 
'[[:Foo#Bar|Foo §&nbsp;Bar]]',
 
mHatnote._formatLink{link = 'Foo#Bar'}
 
)
 
end
 
 
 
function suite:testFormatLinkPipeHandling()
 
self:assertEquals('[[:Foo|Bar]]', mHatnote._formatLink{link = 'Foo|Bar'})
 
end
 
 
 
function suite:testFormatLinkDisplay()
 
self:assertEquals(
 
'[[:Foo|Bar]]',
 
mHatnote._formatLink{link = 'Foo', display = 'Bar'}
 
)
 
end
 
 
 
function suite:testFormatLinkDisplayOverwritesManualPiping()
 
self:assertEquals(
 
'[[:Foo|Baz]]',
 
mHatnote._formatLink{link = 'Foo|Bar', display = 'Baz'}
 
)
 
end
 
 
 
function suite:testFormatLinkPageItalicization()
 
self:assertEquals(
 
"[[:Foo|<i>Foo</i>]]",
 
mHatnote._formatLink{link = 'Foo', italicizePage = true}
 
)
 
end
 
 
 
function suite:testFormatLinkPageItalicizationWithSection()
 
self:assertEquals(
 
"[[:Foo#Bar|<i>Foo</i> §&nbsp;Bar]]",
 
mHatnote._formatLink{link = 'Foo#Bar', italicizePage = true}
 
)
 
end
 
 
 
function suite:testFormatLinkSectionItalicization()
 
self:assertEquals(
 
"[[:Foo#Bar|Foo §&nbsp;<i>Bar</i>]]",
 
mHatnote._formatLink{link = 'Foo#Bar', italicizeSection = true}
 
)
 
end
 
 
 
function suite:testFormatLinkPageItalicizationIsOverwrittenByDisplay()
 
self:assertEquals(
 
"[[:Foo#Bar|Baz]]",
 
mHatnote._formatLink{
 
link = 'Foo#Bar',
 
display = 'Baz',
 
italicizePage = true,
 
}
 
)
 
end
 
 
 
function suite:testFormatLinkSectionItalicizationIsOverwrittenByDisplay()
 
self:assertEquals(
 
"[[:Foo#Bar|Baz]]",
 
mHatnote._formatLink{
 
link = 'Foo#Bar',
 
display = 'Baz',
 
italicizeSection = true,
 
}
 
)
 
end
 
 
 
function suite:testFormatLinkItalicizationIsOverwrittenByManualPiping()
 
self:assertEquals(
 
"[[:Foo#Bar|Baz]]",
 
mHatnote._formatLink{
 
link = 'Foo#Bar|Baz',
 
italicizePage = true,
 
italicizeSection = true,
 
}
 
)
 
end
 
 
 
function suite:testFormatLinkWithSectionOnlyLink()
 
self:assertEquals(
 
"[[:#Section|§&nbsp;Section]]",
 
mHatnote._formatLink{
 
link = '#Section',
 
}
 
)
 
end
 
 
 
function suite:testFormatLinkWithSectionOnlyLinkAndItalicizedSection()
 
self:assertEquals(
 
"[[:#Section|§&nbsp;<i>Section</i>]]",
 
mHatnote._formatLink{
 
link = '#Section',
 
italicizeSection = true,
 
}
 
)
 
end
 
 
 
function suite:testFormatLinkWithSectionOnlyLinkAndItalicizedPage()
 
self:assertEquals(
 
"[[:#Section|§&nbsp;Section]]",
 
mHatnote._formatLink{
 
link = '#Section',
 
italicizePage=true,
 
}
 
)
 
end
 
 
 
function suite:testFormatLinkEntryPoint()
 
self:assertParentFrameCallEquals('[[:Foo]]', mHatnote.formatLink, {'Foo'})
 
self:assertParentFrameCallEquals(
 
'[[:Foo|Bar]]',
 
mHatnote.formatLink, {'Foo', 'Bar'}
 
)
 
self:assertParentFrameCallEquals(
 
"[[:Foo#Bar|<i>Foo</i> §&nbsp;<i>Bar</i>]]",
 
mHatnote.formatLink,
 
{'Foo#Bar', italicizepage="yes", italicizesection="yes"}
 
)
 
self:assertParentFrameCallEquals(
 
"[[:Foo#Bar|Foo §&nbsp;Bar]]",
 
mHatnote.formatLink,
 
{'Foo#Bar', italicizepage="no", italicizesection="no"}
 
)
 
end
 
 
 
-------------------------------------------------------------------------------
 
-- hatnote tests
 
-------------------------------------------------------------------------------
 
 
 
function suite:testHatnoteInputErrors()
 
    self:assertError(mHatnote._hatnote, 9)
 
    self:assertError(mHatnote._hatnote)
 
    self:assertError(mHatnote._hatnote, 'A page', 9)
 
end
 
 
 
function suite:testHatnote()
 
self:assertEquals('<div role="note" class="hatnote navigation-not-searchable">Foo</div>', mHatnote._hatnote('Foo'))
 
end
 
 
 
function suite:testHatnoteSelfref()
 
self:assertEquals(
 
'<div role="note" class="hatnote navigation-not-searchable selfref">Foo</div>',
 
mHatnote._hatnote('Foo', {selfref = true})
 
)
 
end
 
 
 
function suite:testHatnoteExtraClasses()
 
self:assertEquals(
 
'<div role="note" class="hatnote navigation-not-searchable extraclass">Foo</div>',
 
mHatnote._hatnote('Foo', {extraclasses = 'extraclass'})
 
)
 
end
 
 
 
function suite:testHatnoteEntryPoint()
 
self:assertParentFrameCallEquals(
 
'<div role="note" class="hatnote navigation-not-searchable">Foo</div>',
 
mHatnote.hatnote,
 
{'Foo'}
 
)
 
end
 
 
 
function suite:testHatnoteEntryPointSelfref()
 
self:assertParentFrameCallEquals(
 
'<div role="note" class="hatnote navigation-not-searchable selfref">Foo</div>',
 
mHatnote.hatnote,
 
{'Foo', selfref = 'yes'}
 
)
 
end
 
 
 
function suite:testHatnoteEntryPointExtraClasses()
 
self:assertParentFrameCallEquals(
 
'<div role="note" class="hatnote navigation-not-searchable extraclass">Foo</div>',
 
mHatnote.hatnote,
 
{'Foo', extraclasses = 'extraclass'}
 
)
 
end
 
 
 
return suite
 

Revision as of 16:10, 6 September 2020

Testing sandbox

  • {{hatnote/sandbox|category=no}}

Script error: No such module "hatnote/sandbox".

  • {{hatnote/sandbox|Foo}}

Script error: No such module "hatnote/sandbox".

  • {{hatnote/sandbox|Foo|extraclasses=seealso}}

Script error: No such module "hatnote/sandbox".

  • {{hatnote/sandbox|Foo|selfref=yes}}

Script error: No such module "hatnote/sandbox".

Testing main template

  • {{hatnote|category=no}}

Error: no text specified (help).

  • {{hatnote|Foo}}
  • {{hatnote|Foo|extraclasses=seealso}}
  • {{hatnote|Foo|selfref=yes}}