summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/QueryPrinterFactoryTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/QueryPrinterFactoryTest.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/QueryPrinterFactoryTest.php199
1 files changed, 199 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/QueryPrinterFactoryTest.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/QueryPrinterFactoryTest.php
new file mode 100644
index 00000000..ea3d0609
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/QueryPrinterFactoryTest.php
@@ -0,0 +1,199 @@
+<?php
+
+namespace SMW\Tests;
+
+use SMW\QueryPrinterFactory;
+use SMW\QueryResultPrinter;
+use SMW\TableResultPrinter;
+use SMWListResultPrinter;
+
+/**
+ * @covers \SMW\QueryPrinterFactory
+ * @group semantic-mediawiki
+ *
+ * @license GNU GPL v2+
+ * @since 1.9
+ *
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class QueryPrinterFactoryTest extends \PHPUnit_Framework_TestCase {
+
+ use PHPUnitCompat;
+
+ public function testSingleton() {
+ $instance = QueryPrinterFactory::singleton();
+
+ $this->assertInstanceOf( QueryPrinterFactory::class, $instance );
+ $this->assertTrue( QueryPrinterFactory::singleton() === $instance );
+
+ global $smwgResultFormats, $smwgResultAliases;
+
+ foreach ( $smwgResultFormats as $formatName => $printerClass ) {
+ $this->assertTrue( $instance->hasFormat( $formatName ) );
+ $this->assertInstanceOf( $printerClass, $instance->getPrinter( $formatName ) );
+ }
+
+ foreach ( $smwgResultAliases as $formatName => $aliases ) {
+ $printerClass = $smwgResultFormats[$formatName];
+
+ foreach ( $aliases as $alias ) {
+ $this->assertTrue( $instance->hasFormat( $alias ) );
+ $this->assertInstanceOf( $printerClass, $instance->getPrinter( $formatName ) );
+ }
+ }
+ }
+
+ public function testRegisterFormat() {
+ $factory = new QueryPrinterFactory();
+
+ $factory->registerFormat( 'table', TableResultPrinter::class );
+ $factory->registerFormat( 'list', SMWListResultPrinter::class );
+
+ $this->assertContains( 'table', $factory->getFormats() );
+ $this->assertContains( 'list', $factory->getFormats() );
+ $this->assertCount( 2, $factory->getFormats() );
+
+ $factory->registerFormat( 'table', SMWListResultPrinter::class );
+
+ $printer = $factory->getPrinter( 'table' );
+
+ $this->assertInstanceOf( SMWListResultPrinter::class, $printer );
+ }
+
+ public function testRegisterAliases() {
+ $factory = new QueryPrinterFactory();
+
+ $this->assertEquals( 'foo', $factory->getCanonicalName( 'foo' ) );
+
+ $factory->registerAliases( 'foo', [] );
+ $factory->registerAliases( 'foo', [ 'bar' ] );
+ $factory->registerAliases( 'foo', [ 'baz' ] );
+ $factory->registerAliases( 'ohi', [ 'there', 'o_O' ] );
+
+ $this->assertEquals( 'foo', $factory->getCanonicalName( 'foo' ) );
+
+ $this->assertEquals( 'foo', $factory->getCanonicalName( 'bar' ) );
+ $this->assertEquals( 'foo', $factory->getCanonicalName( 'baz' ) );
+
+ $this->assertEquals( 'ohi', $factory->getCanonicalName( 'there' ) );
+ $this->assertEquals( 'ohi', $factory->getCanonicalName( 'o_O' ) );
+
+ $factory->registerAliases( 'foo', [ 'o_O' ] );
+
+ $this->assertEquals( 'foo', $factory->getCanonicalName( 'o_O' ) );
+ }
+
+ public function testGetPrinter() {
+ $factory = QueryPrinterFactory::singleton();
+
+ foreach ( $factory->getFormats() as $format ) {
+ $printer = $factory->getPrinter( $format );
+ $this->assertInstanceOf( QueryResultPrinter::class, $printer );
+ }
+
+ // In case there are no formats PHPUnit would otherwise complain here.
+ $this->assertTrue( true );
+ }
+
+ public function testGetFormats() {
+ $factory = new QueryPrinterFactory();
+
+ $this->assertInternalType( 'array', $factory->getFormats() );
+
+ $factory->registerFormat( 'table', TableResultPrinter::class );
+ $factory->registerFormat( 'list', SMWListResultPrinter::class );
+
+ $factory->registerAliases( 'foo', [ 'bar' ] );
+ $factory->registerAliases( 'foo', [ 'baz' ] );
+ $factory->registerAliases( 'ohi', [ 'there', 'o_O' ] );
+
+ $formats = $factory->getFormats();
+ $this->assertInternalType( 'array', $formats );
+
+ $this->assertContains( 'table', $factory->getFormats() );
+ $this->assertContains( 'list', $factory->getFormats() );
+ $this->assertCount( 2, $factory->getFormats() );
+ }
+
+ public function testHasFormat() {
+ $factory = new QueryPrinterFactory();
+
+ $this->assertFalse( $factory->hasFormat( 'ohi' ) );
+
+ $factory->registerFormat( 'ohi', 'SMWTablePrinter' );
+ $factory->registerAliases( 'ohi', [ 'there', 'o_O' ] );
+
+ $this->assertTrue( $factory->hasFormat( 'ohi' ) );
+ $this->assertTrue( $factory->hasFormat( 'there' ) );
+ $this->assertTrue( $factory->hasFormat( 'o_O' ) );
+
+ $factory = QueryPrinterFactory::singleton();
+
+ foreach ( $factory->getFormats() as $format ) {
+ $this->assertTrue( $factory->hasFormat( $format ) );
+ }
+ }
+
+ public function testGetPrinterThrowsException() {
+
+ $factory = new QueryPrinterFactory();
+
+ $this->setExpectedException( '\SMW\Query\Exception\ResultFormatNotFoundException' );
+ $factory->getPrinter( 'lula' );
+ }
+
+ public function testGetCanonicalNameThrowsException() {
+
+ $factory = new QueryPrinterFactory();
+
+ $this->setExpectedException( 'InvalidArgumentException' );
+ $factory->getCanonicalName( 9001 );
+ }
+
+ /**
+ * @dataProvider registerFormatExceptioProvider
+ */
+ public function testRegisterFormatThrowsException( $formatName, $class ) {
+
+ $factory = new QueryPrinterFactory();
+
+ $this->setExpectedException( 'InvalidArgumentException' );
+ $factory->registerFormat( $formatName, $class );
+ }
+
+ /**
+ * Register format exception data provider
+ *
+ * @return array
+ */
+ public function registerFormatExceptioProvider() {
+ return [
+ [ 1001, 'Foo' ],
+ [ 'Foo', 9001 ],
+ ];
+ }
+
+ /**
+ * @dataProvider registerAliasesExceptionProvider
+ */
+ public function testRegisterAliasesThrowsException( $formatName, array $aliases ) {
+
+ $factory = new QueryPrinterFactory();
+
+ $this->setExpectedException( 'InvalidArgumentException' );
+ $factory->registerAliases( $formatName, $aliases );
+ }
+
+ /**
+ * Register aliases exception data provider
+ *
+ * @return array
+ */
+ public function registerAliasesExceptionProvider() {
+ return [
+ [ 1001, [ 'Foo' => 'Bar' ] ],
+ [ 'Foo', [ 'Foo' => 9001 ] ],
+ ];
+ }
+
+}