[ 'foo', 'bar', 'baz', 'foo-bar-baz' ], 'Nothing' => [ null, null, '', '' ], 'Invalid $database' => [ 0, 'bar', '', '', true ], 'Invalid $schema' => [ 'foo', 0, '', '', true ], 'Invalid $prefix' => [ 'foo', 'bar', 0, '', true ], 'Dash' => [ 'foo-bar', 'baz', 'baa', 'foo?hbar-baz-baa' ], 'Question mark' => [ 'foo?bar', 'baz', 'baa', 'foo??bar-baz-baa' ], ]; } /** * @dataProvider provideConstruct */ public function testConstruct( $db, $schema, $prefix, $id, $exception = false ) { if ( $exception ) { $this->setExpectedException( InvalidArgumentException::class ); new DatabaseDomain( $db, $schema, $prefix ); return; } $domain = new DatabaseDomain( $db, $schema, $prefix ); $this->assertInstanceOf( DatabaseDomain::class, $domain ); $this->assertEquals( $db, $domain->getDatabase() ); $this->assertEquals( $schema, $domain->getSchema() ); $this->assertEquals( $prefix, $domain->getTablePrefix() ); $this->assertEquals( $id, $domain->getId() ); $this->assertEquals( $id, strval( $domain ), 'toString' ); } public static function provideNewFromId() { return [ 'Basic' => [ 'foo', 'foo', null, '' ], 'db+prefix' => [ 'foo-bar', 'foo', null, 'bar' ], 'db+schema+prefix' => [ 'foo-bar-baz', 'foo', 'bar', 'baz' ], '?h -> -' => [ 'foo?hbar-baz-baa', 'foo-bar', 'baz', 'baa' ], '?? -> ?' => [ 'foo??bar-baz-baa', 'foo?bar', 'baz', 'baa' ], '? is left alone' => [ 'foo?bar-baz-baa', 'foo?bar', 'baz', 'baa' ], 'too many parts' => [ 'foo-bar-baz-baa', '', '', '', true ], 'from instance' => [ DatabaseDomain::newUnspecified(), null, null, '' ], ]; } /** * @dataProvider provideNewFromId */ public function testNewFromId( $id, $db, $schema, $prefix, $exception = false ) { if ( $exception ) { $this->setExpectedException( InvalidArgumentException::class ); DatabaseDomain::newFromId( $id ); return; } $domain = DatabaseDomain::newFromId( $id ); $this->assertInstanceOf( DatabaseDomain::class, $domain ); $this->assertEquals( $db, $domain->getDatabase() ); $this->assertEquals( $schema, $domain->getSchema() ); $this->assertEquals( $prefix, $domain->getTablePrefix() ); } public static function provideEquals() { return [ 'Basic' => [ 'foo', 'foo', null, '' ], 'db+prefix' => [ 'foo-bar', 'foo', null, 'bar' ], 'db+schema+prefix' => [ 'foo-bar-baz', 'foo', 'bar', 'baz' ], '?h -> -' => [ 'foo?hbar-baz-baa', 'foo-bar', 'baz', 'baa' ], '?? -> ?' => [ 'foo??bar-baz-baa', 'foo?bar', 'baz', 'baa' ], 'Nothing' => [ '', null, null, '' ], ]; } /** * @dataProvider provideEquals * @covers Wikimedia\Rdbms\DatabaseDomain::equals */ public function testEquals( $id, $db, $schema, $prefix ) { $fromId = DatabaseDomain::newFromId( $id ); $this->assertInstanceOf( DatabaseDomain::class, $fromId ); $constructed = new DatabaseDomain( $db, $schema, $prefix ); $this->assertTrue( $constructed->equals( $id ), 'constructed equals string' ); $this->assertTrue( $fromId->equals( $id ), 'fromId equals string' ); $this->assertTrue( $constructed->equals( $fromId ), 'compare constructed to newId' ); $this->assertTrue( $fromId->equals( $constructed ), 'compare newId to constructed' ); } /** * @covers Wikimedia\Rdbms\DatabaseDomain::newUnspecified */ public function testNewUnspecified() { $domain = DatabaseDomain::newUnspecified(); $this->assertInstanceOf( DatabaseDomain::class, $domain ); $this->assertTrue( $domain->equals( '' ) ); $this->assertSame( null, $domain->getDatabase() ); $this->assertSame( null, $domain->getSchema() ); $this->assertSame( '', $domain->getTablePrefix() ); } public static function provideIsCompatible() { return [ 'Basic' => [ 'foo', 'foo', null, '', true ], 'db+prefix' => [ 'foo-bar', 'foo', null, 'bar', true ], 'db+schema+prefix' => [ 'foo-bar-baz', 'foo', 'bar', 'baz', true ], 'db+dontcare_schema+prefix' => [ 'foo-bar-baz', 'foo', null, 'baz', false ], '?h -> -' => [ 'foo?hbar-baz-baa', 'foo-bar', 'baz', 'baa', true ], '?? -> ?' => [ 'foo??bar-baz-baa', 'foo?bar', 'baz', 'baa', true ], 'Nothing' => [ '', null, null, '', true ], 'dontcaredb+dontcaredbschema+prefix' => [ 'mywiki-mediawiki-prefix', null, null, 'prefix', false ], 'dontcaredb+schema+prefix' => [ 'mywiki-schema-prefix', null, 'schema', 'prefix', false ], 'db+dontcareschema+prefix' => [ 'mywiki-schema-prefix', 'mywiki', null, 'prefix', false ], 'postgres-db-jobqueue' => [ 'postgres-mediawiki-', 'postgres', null, '', false ] ]; } /** * @dataProvider provideIsCompatible * @covers Wikimedia\Rdbms\DatabaseDomain::isCompatible */ public function testIsCompatible( $id, $db, $schema, $prefix, $transitive ) { $compareIdObj = DatabaseDomain::newFromId( $id ); $this->assertInstanceOf( DatabaseDomain::class, $compareIdObj ); $fromId = new DatabaseDomain( $db, $schema, $prefix ); $this->assertTrue( $fromId->isCompatible( $id ), 'constructed equals string' ); $this->assertTrue( $fromId->isCompatible( $compareIdObj ), 'fromId equals string' ); $this->assertEquals( $transitive, $compareIdObj->isCompatible( $fromId ), 'test transitivity of nulls components' ); } public static function provideIsCompatible2() { return [ 'db+schema+prefix' => [ 'mywiki-schema-prefix', 'thatwiki', 'schema', 'prefix' ], 'dontcaredb+dontcaredbschema+prefix' => [ 'thatwiki-mediawiki-otherprefix', null, null, 'prefix' ], 'dontcaredb+schema+prefix' => [ 'mywiki-otherschema-prefix', null, 'schema', 'prefix' ], 'db+dontcareschema+prefix' => [ 'notmywiki-schema-prefix', 'mywiki', null, 'prefix' ], ]; } /** * @dataProvider provideIsCompatible2 * @covers Wikimedia\Rdbms\DatabaseDomain::isCompatible */ public function testIsCompatible2( $id, $db, $schema, $prefix ) { $compareIdObj = DatabaseDomain::newFromId( $id ); $this->assertInstanceOf( DatabaseDomain::class, $compareIdObj ); $fromId = new DatabaseDomain( $db, $schema, $prefix ); $this->assertFalse( $fromId->isCompatible( $id ), 'constructed equals string' ); $this->assertFalse( $fromId->isCompatible( $compareIdObj ), 'fromId equals string' ); } /** * @covers Wikimedia\Rdbms\DatabaseDomain::isUnspecified */ public function testIsUnspecified() { $domain = new DatabaseDomain( null, null, '' ); $this->assertTrue( $domain->isUnspecified() ); $domain = new DatabaseDomain( 'mywiki', null, '' ); $this->assertFalse( $domain->isUnspecified() ); $domain = new DatabaseDomain( 'mywiki', null, '' ); $this->assertFalse( $domain->isUnspecified() ); } }