diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/InfolinkTest.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/InfolinkTest.php | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/InfolinkTest.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/InfolinkTest.php new file mode 100644 index 00000000..6a47317a --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/InfolinkTest.php @@ -0,0 +1,243 @@ +<?php + +namespace SMW\Test; + +use SMW\Tests\TestEnvironment; +use SMWInfolink as Infolink; + +/** + * @covers \SMWInfolink + * @group semantic-mediawiki + * + * @license GNU GPL v2+ + * @since 1.9 + * + * @author mwjames + */ +class InfolinkTest extends \PHPUnit_Framework_TestCase { + + private $testEnvironment; + + protected function setUp() { + + $this->testEnvironment = new TestEnvironment( + [ + 'wgContLang' => \Language::factory( 'en' ) + ] + ); + } + + protected function tearDown() { + $this->testEnvironment->tearDown(); + parent::tearDown(); + } + + /** + * @dataProvider parameterDataProvider + */ + public function testEncodeParameters_ForTitle( array $params, array $expected ) { + + $encodeResult = Infolink::encodeParameters( $params, true ); + + $this->assertEquals( + $expected[0], + $encodeResult + ); + } + + /** + * @dataProvider parameterDataProvider + */ + public function testEncodeParameters_NotForTitle( array $params, array $expected ) { + + $encodeResult = Infolink::encodeParameters( $params, false ); + + $this->assertEquals( + $expected[1], + $encodeResult + ); + } + + public function testNewPropertySearchLink_GetText() { + + $instance = Infolink::newPropertySearchLink( 'Foo', 'Bar', 'Foobar' ); + + $instance->setCompactLink( false ); + + $this->assertContains( + 'title=Special:SearchByProperty&x=%3ABar%2FFoobar', + $instance->getText( SMW_OUTPUT_RAW ) + ); + + $instance->setCompactLink( true ); + + $this->assertContains( + 'title=Special:SearchByProperty&cl=OkJhci9Gb29iYXI', + $instance->getText( SMW_OUTPUT_RAW ) + ); + + $this->assertEquals( + $instance->getURL(), + $instance->getText( SMW_OUTPUT_RAW ) + ); + } + + public function testGetURL() { + + $instance = new Infolink( true, 'Foo', 'Bar/Foobar' ); + + $instance->setCompactLink( true ); + + $this->assertContains( + '/Bar/Foobar', + $instance->getLocalURL() + ); + + $this->assertContains( + '/Bar/Foobar', + $instance->getURL() + ); + + $instance->setParameter( 123, 'foo' ); + + $this->assertContains( + 'title=Bar/Foobar&cl=Zm9vPTEyMw', + $instance->getLocalURL() + ); + + $this->assertContains( + 'title=Bar/Foobar&cl=Zm9vPTEyMw', + $instance->getURL() + ); + + $instance->setCompactLink( false ); + + $this->assertContains( + 'title=Bar/Foobar&foo=123', + $instance->getLocalURL() + ); + + $this->assertContains( + 'title=Bar/Foobar&foo=123', + $instance->getURL() + ); + } + + /** + * @dataProvider base64Provider + */ + public function testEncodeBase64( $source, $target ) { + + $this->assertContains( + $target, + Infolink::encodeCompactLink( $source ) + ); + } + + /** + * @dataProvider base64Provider + */ + public function testEncodeDecodeBase64RoundTrip( $source, $target ) { + + $this->assertEquals( + $source, + Infolink::decodeCompactLink( Infolink::encodeCompactLink( $source ) ) + ); + } + + /** + * @dataProvider base64DecodeProvider + */ + public function testDecodeBase64( $source, $target ) { + + $this->assertEquals( + $source, + Infolink::decodeCompactLink( $target ) + ); + } + + public function testNotDecodable() { + + $this->assertNotContains( + '%3ABar/Foobar', + Infolink::decodeCompactLink( 'eD0lM0FCYXIlMkZGb29iYXI' ) + ); + } + + public function base64Provider() { + + yield [ + '%3ABar/Foobar', + 'cl:JTNBQmFyL0Zvb2Jhcg' + ]; + + yield [ + '-5B-5BProperty%3A%2B-5D-5D-20-5B-5BCategory%3ALorem-20ipsum-5D-5D/-3FHas-20description%3DDescription/-3FHas-20type/mainlabel=/format=table/class=datatable/sort=/order=asc/offset=100/limit=50', + 'cl:YzpFijEOgzAMRU_DGCUFMXooRVUHhl7BgKkiJTiy3YHbF8qA9Jf33ndt59ruLVxIbKuae1Xvoj9WB_ePDzT6sBxxYKG8h1j0m8-bd83zhbrLmXSSWCzyWjV9f9F1sa2QzxjXhCMl8AtLRgPDMZGfEqrCjIYnK4uBZ5lJAHXyvCxKBrcQfIo5GrThBw' + ]; + } + + public function base64DecodeProvider() { + + yield [ + '%3ABar/Foobar', + 'cl:JTNBQmFyL0Zvb2Jhcg' + ]; + + yield [ + '%3ABar/Foobar', + '%3ABar/Foobar' + ]; + + yield [ + '-5B-5BProperty%3A%2B-5D-5D-20-5B-5BCategory%3ALorem-20ipsum-5D-5D/-3FHas-20description%3DDescription/-3FHas-20type/mainlabel=/format=table/class=datatable/sort=/order=asc/offset=100/limit=50', + 'cl:YzpNijEOgzAMRU-TbJVSEKOHtgh16NArGDBVpARHtiuV2zeIBekv773_g0t3r3sLFxLbXHtzTRX9viYc8YFGH5Y9vlgo1xCLfvNxc81waYcnatUz6SSxWOTVtX1_otPJtkI-Y1wTjpTALywZDQzHRH5KqAozGh6sLAaeZSYB1MnzsigZXEPwKeZo0IU' + ]; + + yield [ + '-5B-5BProperty%3A%2B-5D-5D-20-5B-5BCategory%3ALorem-20ipsum-5D-5D/-3FHas-20description%3DDescription/-3FHas-20type/mainlabel=/format=table/class=datatable/sort=/order=asc/offset=100/limit=50', + 'cl:YzpFijEOgzAMRU_DGCUFMXooRVUHhl7BgKkiJTiy3YHbF8qA9Jf33ndt59ruLVxIbKuae1Xvoj9WB_ePDzT6sBxxYKG8h1j0m8-bd83zhbrLmXSSWCzyWjV9f9F1sa2QzxjXhCMl8AtLRgPDMZGfEqrCjIYnK4uBZ5lJAHXyvCxKBrcQfIo5GrThBw' + ]; + } + + public function parameterDataProvider() { + return [ + [ + // #0 + [ + 'format=template', + 'link=none' + ], + [ + 'format=template/link=none', + 'x=format%3Dtemplate%2Flink%3Dnone' + ] + ], + + // #1 Bug 47010 (space encoding, named args => named%20args) + [ + [ + 'format=template', + 'link=none', + 'named args=1' + ], + [ + 'format=template/link=none/named-20args=1', + 'x=format%3Dtemplate%2Flink%3Dnone%2Fnamed-20args%3D1' + ] + ], + + // #2 "\" + [ + [ + "format=foo\bar", + ], + [ + 'format=foo-5Cbar', + 'x=format%3Dfoo-5Cbar' + ] + ], + ]; + } + +} |