From f5abf233790b3b0861894a84e0fc271e429365b4 Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 11 Mar 2019 14:33:18 +0100 Subject: [PATCH] Add test for Special:page::buildPrevNextNavigation Change-Id: Ie17221305ec979acebebb62798b83f5d91df1f60 --- .../includes/specialpage/SpecialPageTest.php | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/tests/phpunit/includes/specialpage/SpecialPageTest.php b/tests/phpunit/includes/specialpage/SpecialPageTest.php index 2eddb01e8e..ec4bf0fc43 100644 --- a/tests/phpunit/includes/specialpage/SpecialPageTest.php +++ b/tests/phpunit/includes/specialpage/SpecialPageTest.php @@ -1,5 +1,7 @@ assertTrue( true ); } + public function provideBuildPrevNextNavigation() { + yield [ 0, 20, false, false ]; + yield [ 17, 20, false, false ]; + yield [ 0, 17, false, false ]; + yield [ 0, 20, true, 'Foo' ]; + yield [ 17, 20, true, 'Föö_Bär' ]; + } + + /** + * @dataProvider provideBuildPrevNextNavigation + */ + public function testBuildPrevNextNavigation( $offset, $limit, $atEnd, $subPage ) { + $this->setUserLang( Language::factory( 'qqx' ) ); // disable i18n + + $specialPage = new SpecialPage( 'Watchlist' ); + $specialPage = TestingAccessWrapper::newFromObject( $specialPage ); + + $html = $specialPage->buildPrevNextNavigation( + $offset, + $limit, + [ 'x' => 25 ], + $atEnd, + $subPage + ); + + $this->assertStringStartsWith( '(viewprevnext:', $html ); + + preg_match_all( '!!', $html, $m, PREG_PATTERN_ORDER ); + $links = $m[0]; + + foreach ( $links as $a ) { + if ( $subPage ) { + $this->assertContains( 'Special:Watchlist/' . wfUrlencode( $subPage ), $a ); + } else { + $this->assertContains( 'Special:Watchlist', $a ); + $this->assertNotContains( 'Special:Watchlist/', $a ); + } + $this->assertContains( 'x=25', $a ); + } + + $i = 0; + + if ( $offset > 0 ) { + $this->assertContains( + 'limit=' . $limit . '&offset=' . max( 0, $offset - $limit ) . '&', + $links[ $i ] + ); + $this->assertContains( 'title="(prevn-title: ' . $limit . ')"', $links[$i] ); + $this->assertContains( 'class="mw-prevlink"', $links[$i] ); + $this->assertContains( '>(prevn: ' . $limit . ')<', $links[$i] ); + $i += 1; + } + + if ( !$atEnd ) { + $this->assertContains( + 'limit=' . $limit . '&offset=' . ( $offset + $limit ) . '&', + $links[ $i ] + ); + $this->assertContains( 'title="(nextn-title: ' . $limit . ')"', $links[$i] ); + $this->assertContains( 'class="mw-nextlink"', $links[$i] ); + $this->assertContains( '>(nextn: ' . $limit . ')<', $links[$i] ); + $i += 1; + } + + $this->assertCount( 5 + $i, $links ); + + $this->assertContains( 'limit=20&offset=' . $offset, $links[$i] ); + $this->assertContains( 'title="(shown-title: 20)"', $links[$i] ); + $this->assertContains( 'class="mw-numlink"', $links[$i] ); + $this->assertContains( '>20<', $links[$i] ); + $i += 4; + + $this->assertContains( 'limit=500&offset=' . $offset, $links[$i] ); + $this->assertContains( 'title="(shown-title: 500)"', $links[$i] ); + $this->assertContains( 'class="mw-numlink"', $links[$i] ); + $this->assertContains( '>500<', $links[$i] ); + } + } -- 2.20.1