Merge "Properly handle spaces/underscores in mw.site.namespaces"

This commit is contained in:
jenkins-bot 2013-10-31 19:36:03 +00:00 committed by Gerrit Code Review
commit 47fc1462c4
2 changed files with 46 additions and 9 deletions

View file

@ -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 ) );
}
}

View file

@ -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 }
},
} )