mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00

As compiler was not using structure on its own, extract it and replace instantiation by a factory.
54 lines
1.5 KiB
PHP
54 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Alchemy\Tests\Phrasea\SearchEngine;
|
|
|
|
use Alchemy\Phrasea\SearchEngine\Elastic\Search\QueryCompiler;
|
|
use Alchemy\Phrasea\SearchEngine\Elastic\Search\QueryVisitor;
|
|
use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Structure;
|
|
use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus;
|
|
use Alchemy\Tests\Tools\CsvFileIterator;
|
|
use Hoa\Compiler;
|
|
use Hoa\File;
|
|
|
|
/**
|
|
* @group unit
|
|
* @group searchengine
|
|
*/
|
|
class QueryCompilerTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
private $compiler;
|
|
|
|
protected function setUp()
|
|
{
|
|
$grammar_path = 'grammar/query.pp';
|
|
$project_root = '../../../../..';
|
|
$grammar_path = realpath(implode('/', [__DIR__, $project_root, $grammar_path]));
|
|
$parser = Compiler\Llk\Llk::load(new File\Read($grammar_path));
|
|
|
|
$structure = $this->getMock(Structure::class);
|
|
|
|
$queryVisitorFactory = function () use ($structure) {
|
|
return new QueryVisitor($structure);
|
|
};
|
|
|
|
$thesaurus = $this->getMockBuilder(Thesaurus::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$this->compiler = new QueryCompiler($parser, $queryVisitorFactory, $thesaurus);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider queryProvider
|
|
*/
|
|
public function testQueryParsing($query, $expected)
|
|
{
|
|
$this->assertEquals($expected, $this->compiler->parse($query)->dump());
|
|
}
|
|
|
|
public function queryProvider()
|
|
{
|
|
return new CsvFileIterator(sprintf('%s/resources/queries.csv', __DIR__), '|', '\'');
|
|
}
|
|
}
|