mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto
synced 2024-11-27 17:50:06 +00:00
Merge "Properly handle spaces/underscores in mw.site.namespaces"
This commit is contained in:
commit
47fc1462c4
|
@ -126,6 +126,8 @@ class Scribunto_LuaSiteLibrary extends Scribunto_LuaLibraryBase {
|
|||
public function getNsIndex( $name = null ) {
|
||||
global $wgContLang;
|
||||
$this->checkType( 'getNsIndex', 1, $name, 'string' );
|
||||
// PHP call is case-insensitive but chokes on non-standard spaces/underscores.
|
||||
$name = trim( preg_replace( '/[\s_]+/', '_', $name ), '_' );
|
||||
return array( $wgContLang->getNsIndex( $name ) );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,17 @@
|
|||
local testframework = require 'Module:TestFramework'
|
||||
|
||||
local function identity( ... )
|
||||
return ...
|
||||
local function nsTest( ... )
|
||||
local args = { ... }
|
||||
local t = mw.site.namespaces
|
||||
local path = 'mw.site.namespaces'
|
||||
for i = 1, #args do
|
||||
t = t[args[i]]
|
||||
path = path .. string.format( '[%q]', args[i] )
|
||||
if t == nil then
|
||||
error( path .. ' is nil!' )
|
||||
end
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
return testframework.getTestProvider( {
|
||||
|
@ -39,37 +49,62 @@ return testframework.getTestProvider( {
|
|||
},
|
||||
|
||||
{ name = 'Project namespace by number',
|
||||
func = identity, args = { mw.site.namespaces[4].canonicalName },
|
||||
func = nsTest, args = { 4, 'canonicalName' },
|
||||
expect = { 'Project' }
|
||||
},
|
||||
|
||||
{ name = 'Project namespace by name',
|
||||
func = identity, args = { mw.site.namespaces.Project.id },
|
||||
func = nsTest, args = { 'Project', 'id' },
|
||||
expect = { 4 }
|
||||
},
|
||||
|
||||
{ name = 'Project namespace by name (2)',
|
||||
func = identity, args = { mw.site.namespaces.PrOjEcT.canonicalName },
|
||||
func = nsTest, args = { 'PrOjEcT', 'canonicalName' },
|
||||
expect = { 'Project' }
|
||||
},
|
||||
|
||||
{ name = 'Project namespace subject is itself',
|
||||
func = identity, args = { mw.site.namespaces.Project.subject.canonicalName },
|
||||
func = nsTest, args = { 'Project', 'subject', 'canonicalName' },
|
||||
expect = { 'Project' }
|
||||
},
|
||||
|
||||
{ name = 'Project talk namespace via Project',
|
||||
func = identity, args = { mw.site.namespaces.Project.talk.canonicalName },
|
||||
func = nsTest, args = { 'Project', 'talk', 'canonicalName' },
|
||||
expect = { 'Project talk' }
|
||||
},
|
||||
|
||||
{ name = 'Project namespace via Project talk',
|
||||
func = identity, args = { mw.site.namespaces.Project_talk.subject.canonicalName },
|
||||
func = nsTest, args = { 'Project_talk', 'subject', 'canonicalName' },
|
||||
expect = { 'Project' }
|
||||
},
|
||||
|
||||
{ name = 'Project talk namespace via Project (associated)',
|
||||
func = identity, args = { mw.site.namespaces.Project.associated.canonicalName },
|
||||
func = nsTest, args = { 'Project', 'associated', 'canonicalName' },
|
||||
expect = { 'Project talk' }
|
||||
},
|
||||
|
||||
{ name = 'Project talk namespace by name (standard caps, no underscores)',
|
||||
func = nsTest, args = { 'Project talk', 'id' },
|
||||
expect = { 5 }
|
||||
},
|
||||
|
||||
{ name = 'Project talk namespace by name (standard caps, underscores)',
|
||||
func = nsTest, args = { 'Project_talk', 'id' },
|
||||
expect = { 5 }
|
||||
},
|
||||
|
||||
{ name = 'Project talk namespace by name (odd caps, no underscores)',
|
||||
func = nsTest, args = { 'pRoJeCt tAlK', 'id' },
|
||||
expect = { 5 }
|
||||
},
|
||||
|
||||
{ name = 'Project talk namespace by name (odd caps, underscores)',
|
||||
func = nsTest, args = { 'pRoJeCt_tAlK', 'id' },
|
||||
expect = { 5 }
|
||||
},
|
||||
|
||||
{ name = 'Project talk namespace by name (extraneous spaces and underscores)',
|
||||
func = nsTest, args = { '_ _ _Project_ _talk_ _ _', 'id' },
|
||||
expect = { 5 }
|
||||
},
|
||||
} )
|
||||
|
|
Loading…
Reference in a new issue