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