1<?php 2 3namespace dokuwiki\test\Search\Query; 4 5use dokuwiki\Search\Query\QueryParser; 6 7/** 8 * Test cases for the QueryParser 9 * 10 * @author Michael Große <grosse@cosmocode.de> 11 */ 12class QueryParserTest extends \DokuWikiTest 13{ 14 public function testConvert() 15 { 16 $inputQuery = 'test -baz "foo bar" @abc ^def'; 17 18 $actualParsedQuery = (new QueryParser)->convert($inputQuery); 19 20 $expectedParsedQuery = [ 21 'query' => 'test -baz "foo bar" @abc ^def', 22 'parsed_str' => '(W+:test)ANDNOT((W-:baz))AND((W_:foo)AND(W_:bar)AND(P+:foo bar))AND(N+:abc)ANDNOT(N-:def)', 23 'parsed_ary' => [ 24 'W+:test', 25 'W-:baz', 26 'NOT', 27 'AND', 28 'W_:foo', 29 'W_:bar', 30 'AND', 31 'P+:foo bar', 32 'AND', 33 'AND', 34 'N+:abc', 35 'AND', 36 'N-:def', 37 'NOT', 38 'AND', 39 ], 40 'words' => [ 41 'test', 42 'baz', 43 'foo', 44 'bar', 45 ], 46 'highlight' => [ 47 'test', 48 'foo bar', 49 ], 50 'and' => [ 51 'test', 52 ], 53 'phrases' => [ 54 'foo bar', 55 ], 56 'ns' => [ 57 'abc', 58 ], 59 'notns' => [ 60 'def', 61 ], 62 'not' => [ 63 'baz', 64 ], 65 ]; 66 $this->assertEquals($expectedParsedQuery, $actualParsedQuery); 67 } 68 69 public function testRevert() 70 { 71 $actualQuery = (new QueryParser)->revert( 72 ['test'], 73 ['baz'], 74 ['foo bar'], 75 ['abc'], 76 ['def'] 77 ); 78 79 $this->assertEquals('test -baz "foo bar" @abc ^def', $actualQuery); 80 } 81} 82