xref: /dokuwiki/_test/tests/Search/Query/QueryParserTest.php (revision ede4646658cf51245060332d97a319a39c788ea1)
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