73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								namespace JmesPath\Tests\Tree;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use JmesPath\AstRuntime;
							 | 
						||
| 
								 | 
							
								use JmesPath\TreeInterpreter;
							 | 
						||
| 
								 | 
							
								use PHPUnit\Framework\TestCase;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @covers JmesPath\Tree\TreeInterpreter
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class TreeInterpreterTest extends TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public function testReturnsNullWhenMergingNonArray()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $t = new TreeInterpreter();
							 | 
						||
| 
								 | 
							
								        $this->assertNull($t->visit([
							 | 
						||
| 
								 | 
							
								            'type' => 'flatten',
							 | 
						||
| 
								 | 
							
								            'children' => [
							 | 
						||
| 
								 | 
							
								                ['type' => 'literal', 'value' => 1],
							 | 
						||
| 
								 | 
							
								                ['type' => 'literal', 'value' => 1]
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        ], [], [
							 | 
						||
| 
								 | 
							
								            'runtime' => new AstRuntime()
							 | 
						||
| 
								 | 
							
								        ]));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testWorksWithArrayObjectAsObject()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $runtime = new AstRuntime();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('baz', $runtime('foo.bar', new \ArrayObject([
							 | 
						||
| 
								 | 
							
								            'foo' => new \ArrayObject(['bar' => 'baz'])
							 | 
						||
| 
								 | 
							
								        ])));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testWorksWithArrayObjectAsArray()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $runtime = new AstRuntime();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('baz', $runtime('foo[0].bar', new \ArrayObject([
							 | 
						||
| 
								 | 
							
								            'foo' => new \ArrayObject([new \ArrayObject(['bar' => 'baz'])])
							 | 
						||
| 
								 | 
							
								        ])));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testWorksWithArrayProjections()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $runtime = new AstRuntime();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(
							 | 
						||
| 
								 | 
							
								            ['baz'],
							 | 
						||
| 
								 | 
							
								            $runtime('foo[*].bar', new \ArrayObject([
							 | 
						||
| 
								 | 
							
								                'foo' => new \ArrayObject([
							 | 
						||
| 
								 | 
							
								                    new \ArrayObject([
							 | 
						||
| 
								 | 
							
								                        'bar' => 'baz'
							 | 
						||
| 
								 | 
							
								                    ])
							 | 
						||
| 
								 | 
							
								                ])
							 | 
						||
| 
								 | 
							
								            ]))
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testWorksWithObjectProjections()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $runtime = new AstRuntime();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(
							 | 
						||
| 
								 | 
							
								            ['baz'],
							 | 
						||
| 
								 | 
							
								            $runtime('foo.*.bar', new \ArrayObject([
							 | 
						||
| 
								 | 
							
								                'foo' => new \ArrayObject([
							 | 
						||
| 
								 | 
							
								                    'abc' => new \ArrayObject([
							 | 
						||
| 
								 | 
							
								                        'bar' => 'baz'
							 | 
						||
| 
								 | 
							
								                    ])
							 | 
						||
| 
								 | 
							
								                ])
							 | 
						||
| 
								 | 
							
								            ]))
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |