xref: /dokuwiki/_test/tests/Search/Index/AbstractIndexTestCase.php (revision ede4646658cf51245060332d97a319a39c788ea1)
1*ede46466SAndreas Gohr<?php
2*ede46466SAndreas Gohr
3*ede46466SAndreas Gohrnamespace dokuwiki\test\Search\Index;
4*ede46466SAndreas Gohr
5*ede46466SAndreas Gohruse dokuwiki\Search\Index\AbstractIndex;
6*ede46466SAndreas Gohr
7*ede46466SAndreas Gohrabstract class AbstractIndexTestCase extends \DokuWikiTest
8*ede46466SAndreas Gohr{
9*ede46466SAndreas Gohr
10*ede46466SAndreas Gohr    /**
11*ede46466SAndreas Gohr     * Return a new writable index
12*ede46466SAndreas Gohr     *
13*ede46466SAndreas Gohr     * @return AbstractIndex
14*ede46466SAndreas Gohr     */
15*ede46466SAndreas Gohr    abstract protected function getIndex();
16*ede46466SAndreas Gohr
17*ede46466SAndreas Gohr    public function testGetRowID()
18*ede46466SAndreas Gohr    {
19*ede46466SAndreas Gohr        $index = $this->getIndex();
20*ede46466SAndreas Gohr        $result = $index->getRowID('foo');
21*ede46466SAndreas Gohr        $index->save();
22*ede46466SAndreas Gohr        $this->assertEquals(0, $result);
23*ede46466SAndreas Gohr
24*ede46466SAndreas Gohr        $result = $index->getRowID('bar');
25*ede46466SAndreas Gohr        $index->save();
26*ede46466SAndreas Gohr        $this->assertEquals(1, $result);
27*ede46466SAndreas Gohr
28*ede46466SAndreas Gohr        $result = $index->getRowID('foo');
29*ede46466SAndreas Gohr        $index->save();
30*ede46466SAndreas Gohr        $this->assertEquals(0, $result);
31*ede46466SAndreas Gohr    }
32*ede46466SAndreas Gohr
33*ede46466SAndreas Gohr    public function testGetRowIDs()
34*ede46466SAndreas Gohr    {
35*ede46466SAndreas Gohr        $index = $this->getIndex();
36*ede46466SAndreas Gohr        $result = $index->getRowIDs(['foo', 'bar', 'baz']);
37*ede46466SAndreas Gohr        $index->save();
38*ede46466SAndreas Gohr        $this->assertEquals(['foo' => 0, 'bar' => 1, 'baz' => 2], $result);
39*ede46466SAndreas Gohr
40*ede46466SAndreas Gohr        $result = $index->getRowIDs(['foo', 'bang', 'baz']);
41*ede46466SAndreas Gohr        $index->save();
42*ede46466SAndreas Gohr        $this->assertEquals(['foo' => 0, 'baz' => 2, 'bang' => 3], $result);
43*ede46466SAndreas Gohr    }
44*ede46466SAndreas Gohr
45*ede46466SAndreas Gohr    public function testRetrieve()
46*ede46466SAndreas Gohr    {
47*ede46466SAndreas Gohr        $index = $this->getIndex();
48*ede46466SAndreas Gohr        $index->getRowIDs(['foo', 'bar', 'baz']); // add data
49*ede46466SAndreas Gohr        $index->save();
50*ede46466SAndreas Gohr
51*ede46466SAndreas Gohr        $this->assertEquals('bar', $index->retrieveRow(1));
52*ede46466SAndreas Gohr        $this->assertEquals('', $index->retrieveRow(5)); // non existent, but will be created with padding
53*ede46466SAndreas Gohr        $index->save();
54*ede46466SAndreas Gohr
55*ede46466SAndreas Gohr        // rows up to 5 exist now, 7 does not and is ignored
56*ede46466SAndreas Gohr        $this->assertEquals([0 => 'foo', 2 => 'baz', 4 => ''], $index->retrieveRows([0, 2, 4, 7]));
57*ede46466SAndreas Gohr        $index->save();
58*ede46466SAndreas Gohr    }
59*ede46466SAndreas Gohr
60*ede46466SAndreas Gohr    public function testSearch()
61*ede46466SAndreas Gohr    {
62*ede46466SAndreas Gohr        $index = $this->getIndex();
63*ede46466SAndreas Gohr        $index->getRowIDs(['foo', 'bar', 'baz', 'bazzel']);
64*ede46466SAndreas Gohr        $index->save();
65*ede46466SAndreas Gohr
66*ede46466SAndreas Gohr        $result = $index->search('/^ba.$/');
67*ede46466SAndreas Gohr        $this->assertEquals(
68*ede46466SAndreas Gohr            [1 => 'bar', 2 => 'baz'],
69*ede46466SAndreas Gohr            $result
70*ede46466SAndreas Gohr        );
71*ede46466SAndreas Gohr    }
72*ede46466SAndreas Gohr
73*ede46466SAndreas Gohr    public function testIterable()
74*ede46466SAndreas Gohr    {
75*ede46466SAndreas Gohr        $index = $this->getIndex();
76*ede46466SAndreas Gohr        $index->getRowIDs(['foo', 'bar', 'baz']);
77*ede46466SAndreas Gohr        $index->save();
78*ede46466SAndreas Gohr
79*ede46466SAndreas Gohr        $result = iterator_to_array($index);
80*ede46466SAndreas Gohr        $this->assertEquals([0 => 'foo', 1 => 'bar', 2 => 'baz'], $result);
81*ede46466SAndreas Gohr    }
82*ede46466SAndreas Gohr}
83