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