assertTrue( true ); } /** * @dataProvider provideValues * @covers Status::newGood */ public function testNewGood( $value = null ) { $status = Status::newGood( $value ); $this->assertTrue( $status->isGood() ); $this->assertTrue( $status->isOK() ); $this->assertEquals( $value, $status->getValue() ); } public static function provideValues() { return array( array(), array( 'foo' ), array( array( 'foo' => 'bar' ) ), array( new Exception() ), array( 1234 ), ); } /** * @covers Status::newFatal */ public function testNewFatalWithMessage() { $message = $this->getMockBuilder( 'Message' ) ->disableOriginalConstructor() ->getMock(); $status = Status::newFatal( $message ); $this->assertFalse( $status->isGood() ); $this->assertFalse( $status->isOK() ); $this->assertEquals( $message, $status->getMessage() ); } /** * @covers Status::newFatal */ public function testNewFatalWithString() { $message = 'foo'; $status = Status::newFatal( $message ); $this->assertFalse( $status->isGood() ); $this->assertFalse( $status->isOK() ); $this->assertEquals( $message, $status->getMessage()->getKey() ); } /** * */ public function testOkAndErrors() { $status = Status::newGood( 'foo' ); $this->assertTrue( $status->ok ); $status = Status::newFatal( 'foo', 1, 2 ); $this->assertFalse( $status->ok ); $this->assertArrayEquals( array( array( 'type' => 'error', 'message' => 'foo', 'params' => array( 1, 2 ) ) ), $status->errors ); } /** * @dataProvider provideSetResult * @covers Status::setResult */ public function testSetResult( $ok, $value = null ) { $status = new Status(); $status->setResult( $ok, $value ); $this->assertEquals( $ok, $status->isOK() ); $this->assertEquals( $value, $status->getValue() ); } public static function provideSetResult() { return array( array( true ), array( false ), array( true, 'value' ), array( false, 'value' ), ); } /** * @dataProvider provideIsOk * @covers Status::isOk */ public function testIsOk( $ok ) { $status = new Status(); $status->ok = $ok; $this->assertEquals( $ok, $status->isOK() ); } public static function provideIsOk() { return array( array( true ), array( false ), ); } /** * @covers Status::getValue */ public function testGetValue() { $status = new Status(); $status->value = 'foobar'; $this->assertEquals( 'foobar', $status->getValue() ); } /** * @dataProvider provideIsGood * @covers Status::isGood */ public function testIsGood( $ok, $errors, $expected ) { $status = new Status(); $status->ok = $ok; foreach ( $errors as $error ) { $status->warning( $error ); } $this->assertEquals( $expected, $status->isGood() ); } public static function provideIsGood() { return array( array( true, array(), true ), array( true, array( 'foo' ), false ), array( false, array(), false ), array( false, array( 'foo' ), false ), ); } /** * @dataProvider provideMockMessageDetails * @covers Status::warning * @covers Status::getWarningsArray * @covers Status::getStatusArray */ public function testWarningWithMessage( $mockDetails ) { $status = new Status(); $messages = $this->getMockMessages( $mockDetails ); foreach ( $messages as $message ) { $status->warning( $message ); } $warnings = $status->getWarningsArray(); $this->assertEquals( count( $messages ), count( $warnings ) ); foreach ( $messages as $key => $message ) { $expectedArray = array_merge( array( $message->getKey() ), $message->getParams() ); $this->assertEquals( $warnings[$key], $expectedArray ); } } /** * @dataProvider provideMockMessageDetails * @covers Status::error * @covers Status::getErrorsArray * @covers Status::getStatusArray */ public function testErrorWithMessage( $mockDetails ) { $status = new Status(); $messages = $this->getMockMessages( $mockDetails ); foreach ( $messages as $message ) { $status->error( $message ); } $errors = $status->getErrorsArray(); $this->assertEquals( count( $messages ), count( $errors ) ); foreach ( $messages as $key => $message ) { $expectedArray = array_merge( array( $message->getKey() ), $message->getParams() ); $this->assertEquals( $errors[$key], $expectedArray ); } } /** * @dataProvider provideMockMessageDetails * @covers Status::fatal * @covers Status::getErrorsArray * @covers Status::getStatusArray */ public function testFatalWithMessage( $mockDetails ) { $status = new Status(); $messages = $this->getMockMessages( $mockDetails ); foreach ( $messages as $message ) { $status->fatal( $message ); } $errors = $status->getErrorsArray(); $this->assertEquals( count( $messages ), count( $errors ) ); foreach ( $messages as $key => $message ) { $expectedArray = array_merge( array( $message->getKey() ), $message->getParams() ); $this->assertEquals( $errors[$key], $expectedArray ); } $this->assertFalse( $status->isOK() ); } protected function getMockMessage( $key = 'key', $params = array() ) { $message = $this->getMockBuilder( 'Message' ) ->disableOriginalConstructor() ->getMock(); $message->expects( $this->atLeastOnce() ) ->method( 'getKey' ) ->will( $this->returnValue( $key ) ); $message->expects( $this->atLeastOnce() ) ->method( 'getParams' ) ->will( $this->returnValue( $params ) ); return $message; } /** * @param array $messageDetails E.g. array( 'KEY' => array(/PARAMS/) ) * @return Message[] */ protected function getMockMessages( $messageDetails ) { $messages = array(); foreach ( $messageDetails as $key => $paramsArray ) { $messages[] = $this->getMockMessage( $key, $paramsArray ); } return $messages; } public static function provideMockMessageDetails() { return array( array( array( 'key1' => array( 'foo' => 'bar' ) ) ), array( array( 'key1' => array( 'foo' => 'bar' ), 'key2' => array( 'foo2' => 'bar2' ) ) ), ); } /** * @covers Status::merge */ public function testMerge() { $status1 = new Status(); $status2 = new Status(); $message1 = $this->getMockMessage( 'warn1' ); $message2 = $this->getMockMessage( 'error2' ); $status1->warning( $message1 ); $status2->error( $message2 ); $status1->merge( $status2 ); $this->assertEquals( 2, count( $status1->getWarningsArray() ) + count( $status1->getErrorsArray() ) ); } /** * @covers Status::merge */ public function testMergeWithOverwriteValue() { $status1 = new Status(); $status2 = new Status(); $message1 = $this->getMockMessage( 'warn1' ); $message2 = $this->getMockMessage( 'error2' ); $status1->warning( $message1 ); $status2->error( $message2 ); $status2->value = 'FooValue'; $status1->merge( $status2, true ); $this->assertEquals( 2, count( $status1->getWarningsArray() ) + count( $status1->getErrorsArray() ) ); $this->assertEquals( 'FooValue', $status1->getValue() ); } /** * @covers Status::hasMessage */ public function testHasMessage() { $status = new Status(); $status->fatal( 'bad' ); $status->fatal( wfMessage( 'bad-msg' ) ); $this->assertTrue( $status->hasMessage( 'bad' ) ); $this->assertTrue( $status->hasMessage( 'bad-msg' ) ); $this->assertTrue( $status->hasMessage( wfMessage( 'bad-msg' ) ) ); $this->assertFalse( $status->hasMessage( 'good' ) ); } /** * @dataProvider provideCleanParams * @covers Status::cleanParams */ public function testCleanParams( $cleanCallback, $params, $expected ) { $method = new ReflectionMethod( 'Status', 'cleanParams' ); $method->setAccessible( true ); $status = new Status(); $status->cleanCallback = $cleanCallback; $this->assertEquals( $expected, $method->invoke( $status, $params ) ); } public static function provideCleanParams() { $cleanCallback = function ( $value ) { return '-' . $value . '-'; }; return array( array( false, array( 'foo' => 'bar' ), array( 'foo' => 'bar' ) ), array( $cleanCallback, array( 'foo' => 'bar' ), array( 'foo' => '-bar-' ) ), ); } /** * @dataProvider provideGetWikiTextAndHtml * @covers Status::getWikiText * @todo test long and short context messages generated through this method * this can not really be done now due to use of wfMessage()->plain() * It is possible to mock such methods but only if namespaces are used */ public function testGetWikiText( Status $status, $wikitext, $html ) { $this->assertEquals( $wikitext, $status->getWikiText() ); } /** * @dataProvider provideGetWikiTextAndHtml * @covers Status::getHtml * @todo test long and short context messages generated through this method * this can not really be done now due to use of $this->getWikiText using * wfMessage()->plain(). It is possible to mock such methods but only if * namespaces are used. */ public function testGetHtml( Status $status, $wikitext, $html ) { $this->assertEquals( $html, $status->getHTML() ); } /** * @return array Array of arrays with values; * 0 => status object * 1 => expected string (with no context) */ public static function provideGetWikiTextAndHtml() { $testCases = array(); $testCases['GoodStatus'] = array( new Status(), "Internal error: Status::getWikiText called for a good result, this is incorrect\n", "
Internal error: Status::getWikiText called for a good result, this is incorrect\n
", ); $status = new Status(); $status->ok = false; $testCases['GoodButNoError'] = array( $status, "Internal error: Status::getWikiText: Invalid result object: no error text but not OK\n", "Internal error: Status::getWikiText: Invalid result object: no error text but not OK\n
", ); $status = new Status(); $status->warning( 'fooBar!' ); $testCases['1StringWarning'] = array( $status, "<fooBar!>\n
", ); $status = new Status(); $status->warning( 'fooBar!' ); $status->warning( 'fooBar2!' ); $testCases['2StringWarnings'] = array( $status, "*<fooBar!>\n
", ); $status = new Status(); $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) ); $status->warning( new Message( 'fooBar2!' ) ); $testCases['2MessageWarnings'] = array( $status, "*