7 * @author Thiemo Mättig
11 class ActionTest
extends MediaWikiTestCase
{
13 protected function setUp() {
16 $context = $this->getContext();
17 $this->setMwGlobals( 'wgActions', array(
21 'string' => 'NamedDummyAction',
22 'declared' => 'NonExistingClassName',
23 'callable' => array( $this, 'dummyActionCallback' ),
24 'object' => new InstantiatedDummyAction( $context->getWikiPage(), $context ),
28 private function getContext( $requestedAction = null ) {
29 $request = new FauxRequest( array( 'action' => $requestedAction ) );
31 $page = WikiPage
::factory( Title
::makeTitle( 0, 'Title' ) );
33 $context = new DerivativeContext( RequestContext
::getMain() );
34 $context->setRequest( $request );
35 $context->setWikiPage( $page );
40 public function actionProvider() {
42 array( 'dummy', 'DummyAction' ),
43 array( 'string', 'NamedDummyAction' ),
44 array( 'callable', 'CalledDummyAction' ),
45 array( 'object', 'InstantiatedDummyAction' ),
47 // Capitalization is ignored
48 array( 'DUMMY', 'DummyAction' ),
49 array( 'STRING', 'NamedDummyAction' ),
51 // Null and non-existing values
52 array( 'null', null ),
53 array( 'undeclared', null ),
61 * @dataProvider actionProvider
62 * @param string $requestedAction
63 * @param string|null $expected
65 public function testActionExists( $requestedAction, $expected ) {
66 $exists = Action
::exists( $requestedAction );
68 $this->assertSame( $expected !== null, $exists );
71 public function testActionExists_doesNotRequireInstantiation() {
72 // The method is not supposed to check if the action can be instantiated.
73 $exists = Action
::exists( 'declared' );
75 $this->assertTrue( $exists );
79 * @dataProvider actionProvider
80 * @param string $requestedAction
81 * @param string|null $expected
83 public function testGetActionName( $requestedAction, $expected ) {
84 $context = $this->getContext( $requestedAction );
85 $actionName = Action
::getActionName( $context );
87 $this->assertEquals( $expected ?
: 'nosuchaction', $actionName );
91 * @dataProvider actionProvider
92 * @param string $requestedAction
93 * @param string|null $expected
95 public function testActionFactory( $requestedAction, $expected ) {
96 $context = $this->getContext();
97 $action = Action
::factory( $requestedAction, $context->getWikiPage(), $context );
99 $this->assertType( $expected ?
: 'null', $action );
102 public function testDisabledAction_exists() {
103 $exists = Action
::exists( 'disabled' );
105 $this->assertTrue( $exists );
108 public function testDisabledAction_isNotResolved() {
109 $context = $this->getContext( 'disabled' );
110 $actionName = Action
::getActionName( $context );
112 $this->assertEquals( 'nosuchaction', $actionName );
115 public function testDisabledAction_factoryReturnsFalse() {
116 $context = $this->getContext( 'disabled' );
117 $action = Action
::factory( 'disabled', $context->getWikiPage(), $context );
119 $this->assertFalse( $action );
122 public function dummyActionCallback() {
123 $context = $this->getContext();
124 return new CalledDummyAction( $context->getWikiPage(), $context );
129 class DummyAction
extends Action
{
131 public function getName() {
132 return get_called_class();
135 public function show() {
138 public function execute() {
142 class NamedDummyAction
extends DummyAction
{
145 class CalledDummyAction
extends DummyAction
{
148 class InstantiatedDummyAction
extends DummyAction
{