array( null, array() ), 'A simple merge policy adds the redirect data in' => array( function( $current, $new ) { if ( !isset( $current['index'] ) || $new['index'] < $current['index'] ) { $current['index'] = $new['index']; } return $current; }, array( 'index' => 1 ), ), ); } /** * @dataProvider provideRedirectMergePolicy */ public function testRedirectMergePolicyWithArrayResult( $mergePolicy, $expect ) { list( $target, $pageSet ) = $this->createPageSetWithRedirect(); $pageSet->setRedirectMergePolicy( $mergePolicy ); $result = array( $target->getArticleID() => array() ); $pageSet->populateGeneratorData( $result ); $this->assertEquals( $expect, $result[$target->getArticleID()] ); } /** * @dataProvider provideRedirectMergePolicy */ public function testRedirectMergePolicyWithApiResult( $mergePolicy, $expect ) { list( $target, $pageSet ) = $this->createPageSetWithRedirect(); $pageSet->setRedirectMergePolicy( $mergePolicy ); $result = new ApiResult( false ); $result->addValue( null, 'pages', array( $target->getArticleID() => array() ) ); $pageSet->populateGeneratorData( $result, array( 'pages' ) ); $this->assertEquals( $expect, $result->getResultData( array( 'pages', $target->getArticleID() ) ) ); } protected function createPageSetWithRedirect() { $target = Title::makeTitle( NS_MAIN, 'UTRedirectTarget' ); $sourceA = Title::makeTitle( NS_MAIN, 'UTRedirectSourceA' ); $sourceB = Title::makeTitle( NS_MAIN, 'UTRedirectSourceB' ); self::editPage( 'UTRedirectTarget', 'api page set test' ); self::editPage( 'UTRedirectSourceA', '#REDIRECT [[UTRedirectTarget]]' ); self::editPage( 'UTRedirectSourceB', '#REDIRECT [[UTRedirectTarget]]' ); $request = new FauxRequest( array( 'redirects' => 1 ) ); $context = new RequestContext(); $context->setRequest( $request ); $main = new ApiMain( $context ); $pageSet = new ApiPageSet( $main ); $pageSet->setGeneratorData( $sourceA, array( 'index' => 1 ) ); $pageSet->setGeneratorData( $sourceB, array( 'index' => 3 ) ); $pageSet->populateFromTitles( array( $sourceA, $sourceB ) ); return array( $target, $pageSet ); } }