TypeMapArrayIteratorTest.php 2.45 KB
Newer Older
1 2
<?php

3
namespace MongoDB\Tests\Model;
4 5

use MongoDB\Model\TypeMapArrayIterator;
6
use MongoDB\Tests\TestCase;
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

class TypeMapArrayIteratorTest extends TestCase
{
    public function testCurrentAppliesTypeMap()
    {
        $document = [
            'array' => [1, 2, 3],
            'object' => ['foo' => 'bar'],
        ];

        $typeMap = [
            'root' => 'object',
            'document' => 'object',
            'array' => 'array',
        ];

        $iterator = new TypeMapArrayIterator([$document], $typeMap);

        $expectedDocument = (object) [
            'array' => [1, 2, 3],
            'object' => (object) ['foo' => 'bar'],
        ];

        $iterator->rewind();

        $this->assertEquals($expectedDocument, $iterator->current());
    }
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

    public function testOffsetGetAppliesTypeMap()
    {
        $document = [
            'array' => [1, 2, 3],
            'object' => ['foo' => 'bar'],
        ];

        $typeMap = [
            'root' => 'object',
            'document' => 'object',
            'array' => 'array',
        ];

        $iterator = new TypeMapArrayIterator([$document], $typeMap);

        $expectedDocument = (object) [
            'array' => [1, 2, 3],
            'object' => (object) ['foo' => 'bar'],
        ];

        $iterator->rewind();

        $this->assertEquals($expectedDocument, $iterator->offsetGet(0));
    }

    /**
61
     * @dataProvider provideMutateMethods
62 63 64
     * @expectedException MongoDB\Exception\BadMethodCallException
     * @expectedExceptionMessage MongoDB\Model\TypeMapArrayIterator is immutable
     */
65
    public function testMutateMethodsCannotBeCalled($method, $args)
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
    {
        $document = [
            'array' => [1, 2, 3],
            'object' => ['foo' => 'bar'],
        ];

        $typeMap = [
            'root' => 'object',
            'document' => 'object',
            'array' => 'array',
        ];

        $iterator = new TypeMapArrayIterator([$document], $typeMap);

        $iterator->rewind();

82
        call_user_func_array([$iterator, $method], $args);
83 84
    }

85
    public function provideMutateMethods()
86
    {
87 88 89 90 91 92 93 94 95 96
        return [
            ['append', [['x' => 1]]],
            ['asort', []],
            ['ksort', []],
            ['natcasesort', []],
            ['natsort', []],
            ['offsetSet', [0, ['x' => 1]]],
            ['offsetUnset', [0]],
            ['uasort', [function($a, $b) { return 0; }]],
            ['uksort', [function($a, $b) { return 0; }]],
97 98
        ];
    }
99
}