setUserLang( Language::factory( 'qqx' ) ); // disable i18n $prevNext = new PrevNextNavigationRenderer( RequestContext::getMain() ); $prevNext = TestingAccessWrapper::newFromObject( $prevNext ); $html = $prevNext->buildPrevNextNavigation( SpecialPage::getTitleFor( 'Watchlist', $subPage ), $offset, $limit, [ 'x' => 25 ], $atEnd ); $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] ); } }