4 * @covers SpecialPageData
8 * @author Daniel Kinzler
10 class SpecialPageDataTest
extends SpecialPageTestBase
{
12 protected function newSpecialPage() {
13 $page = new SpecialPageData();
15 // why is this needed?
16 $page->getContext()->setOutput( new OutputPage( $page->getContext() ) );
18 $page->setRequestHandler( new PageDataRequestHandler() );
23 public function provideExecute() {
26 $cases['Empty request'] = [ '', [], [], '!!', 200 ];
28 $cases['Only title specified'] = [
30 [ 'target' => 'Helsinki' ],
34 [ 'Location' => '!.+!' ]
37 $cases['Accept only HTML'] = [
39 [ 'target' => 'Helsinki' ],
40 [ 'Accept' => 'text/HTML' ],
43 [ 'Location' => '!Helsinki$!' ]
46 $cases['Accept only HTML with revid'] = [
49 'target' => 'Helsinki',
52 [ 'Accept' => 'text/HTML' ],
55 [ 'Location' => '!Helsinki(\?|&)oldid=4242!' ]
58 $cases['Nothing specified'] = [
64 [ 'Location' => '!Helsinki&action=raw!' ]
67 $cases['Nothing specified'] = [
73 [ 'Location' => '!Helsinki&action=raw!' ]
76 $cases['Invalid Accept header'] = [
79 [ 'Accept' => 'text/foobar' ],
89 * @dataProvider provideExecute
91 * @param string $subpage The subpage to request (or '')
92 * @param array $params Request parameters
93 * @param array $headers Request headers
94 * @param string $expRegExp Regex to match the output against.
95 * @param int $expCode Expected HTTP status code
96 * @param array $expHeaders Expected HTTP response headers
98 public function testExecute(
104 array $expHeaders = []
106 $request = new FauxRequest( $params );
107 $request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
109 foreach ( $headers as $name => $value ) {
110 $request->setHeader( strtoupper( $name ), $value );
114 /* @var FauxResponse $response */
115 list( $output, $response ) = $this->executeSpecialPage( $subpage, $request );
117 $this->assertEquals( $expCode, $response->getStatusCode(), "status code" );
118 $this->assertRegExp( $expRegExp, $output, "output" );
120 foreach ( $expHeaders as $name => $exp ) {
121 $value = $response->getHeader( $name );
122 $this->assertNotNull( $value, "header: $name" );
123 $this->assertInternalType( 'string', $value, "header: $name" );
124 $this->assertRegExp( $exp, $value, "header: $name" );
126 } catch ( HttpError
$e ) {
127 $this->assertEquals( $expCode, $e->getStatusCode(), "status code" );
128 $this->assertRegExp( $expRegExp, $e->getHTML(), "error output" );
132 public function testSpecialPageWithoutParameters() {
133 $this->setContentLang( Language
::factory( 'en' ) );
134 $request = new FauxRequest();
135 $request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
137 list( $output, ) = $this->executeSpecialPage( '', $request );
139 $this->assertContains(
140 "Content negotiation applies based on your client's Accept header.",