assertEquals($expected, $resolver->resolveId($id)); } /** * Tilde start page bahaviour * * Please note that a ~ alone is the same as ~: */ public function testTildeStartPage() { $context = 'foo:context'; $resolver = new PageResolver($context); // the $context page itself does not exist // a link like that is usually not possible, but we fall back to standard start // page behaviour $this->assertEquals("$context:start", $resolver->resolveId('~:')); $this->assertEquals("$context:start", $resolver->resolveId('~')); // now $context has become the start page saveWikiText($context, 'test', 'test'); $this->assertEquals($context, $resolver->resolveId('~:')); // now we have a startpage named like the namespace saveWikiText("$context:context", 'test', 'test'); $this->assertEquals("$context:context", $resolver->resolveId('~:')); $this->assertEquals("$context:context", $resolver->resolveId('~')); // now we have a dedicated start page saveWikiText("$context:start", 'test', 'test'); $this->assertEquals("$context:start", $resolver->resolveId('~:')); $this->assertEquals("$context:start", $resolver->resolveId('~')); } public function testResolveStartPage() { $resolver = new PageResolver('arbitrary'); $expect = 'foo:start'; $actual = $this->callInaccessibleMethod($resolver, 'resolveStartPage', ['foo:', false, false]); $this->assertEquals($expect, $actual, 'default non-existing'); saveWikiText('foo', 'test', 'test'); $expect = 'foo'; $actual = $this->callInaccessibleMethod($resolver, 'resolveStartPage', ['foo:', false, false]); $this->assertEquals($expect, $actual, 'page like namespace outside'); saveWikiText('foo:foo', 'test', 'test'); $expect = 'foo:foo'; $actual = $this->callInaccessibleMethod($resolver, 'resolveStartPage', ['foo:', false, false]); $this->assertEquals($expect, $actual, 'page like namespace inside'); saveWikiText('foo:start', 'test', 'test'); $expect = 'foo:start'; $actual = $this->callInaccessibleMethod($resolver, 'resolveStartPage', ['foo:', false, false]); $this->assertEquals($expect, $actual, 'default existing'); } /** * @return array * @see testResolveRelatives */ public function provideResolveRelatives() { return [ ['foo', 'foo'], ['foo:bar', 'foo:bar'], ['foo:..:bar', 'bar'], ['foo:..:..:bar', 'bar'], ['foo:.:bar', 'foo:bar'], ['foo:.:..:.:bar', 'bar'], ['foo:.:.:.:bar', 'foo:bar'], ['foo::::bar', 'foo:bar'], ['foo::::bar:', 'foo:bar:'], ['foo:bar:', 'foo:bar:'], ]; } /** * @dataProvider provideResolveRelatives * @param string $input * @param string $expected */ public function testResolveRelatives($input, $expected) { $resolver = new PageResolver('arbitrary'); $actual = $this->callInaccessibleMethod($resolver, 'resolveRelatives', [$input]); $this->assertEquals($expected, $actual); } public function testAutoPlural() { $resolver = new PageResolver('arbitrary'); $singular = 'some:page'; $plural = 'some:pages'; $actual = $this->callInaccessibleMethod($resolver, 'resolveAutoPlural', [$singular, '', false]); $this->assertEquals($singular, $actual); // no pages exist saveWikiText($plural, 'plural', 'plural'); $actual = $this->callInaccessibleMethod($resolver, 'resolveAutoPlural', [$singular, '', false]); $this->assertEquals($plural, $actual); // plural exists saveWikiText($singular, 'singular', 'singular'); $actual = $this->callInaccessibleMethod($resolver, 'resolveAutoPlural', [$singular, '', false]); $this->assertEquals($singular, $actual); // requested singular has preference } }