],
],
];
-
}
/**
], ApiResult::addMetadataToResultVars( $arr ) );
}
- /**
- * @covers ApiResult
- */
- public function testDeprecatedFunctions() {
- // Ignore ApiResult deprecation warnings during this test
- set_error_handler( function ( $errno, $errstr ) use ( &$warnings ) {
- if ( preg_match( '/Use of ApiResult::\S+ was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
- return true;
- }
- if ( preg_match( '/Use of ApiMain to ApiResult::__construct ' .
- 'was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
- return true;
- }
- return false;
- } );
- $reset = new ScopedCallback( 'restore_error_handler' );
-
- $context = new DerivativeContext( RequestContext::getMain() );
- $context->setConfig( new HashConfig( [
- 'APIModules' => [],
- 'APIFormatModules' => [],
- 'APIMaxResultSize' => 42,
- ] ) );
- $main = new ApiMain( $context );
- $result = TestingAccessWrapper::newFromObject( new ApiResult( $main ) );
- $this->assertSame( 42, $result->maxSize );
- $this->assertSame( $main->getErrorFormatter(), $result->errorFormatter );
- $this->assertSame( $main, $result->mainForContinuation );
-
- $result = new ApiResult( 8388608 );
-
- $result->addContentValue( null, 'test', 'content' );
- $result->addContentValue( [ 'foo', 'bar' ], 'test', 'content' );
- $result->addIndexedTagName( null, 'itn' );
- $result->addSubelementsList( null, [ 'sub' ] );
- $this->assertSame( [
- 'foo' => [
- 'bar' => [
- '*' => 'content',
- ],
- ],
- '*' => 'content',
- ], $result->getData() );
-
- $arr = [];
- ApiResult::setContent( $arr, 'value' );
- ApiResult::setContent( $arr, 'value2', 'foobar' );
- $this->assertSame( [
- ApiResult::META_CONTENT => 'content',
- 'content' => 'value',
- 'foobar' => [
- ApiResult::META_CONTENT => 'content',
- 'content' => 'value2',
- ],
- ], $arr );
-
- $result = new ApiResult( 3 );
- $formatter = new ApiErrorFormatter_BackCompat( $result );
- $result->setErrorFormatter( $formatter );
- $result->disableSizeCheck();
- $this->assertTrue( $result->addValue( null, 'foo', '1234567890' ) );
- $result->enableSizeCheck();
- $this->assertSame( 0, $result->getSize() );
- $this->assertFalse( $result->addValue( null, 'foo', '1234567890' ) );
-
- $arr = [ 'foo' => [ 'bar' => 1 ] ];
- $result->setIndexedTagName_recursive( $arr, 'itn' );
- $this->assertSame( [
- 'foo' => [
- 'bar' => 1,
- ApiResult::META_INDEXED_TAG_NAME => 'itn'
- ],
- ], $arr );
-
- $status = Status::newGood();
- $status->fatal( 'parentheses', '1' );
- $status->fatal( 'parentheses', '2' );
- $status->warning( 'parentheses', '3' );
- $status->warning( 'parentheses', '4' );
- $this->assertSame( [
- [
- 'type' => 'error',
- 'message' => 'parentheses',
- 'params' => [
- 0 => '1',
- ApiResult::META_INDEXED_TAG_NAME => 'param',
- ],
- ],
- [
- 'type' => 'error',
- 'message' => 'parentheses',
- 'params' => [
- 0 => '2',
- ApiResult::META_INDEXED_TAG_NAME => 'param',
- ],
- ],
- ApiResult::META_INDEXED_TAG_NAME => 'error',
- ], $result->convertStatusToArray( $status, 'error' ) );
- $this->assertSame( [
- [
- 'type' => 'warning',
- 'message' => 'parentheses',
- 'params' => [
- 0 => '3',
- ApiResult::META_INDEXED_TAG_NAME => 'param',
- ],
- ],
- [
- 'type' => 'warning',
- 'message' => 'parentheses',
- 'params' => [
- 0 => '4',
- ApiResult::META_INDEXED_TAG_NAME => 'param',
- ],
- ],
- ApiResult::META_INDEXED_TAG_NAME => 'warning',
- ], $result->convertStatusToArray( $status, 'warning' ) );
- }
-
- /**
- * @covers ApiResult
- */
- public function testDeprecatedContinuation() {
- // Ignore ApiResult deprecation warnings during this test
- set_error_handler( function ( $errno, $errstr ) use ( &$warnings ) {
- if ( preg_match( '/Use of ApiResult::\S+ was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
- return true;
- }
- return false;
- } );
-
- $reset = new ScopedCallback( 'restore_error_handler' );
- $allModules = [
- new MockApiQueryBase( 'mock1' ),
- new MockApiQueryBase( 'mock2' ),
- new MockApiQueryBase( 'mocklist' ),
- ];
- $generator = new MockApiQueryBase( 'generator' );
-
- $main = new ApiMain( RequestContext::getMain() );
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( null, $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame( [ false, $allModules ], $ret );
- $result->setContinueParam( $allModules[0], 'm1continue', [ 1, 2 ] );
- $result->setContinueParam( $allModules[2], 'mlcontinue', 2 );
- $result->setGeneratorContinueParam( $generator, 'gcontinue', 3 );
- $result->endContinuation( 'raw' );
- $result->endContinuation( 'standard' );
- $this->assertSame( [
- 'mlcontinue' => 2,
- 'm1continue' => '1|2',
- 'continue' => '||mock2',
- ], $result->getResultData( 'continue' ) );
- $this->assertSame( null, $result->getResultData( 'batchcomplete' ) );
- $this->assertSame( [
- 'mock1' => [ 'm1continue' => '1|2' ],
- 'mocklist' => [ 'mlcontinue' => 2 ],
- 'generator' => [ 'gcontinue' => 3 ],
- ], $result->getResultData( 'query-continue' ) );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( null, $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame( [ false, $allModules ], $ret );
- $result->setContinueParam( $allModules[0], 'm1continue', [ 1, 2 ] );
- $result->setGeneratorContinueParam( $generator, 'gcontinue', [ 3, 4 ] );
- $result->endContinuation( 'raw' );
- $result->endContinuation( 'standard' );
- $this->assertSame( [
- 'm1continue' => '1|2',
- 'continue' => '||mock2|mocklist',
- ], $result->getResultData( 'continue' ) );
- $this->assertSame( null, $result->getResultData( 'batchcomplete' ) );
- $this->assertSame( [
- 'mock1' => [ 'm1continue' => '1|2' ],
- 'generator' => [ 'gcontinue' => '3|4' ],
- ], $result->getResultData( 'query-continue' ) );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( null, $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame( [ false, $allModules ], $ret );
- $result->setContinueParam( $allModules[2], 'mlcontinue', 2 );
- $result->setGeneratorContinueParam( $generator, 'gcontinue', 3 );
- $result->endContinuation( 'raw' );
- $result->endContinuation( 'standard' );
- $this->assertSame( [
- 'mlcontinue' => 2,
- 'gcontinue' => 3,
- 'continue' => 'gcontinue||',
- ], $result->getResultData( 'continue' ) );
- $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
- $this->assertSame( [
- 'mocklist' => [ 'mlcontinue' => 2 ],
- 'generator' => [ 'gcontinue' => 3 ],
- ], $result->getResultData( 'query-continue' ) );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( null, $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame( [ false, $allModules ], $ret );
- $result->setGeneratorContinueParam( $generator, 'gcontinue', 3 );
- $result->endContinuation( 'raw' );
- $result->endContinuation( 'standard' );
- $this->assertSame( [
- 'gcontinue' => 3,
- 'continue' => 'gcontinue||mocklist',
- ], $result->getResultData( 'continue' ) );
- $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
- $this->assertSame( [
- 'generator' => [ 'gcontinue' => 3 ],
- ], $result->getResultData( 'query-continue' ) );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( null, $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame( [ false, $allModules ], $ret );
- $result->setContinueParam( $allModules[0], 'm1continue', [ 1, 2 ] );
- $result->setContinueParam( $allModules[2], 'mlcontinue', 2 );
- $result->endContinuation( 'raw' );
- $result->endContinuation( 'standard' );
- $this->assertSame( [
- 'mlcontinue' => 2,
- 'm1continue' => '1|2',
- 'continue' => '||mock2',
- ], $result->getResultData( 'continue' ) );
- $this->assertSame( null, $result->getResultData( 'batchcomplete' ) );
- $this->assertSame( [
- 'mock1' => [ 'm1continue' => '1|2' ],
- 'mocklist' => [ 'mlcontinue' => 2 ],
- ], $result->getResultData( 'query-continue' ) );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( null, $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame( [ false, $allModules ], $ret );
- $result->setContinueParam( $allModules[0], 'm1continue', [ 1, 2 ] );
- $result->endContinuation( 'raw' );
- $result->endContinuation( 'standard' );
- $this->assertSame( [
- 'm1continue' => '1|2',
- 'continue' => '||mock2|mocklist',
- ], $result->getResultData( 'continue' ) );
- $this->assertSame( null, $result->getResultData( 'batchcomplete' ) );
- $this->assertSame( [
- 'mock1' => [ 'm1continue' => '1|2' ],
- ], $result->getResultData( 'query-continue' ) );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( null, $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame( [ false, $allModules ], $ret );
- $result->setContinueParam( $allModules[2], 'mlcontinue', 2 );
- $result->endContinuation( 'raw' );
- $result->endContinuation( 'standard' );
- $this->assertSame( [
- 'mlcontinue' => 2,
- 'continue' => '-||mock1|mock2',
- ], $result->getResultData( 'continue' ) );
- $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
- $this->assertSame( [
- 'mocklist' => [ 'mlcontinue' => 2 ],
- ], $result->getResultData( 'query-continue' ) );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( null, $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame( [ false, $allModules ], $ret );
- $result->endContinuation( 'raw' );
- $result->endContinuation( 'standard' );
- $this->assertSame( null, $result->getResultData( 'continue' ) );
- $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
- $this->assertSame( null, $result->getResultData( 'query-continue' ) );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( '||mock2', $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame(
- [ false, array_values( array_diff_key( $allModules, [ 1 => 1 ] ) ) ],
- $ret
- );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $ret = $result->beginContinuation( '-||', $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame(
- [ true, array_values( array_diff_key( $allModules, [ 0 => 0, 1 => 1 ] ) ) ],
- $ret
- );
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- try {
- $result->beginContinuation( 'foo', $allModules, [ 'mock1', 'mock2' ] );
- $this->fail( 'Expected exception not thrown' );
- } catch ( UsageException $ex ) {
- $this->assertSame(
- 'Invalid continue param. You should pass the original value returned by the previous query',
- $ex->getMessage(),
- 'Expected exception'
- );
- }
- $main->setContinuationManager( null );
-
- $result = new ApiResult( 8388608 );
- $result->setMainForContinuation( $main );
- $result->beginContinuation( '||mock2', array_slice( $allModules, 0, 2 ),
- [ 'mock1', 'mock2' ] );
- try {
- $result->setContinueParam( $allModules[1], 'm2continue', 1 );
- $this->fail( 'Expected exception not thrown' );
- } catch ( UnexpectedValueException $ex ) {
- $this->assertSame(
- 'Module \'mock2\' was not supposed to have been executed, but it was executed anyway',
- $ex->getMessage(),
- 'Expected exception'
- );
- }
- try {
- $result->setContinueParam( $allModules[2], 'mlcontinue', 1 );
- $this->fail( 'Expected exception not thrown' );
- } catch ( UnexpectedValueException $ex ) {
- $this->assertSame(
- 'Module \'mocklist\' called ApiContinuationManager::addContinueParam ' .
- 'but was not passed to ApiContinuationManager::__construct',
- $ex->getMessage(),
- 'Expected exception'
- );
- }
- $main->setContinuationManager( null );
-
- }
-
public function testObjectSerialization() {
$arr = [];
ApiResult::setValue( $arr, 'foo', (object)[ 'a' => 1, 'b' => 2 ] );
'two' => 2,
], $arr['foo'] );
}
-
}
class ApiResultTestStringifiableObject {