wiki.techinc.nl/tests/phpunit/unit/includes/Revision/SlotRoleRegistryTest.php
James D. Forrester ad06527fb4 Reorg: Namespace the Title class
This is moderately messy.

Process was principally:

* xargs rg --files-with-matches '^use Title;' | grep 'php$' | \
  xargs -P 1 -n 1 sed -i -z 's/use Title;/use MediaWiki\\Title\\Title;/1'
* rg --files-without-match 'MediaWiki\\Title\\Title;' . | grep 'php$' | \
  xargs rg --files-with-matches 'Title\b' | \
  xargs -P 1 -n 1 sed -i -z 's/\nuse /\nuse MediaWiki\\Title\\Title;\nuse /1'
* composer fix

Then manual fix-ups for a few files that don't have any use statements.

Bug: T166010
Follows-Up: Ia5d8cb759dc3bc9e9bbe217d0fb109e2f8c4101a
Change-Id: If8fc9d0d95fc1a114021e282a706fc3e7da3524b
2023-03-02 08:46:53 -05:00

198 lines
6.3 KiB
PHP

<?php
namespace MediaWiki\Tests\Unit\Revision;
use InvalidArgumentException;
use LogicException;
use MediaWiki\Content\IContentHandlerFactory;
use MediaWiki\HookContainer\HookContainer;
use MediaWiki\Revision\MainSlotRoleHandler;
use MediaWiki\Revision\SlotRecord;
use MediaWiki\Revision\SlotRoleHandler;
use MediaWiki\Revision\SlotRoleRegistry;
use MediaWiki\Storage\NameTableStore;
use MediaWiki\Title\Title;
use MediaWiki\Title\TitleFactory;
use MediaWikiUnitTestCase;
use Wikimedia\Assert\PostconditionException;
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry
*/
class SlotRoleRegistryTest extends MediaWikiUnitTestCase {
private function makeNameTableStore( array $names = [] ) {
$mock = $this->createMock( NameTableStore::class );
$mock->method( 'getMap' )
->willReturn( $names );
return $mock;
}
private function newSlotRoleRegistry( NameTableStore $roleNameStore = null ) {
if ( !$roleNameStore ) {
$roleNameStore = $this->makeNameTableStore();
}
return new SlotRoleRegistry( $roleNameStore );
}
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry::defineRole()
* @covers \MediaWiki\Revision\SlotRoleRegistry::getDefinedRoles()
* @covers \MediaWiki\Revision\SlotRoleRegistry::getKnownRoles()
* @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
*/
public function testDefineRole() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( 'FOO', static function ( $role ) {
return new SlotRoleHandler( $role, 'FooModel' );
} );
$this->assertTrue( $registry->isDefinedRole( 'foo' ) );
$this->assertTrue( $registry->isDefinedRole( 'Foo' ) );
$this->assertContains( 'foo', $registry->getDefinedRoles() );
$this->assertContains( 'foo', $registry->getKnownRoles() );
$this->assertNotContains( 'FOO', $registry->getDefinedRoles() );
$this->assertNotContains( 'FOO', $registry->getKnownRoles() );
$handler = $registry->getRoleHandler( 'foo' );
$this->assertSame( 'foo', $handler->getRole() );
$handler = $registry->getRoleHandler( 'Foo' );
$this->assertSame( 'foo', $handler->getRole() );
$title = $this->createMock( Title::class );
$this->assertSame( 'FooModel', $handler->getDefaultModel( $title ) );
}
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry::defineRole()
*/
public function testDefineRoleFailsForDupe() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( 'foo', static function ( $role ) {
return new SlotRoleHandler( $role, 'FooModel' );
} );
$this->expectException( LogicException::class );
$registry->defineRole( 'FOO', static function ( $role ) {
return new SlotRoleHandler( $role, 'FooModel' );
} );
}
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry::defineRoleWithModel()
* @covers \MediaWiki\Revision\SlotRoleRegistry::getDefinedRoles()
* @covers \MediaWiki\Revision\SlotRoleRegistry::getKnownRoles()
* @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
*/
public function testDefineRoleWithContentModel() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRoleWithModel( 'FOO', 'FooModel' );
$this->assertTrue( $registry->isDefinedRole( 'foo' ) );
$this->assertContains( 'foo', $registry->getDefinedRoles() );
$this->assertContains( 'foo', $registry->getKnownRoles() );
$handler = $registry->getRoleHandler( 'foo' );
$this->assertSame( 'foo', $handler->getRole() );
/** @var Title $title */
$title = $this->createMock( Title::class );
$this->assertSame( 'FooModel', $handler->getDefaultModel( $title ) );
}
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
*/
public function testGetRoleHandlerForUnknownModel() {
$registry = $this->newSlotRoleRegistry();
$this->expectException( InvalidArgumentException::class );
$registry->getRoleHandler( 'foo' );
}
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
*/
public function testGetRoleHandlerFallbackHandler() {
$registry = $this->newSlotRoleRegistry(
$this->makeNameTableStore( [ 1 => 'foo' ] )
);
$handler = @$registry->getRoleHandler( 'foo' );
$this->assertSame( 'foo', $handler->getRole() );
}
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
*/
public function testGetRoleHandlerWithBadInstantiator() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( 'foo', static function ( $role ) {
return 'Not a SlotRoleHandler instance';
} );
$this->expectException( PostconditionException::class );
$registry->getRoleHandler( 'foo' );
}
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry::getRequiredRoles()
*/
public function testGetRequiredRoles() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( SlotRecord::MAIN, function ( $role ) {
return new MainSlotRoleHandler(
[],
$this->createMock( IContentHandlerFactory::class ),
$this->createMock( HookContainer::class ),
$this->createMock( TitleFactory::class )
);
} );
$title = $this->createMock( Title::class );
$this->assertEquals( [ SlotRecord::MAIN ], $registry->getRequiredRoles( $title ) );
}
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry::getAllowedRoles()
*/
public function testGetAllowedRoles() {
$registry = $this->newSlotRoleRegistry();
$registry->defineRole( SlotRecord::MAIN, function ( $role ) {
return new MainSlotRoleHandler(
[],
$this->createMock( IContentHandlerFactory::class ),
$this->createMock( HookContainer::class ),
$this->createMock( TitleFactory::class )
);
} );
$registry->defineRoleWithModel( 'FOO', CONTENT_MODEL_TEXT );
$title = $this->createMock( Title::class );
$this->assertEquals( [ SlotRecord::MAIN, 'foo' ], $registry->getAllowedRoles( $title ) );
}
/**
* @covers \MediaWiki\Revision\SlotRoleRegistry::getKnownRoles()
* @covers \MediaWiki\Revision\SlotRoleRegistry::isKnownRole()
*/
public function testGetKnownRoles() {
$registry = $this->newSlotRoleRegistry(
$this->makeNameTableStore( [ 1 => 'foo' ] )
);
$registry->defineRoleWithModel( 'BAR', CONTENT_MODEL_TEXT );
$this->assertTrue( $registry->isKnownRole( 'foo' ) );
$this->assertTrue( $registry->isKnownRole( 'bar' ) );
$this->assertTrue( $registry->isKnownRole( 'Bar' ) );
$this->assertFalse( $registry->isKnownRole( 'xyzzy' ) );
$this->assertArrayEquals( [ 'foo', 'bar' ], $registry->getKnownRoles() );
}
}