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