Fixed spacing
[lhc/web/wiklou.git] / tests / phpunit / includes / api / ApiResultTest.php
index 7e43a24..6f4300e 100644 (file)
@@ -106,6 +106,16 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       ApiResult::setValue( $arr, null, $fh );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add resource(stream) to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                try {
                        $obj->file = $fh;
                        ApiResult::setValue( $arr, 'sub', $obj );
@@ -117,6 +127,17 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $obj->file = $fh;
+                       ApiResult::setValue( $arr, null, $obj );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add resource(stream) to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                fclose( $fh );
 
                try {
@@ -129,6 +150,16 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       ApiResult::setValue( $arr, null, INF );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                try {
                        ApiResult::setValue( $arr, 'nan', NAN );
                        $this->fail( 'Expected exception not thrown' );
@@ -139,21 +170,40 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       ApiResult::setValue( $arr, null, NAN );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
 
                $arr = array();
                $result2 = new ApiResult( 8388608 );
                $result2->addValue( null, 'foo', 'bar' );
                ApiResult::setValue( $arr, 'baz', $result2 );
-               $this->assertSame( array( 'baz' => array( 'foo' => 'bar' ) ), $arr );
+               $this->assertSame( array(
+                       'baz' => array(
+                               ApiResult::META_TYPE => 'assoc',
+                               'foo' => 'bar',
+                       )
+               ), $arr );
 
                $arr = array();
                ApiResult::setValue( $arr, 'foo', "foo\x80bar" );
                ApiResult::setValue( $arr, 'bar', "a\xcc\x81" );
                ApiResult::setValue( $arr, 'baz', 74 );
+               ApiResult::setValue( $arr, null, "foo\x80bar" );
+               ApiResult::setValue( $arr, null, "a\xcc\x81" );
                $this->assertSame( array(
                        'foo' => "foo\xef\xbf\xbdbar",
                        'bar' => "\xc3\xa1",
                        'baz' => 74,
+                       0 => "foo\xef\xbf\xbdbar",
+                       1 => "\xc3\xa1",
                ), $arr );
        }
 
@@ -182,6 +232,7 @@ class ApiResultTest extends MediaWikiTestCase {
                        'unnamed 2',
                        'a' => array( 'b' => array() ),
                        'setContentValue' => '3',
+                       ApiResult::META_TYPE => 'assoc',
                        ApiResult::META_CONTENT => 'setContentValue',
                ), $result->getResultData() );
                $this->assertSame( 20, $result->getSize() );
@@ -217,7 +268,9 @@ class ApiResultTest extends MediaWikiTestCase {
                        $result->getResultData( array( ApiResult::META_CONTENT ) ) );
 
                $result->reset();
-               $this->assertSame( array(), $result->getResultData() );
+               $this->assertSame( array(
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
                $this->assertSame( 0, $result->getSize() );
 
                $result->addValue( null, 'foo', 1 );
@@ -227,7 +280,7 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->addValue( null, 'bottom', '2' );
                $result->addValue( null, 'foo', '2', ApiResult::OVERRIDE );
                $result->addValue( null, 'bar', '2', ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP );
-               $this->assertSame( array( 0, 'top', 'foo', 'bar', 'bottom' ),
+               $this->assertSame( array( 0, 'top', 'foo', 'bar', 'bottom', ApiResult::META_TYPE ),
                        array_keys( $result->getResultData() ) );
 
                $result->reset();
@@ -240,8 +293,10 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->reset();
                $result->addValue( null, 'sub', array( 'foo' => 1 ) );
                $result->addValue( null, 'sub', array( 'bar' => 1 ) );
-               $this->assertSame( array( 'sub' => array( 'foo' => 1, 'bar' => 1 ) ),
-                       $result->getResultData() );
+               $this->assertSame( array(
+                       'sub' => array( 'foo' => 1, 'bar' => 1 ),
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
 
                try {
                        $result->addValue( null, 'sub', array( 'foo' => 2, 'baz' => 2 ) );
@@ -264,6 +319,7 @@ class ApiResultTest extends MediaWikiTestCase {
                $this->assertSame( array(
                        'title' => (string)$title,
                        'obj' => array( 'foo' => 1, 'bar' => 2, ApiResult::META_TYPE => 'assoc' ),
+                       ApiResult::META_TYPE => 'assoc',
                ), $result->getResultData() );
 
                $fh = tmpfile();
@@ -277,6 +333,16 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $result->addValue( null, null, $fh );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add resource(stream) to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                try {
                        $obj->file = $fh;
                        $result->addValue( null, 'sub', $obj );
@@ -288,6 +354,17 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $obj->file = $fh;
+                       $result->addValue( null, null, $obj );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add resource(stream) to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                fclose( $fh );
 
                try {
@@ -300,6 +377,16 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $result->addValue( null, null, INF );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                try {
                        $result->addValue( null, 'nan', NAN );
                        $this->fail( 'Expected exception not thrown' );
@@ -310,12 +397,28 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $result->addValue( null, null, NAN );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
 
                $result->reset();
                $result->addParsedLimit( 'foo', 12 );
-               $this->assertSame( array( 'limits' => array( 'foo' => 12 ) ), $result->getResultData() );
+               $this->assertSame( array(
+                       'limits' => array( 'foo' => 12 ),
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
                $result->addParsedLimit( 'foo', 13 );
-               $this->assertSame( array( 'limits' => array( 'foo' => 13 ) ), $result->getResultData() );
+               $this->assertSame( array(
+                       'limits' => array( 'foo' => 13 ),
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
                $this->assertSame( null, $result->getResultData( array( 'foo', 'bar', 'baz' ) ) );
                $this->assertSame( 13, $result->getResultData( array( 'limits', 'foo' ) ) );
                try {
@@ -345,16 +448,27 @@ class ApiResultTest extends MediaWikiTestCase {
                $result2 = new ApiResult( 8388608 );
                $result2->addValue( null, 'foo', 'bar' );
                $result->addValue( null, 'baz', $result2 );
-               $this->assertSame( array( 'baz' => array( 'foo' => 'bar' ) ), $result->getResultData() );
+               $this->assertSame( array(
+                       'baz' => array(
+                               'foo' => 'bar',
+                               ApiResult::META_TYPE => 'assoc',
+                       ),
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
 
                $result = new ApiResult( 8388608 );
                $result->addValue( null, 'foo', "foo\x80bar" );
                $result->addValue( null, 'bar', "a\xcc\x81" );
                $result->addValue( null, 'baz', 74 );
+               $result->addValue( null, null, "foo\x80bar" );
+               $result->addValue( null, null, "a\xcc\x81" );
                $this->assertSame( array(
                        'foo' => "foo\xef\xbf\xbdbar",
                        'bar' => "\xc3\xa1",
                        'baz' => 74,
+                       0 => "foo\xef\xbf\xbdbar",
+                       1 => "\xc3\xa1",
+                       ApiResult::META_TYPE => 'assoc',
                ), $result->getResultData() );
        }
 
@@ -403,7 +517,7 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->removePreserveKeysList( null, 'baz' );
                $result->addArrayTypeRecursive( null, 'default' );
                $result->addArrayType( null, 'array' );
-               $this->assertSame( $expect, $result->getResultData() );
+               $this->assertEquals( $expect, $result->getResultData() );
 
                $arr = array( 'foo' => array( 'bar' => array() ) );
                $expect = array(
@@ -1010,6 +1124,76 @@ class ApiResultTest extends MediaWikiTestCase {
                $data[ApiResult::META_CONTENT] = 'bar';
        }
 
+       /**
+        * @covers ApiResult
+        */
+       public function testAddMetadataToResultVars() {
+               $arr = array(
+                       'a' => "foo",
+                       'b' => false,
+                       'c' => 10,
+                       'sequential_numeric_keys' => array( 'a', 'b', 'c' ),
+                       'non_sequential_numeric_keys' => array( 'a', 'b', 4 => 'c' ),
+                       'string_keys' => array(
+                               'one' => 1,
+                               'two' => 2
+                       ),
+                       'object_sequential_keys' => (object)array( 'a', 'b', 'c' ),
+                       '_type' => "should be overwritten in result",
+               );
+               $this->assertSame( array(
+                       ApiResult::META_TYPE => 'kvp',
+                       ApiResult::META_KVP_KEY_NAME => 'key',
+                       ApiResult::META_PRESERVE_KEYS => array(
+                               'a', 'b', 'c',
+                               'sequential_numeric_keys', 'non_sequential_numeric_keys',
+                               'string_keys', 'object_sequential_keys'
+                       ),
+                       ApiResult::META_BC_BOOLS => array( 'b' ),
+                       ApiResult::META_INDEXED_TAG_NAME => 'var',
+                       'a' => "foo",
+                       'b' => false,
+                       'c' => 10,
+                       'sequential_numeric_keys' => array(
+                               ApiResult::META_TYPE => 'array',
+                               ApiResult::META_BC_BOOLS => array(),
+                               ApiResult::META_INDEXED_TAG_NAME => 'value',
+                               0 => 'a',
+                               1 => 'b',
+                               2 => 'c',
+                       ),
+                       'non_sequential_numeric_keys' => array(
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_KEY_NAME => 'key',
+                               ApiResult::META_PRESERVE_KEYS => array( 0, 1, 4 ),
+                               ApiResult::META_BC_BOOLS => array(),
+                               ApiResult::META_INDEXED_TAG_NAME => 'var',
+                               0 => 'a',
+                               1 => 'b',
+                               4 => 'c',
+                       ),
+                       'string_keys' => array(
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_KEY_NAME => 'key',
+                               ApiResult::META_PRESERVE_KEYS => array( 'one', 'two' ),
+                               ApiResult::META_BC_BOOLS => array(),
+                               ApiResult::META_INDEXED_TAG_NAME => 'var',
+                               'one' => 1,
+                               'two' => 2,
+                       ),
+                       'object_sequential_keys' => array(
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_KEY_NAME => 'key',
+                               ApiResult::META_PRESERVE_KEYS => array( 0, 1, 2 ),
+                               ApiResult::META_BC_BOOLS => array(),
+                               ApiResult::META_INDEXED_TAG_NAME => 'var',
+                               0 => 'a',
+                               1 => 'b',
+                               2 => 'c',
+                       ),
+               ), ApiResult::addMetadataToResultVars( $arr ) );
+       }
+
        /**
         * @covers ApiResult
         */
@@ -1019,6 +1203,9 @@ class ApiResultTest extends MediaWikiTestCase {
                        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' );
@@ -1211,7 +1398,7 @@ class ApiResultTest extends MediaWikiTestCase {
                        'gcontinue' => 3,
                        'continue' => 'gcontinue||',
                ), $result->getResultData( 'continue' ) );
-               $this->assertSame( '', $result->getResultData( 'batchcomplete' ) );
+               $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
                $this->assertSame( array(
                        'mocklist' => array( 'mlcontinue' => 2 ),
                        'generator' => array( 'gcontinue' => 3 ),
@@ -1229,7 +1416,7 @@ class ApiResultTest extends MediaWikiTestCase {
                        'gcontinue' => 3,
                        'continue' => 'gcontinue||mocklist',
                ), $result->getResultData( 'continue' ) );
-               $this->assertSame( '', $result->getResultData( 'batchcomplete' ) );
+               $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
                $this->assertSame( array(
                        'generator' => array( 'gcontinue' => 3 ),
                ), $result->getResultData( 'query-continue' ) );
@@ -1283,7 +1470,7 @@ class ApiResultTest extends MediaWikiTestCase {
                        'mlcontinue' => 2,
                        'continue' => '-||mock1|mock2',
                ), $result->getResultData( 'continue' ) );
-               $this->assertSame( '', $result->getResultData( 'batchcomplete' ) );
+               $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
                $this->assertSame( array(
                        'mocklist' => array( 'mlcontinue' => 2 ),
                ), $result->getResultData( 'query-continue' ) );
@@ -1296,7 +1483,7 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->endContinuation( 'raw' );
                $result->endContinuation( 'standard' );
                $this->assertSame( null, $result->getResultData( 'continue' ) );
-               $this->assertSame( '', $result->getResultData( 'batchcomplete' ) );
+               $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
                $this->assertSame( null, $result->getResultData( 'query-continue' ) );
                $main->setContinuationManager( null );
 
@@ -1378,7 +1565,7 @@ class ApiResultTest extends MediaWikiTestCase {
 
                try {
                        $arr = array();
-                       ApiResult::setValue( $arr, 'foo',  new ApiResultTestSerializableObject(
+                       ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject(
                                new ApiResultTestStringifiableObject()
                        ) );
                        $this->fail( 'Expected exception not thrown' );
@@ -1392,7 +1579,7 @@ class ApiResultTest extends MediaWikiTestCase {
 
                try {
                        $arr = array();
-                       ApiResult::setValue( $arr, 'foo',  new ApiResultTestSerializableObject( NAN ) );
+                       ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject( NAN ) );
                        $this->fail( 'Expected exception not thrown' );
                } catch ( UnexpectedValueException $ex ) {
                        $this->assertSame(
@@ -1403,7 +1590,7 @@ class ApiResultTest extends MediaWikiTestCase {
                }
 
                $arr = array();
-               ApiResult::setValue( $arr, 'foo',  new ApiResultTestSerializableObject(
+               ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject(
                        array(
                                'one' => new ApiResultTestStringifiableObject( '1' ),
                                'two' => new ApiResultTestSerializableObject( 2 ),