/** * @dataProvider problematicMessageKeyProvider */ public function testKeyManglingWithPrefixing($key, $comment) { $matcher = new StringMatcher('prefix', array('*')); $mangled = $matcher->mangle($key); $title = Title::makeTitleSafe(NS_MEDIAWIKI, $mangled); $this->assertInstanceOf('Title', $title, "Key '{$mangled}' did not produce a valid title"); $unmangled = $matcher->unMangle($mangled); $this->assertEquals($key, $unmangled, 'Mangling is reversible'); }
/** * Creates MediaWikiExtensionMessageGroup objects from parsed data. * @param string $id unique group id already prefixed * @param array $info array of group info * @return MediaWikiExtensionMessageGroup */ protected function createMessageGroup($id, $info) { $conf = array(); $conf['BASIC']['class'] = 'MediaWikiExtensionMessageGroup'; $conf['BASIC']['id'] = $id; $conf['BASIC']['namespace'] = $this->namespace; $conf['BASIC']['label'] = $info['name']; if (isset($info['desc'])) { $conf['BASIC']['description'] = $info['desc']; } else { $conf['BASIC']['descriptionmsg'] = $info['descmsg']; $conf['BASIC']['extensionurl'] = $info['url']; } if ($info['format'] === 'json') { $conf['FILES']['class'] = 'JsonFFS'; } else { $conf['FILES']['class'] = 'MediaWikiExtensionFFS'; } $conf['FILES']['sourcePattern'] = $this->path . '/' . $info['file']; // @todo Find a better way if (isset($info['aliasfile'])) { $conf['FILES']['aliasFileSource'] = $this->path . '/' . $info['aliasfile']; $conf['FILES']['aliasFile'] = $info['aliasfile']; } if (isset($info['magicfile'])) { $conf['FILES']['magicFileSource'] = $this->path . '/' . $info['magicfile']; $conf['FILES']['magicFile'] = $info['magicfile']; } if (isset($info['prefix'])) { $conf['MANGLER']['class'] = 'StringMatcher'; $conf['MANGLER']['prefix'] = $info['prefix']; $conf['MANGLER']['patterns'] = $info['mangle']; $mangler = new StringMatcher($info['prefix'], $info['mangle']); if (isset($info['ignored'])) { $info['ignored'] = $mangler->mangle($info['ignored']); } if (isset($info['optional'])) { $info['optional'] = $mangler->mangle($info['optional']); } } $conf['CHECKER']['class'] = 'MediaWikiMessageChecker'; $conf['CHECKER']['checks'] = array('pluralCheck', 'pluralFormsCheck', 'wikiParameterCheck', 'wikiLinksCheck', 'XhtmlCheck', 'braceBalanceCheck', 'pagenameMessagesCheck', 'miscMWChecks'); $conf['INSERTABLES']['class'] = 'MediaWikiInsertablesSuggester'; if (isset($info['optional'])) { $conf['TAGS']['optional'] = $info['optional']; } if (isset($info['ignored'])) { $conf['TAGS']['ignored'] = $info['ignored']; } return MessageGroupBase::factory($conf); }