4 * @covers SpecialPageData
8 * @author Daniel Kinzler
10 class SpecialPageDataTest
extends SpecialPageTestBase
{
12 protected function setUp() {
15 $this->setContentLang( 'qqx' );
18 protected function newSpecialPage() {
19 $page = new SpecialPageData();
21 // why is this needed?
22 $page->getContext()->setOutput( new OutputPage( $page->getContext() ) );
24 $page->setRequestHandler( new PageDataRequestHandler() );
29 public function provideExecute() {
32 $cases['Empty request'] = [ '', [], [], '!!', 200 ];
34 $cases['Only title specified'] = [
36 [ 'target' => 'Helsinki' ],
40 [ 'Location' => '!.+!' ]
43 $cases['Accept only HTML'] = [
45 [ 'target' => 'Helsinki' ],
46 [ 'Accept' => 'text/HTML' ],
49 [ 'Location' => '!Helsinki$!' ]
52 $cases['Accept only HTML with revid'] = [
55 'target' => 'Helsinki',
58 [ 'Accept' => 'text/HTML' ],
61 [ 'Location' => '!Helsinki(\?|&)oldid=4242!' ]
64 $cases['Nothing specified'] = [
70 [ 'Location' => '!Helsinki&action=raw!' ]
73 $cases['Nothing specified'] = [
79 [ 'Location' => '!Helsinki&action=raw!' ]
82 $cases['Invalid Accept header'] = [
85 [ 'Accept' => 'text/foobar' ],
95 * @dataProvider provideExecute
97 * @param string $subpage The subpage to request (or '')
98 * @param array $params Request parameters
99 * @param array $headers Request headers
100 * @param string $expRegExp Regex to match the output against.
101 * @param int $expCode Expected HTTP status code
102 * @param array $expHeaders Expected HTTP response headers
104 public function testExecute(
110 array $expHeaders = []
112 $request = new FauxRequest( $params );
113 $request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
115 foreach ( $headers as $name => $value ) {
116 $request->setHeader( strtoupper( $name ), $value );
120 /* @var FauxResponse $response */
121 list( $output, $response ) = $this->executeSpecialPage( $subpage, $request );
123 $this->assertEquals( $expCode, $response->getStatusCode(), "status code" );
124 $this->assertRegExp( $expRegExp, $output, "output" );
126 foreach ( $expHeaders as $name => $exp ) {
127 $value = $response->getHeader( $name );
128 $this->assertNotNull( $value, "header: $name" );
129 $this->assertInternalType( 'string', $value, "header: $name" );
130 $this->assertRegExp( $exp, $value, "header: $name" );
132 } catch ( HttpError
$e ) {
133 $this->assertEquals( $expCode, $e->getStatusCode(), "status code" );
134 $this->assertRegExp( $expRegExp, $e->getHTML(), "error output" );
138 public function testSpecialPageWithoutParameters() {
139 $request = new FauxRequest();
140 $request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
142 list( $output, ) = $this->executeSpecialPage( '', $request );
144 $this->assertContains( '(pagedata-text)', $output );