xref: /plugin/struct/_test/ConfigParserTest.php (revision 8fed17f342cc190557a6ce94d1787f9e2f63cb6c)
1*8fed17f3SAndreas Gohr<?php
2*8fed17f3SAndreas Gohr
3*8fed17f3SAndreas Gohrnamespace dokuwiki\plugin\struct\test;
4*8fed17f3SAndreas Gohr
5*8fed17f3SAndreas Gohruse dokuwiki\plugin\struct\meta;
6*8fed17f3SAndreas Gohr
7*8fed17f3SAndreas Gohr/**
8*8fed17f3SAndreas Gohr * Tests for parsing the aggregation config for the struct plugin
9*8fed17f3SAndreas Gohr *
10*8fed17f3SAndreas Gohr * @group plugin_struct
11*8fed17f3SAndreas Gohr * @group plugins
12*8fed17f3SAndreas Gohr *
13*8fed17f3SAndreas Gohr */
14*8fed17f3SAndreas Gohrclass ConfigParserTest extends StructTest
15*8fed17f3SAndreas Gohr{
16*8fed17f3SAndreas Gohr
17*8fed17f3SAndreas Gohr    public function test_simple()
18*8fed17f3SAndreas Gohr    {
19*8fed17f3SAndreas Gohr        $lines = [
20*8fed17f3SAndreas Gohr            "schema    : testtable, another, foo bar",
21*8fed17f3SAndreas Gohr            "cols      : %pageid%, count",
22*8fed17f3SAndreas Gohr            "sort      : ^count",
23*8fed17f3SAndreas Gohr            "sort      : %pageid%, ^bam",
24*8fed17f3SAndreas Gohr            "align     : r,l,center,foo"
25*8fed17f3SAndreas Gohr        ];
26*8fed17f3SAndreas Gohr
27*8fed17f3SAndreas Gohr        $configParser = new meta\ConfigParser($lines);
28*8fed17f3SAndreas Gohr        $actual_config = $configParser->getConfig();
29*8fed17f3SAndreas Gohr
30*8fed17f3SAndreas Gohr        $expected_config = [
31*8fed17f3SAndreas Gohr            'limit' => 0,
32*8fed17f3SAndreas Gohr            'dynfilters' => false,
33*8fed17f3SAndreas Gohr            'summarize' => false,
34*8fed17f3SAndreas Gohr            'rownumbers' => false,
35*8fed17f3SAndreas Gohr            'sepbyheaders' => false,
36*8fed17f3SAndreas Gohr            'headers' =>
37*8fed17f3SAndreas Gohr                [
38*8fed17f3SAndreas Gohr                    0 => NULL,
39*8fed17f3SAndreas Gohr                    1 => NULL,
40*8fed17f3SAndreas Gohr                ],
41*8fed17f3SAndreas Gohr            'widths' =>
42*8fed17f3SAndreas Gohr                [],
43*8fed17f3SAndreas Gohr            'filter' =>
44*8fed17f3SAndreas Gohr                [],
45*8fed17f3SAndreas Gohr            'schemas' =>
46*8fed17f3SAndreas Gohr                [
47*8fed17f3SAndreas Gohr                    0 =>
48*8fed17f3SAndreas Gohr                        [
49*8fed17f3SAndreas Gohr                            0 => 'testtable',
50*8fed17f3SAndreas Gohr                            1 => '',
51*8fed17f3SAndreas Gohr                        ],
52*8fed17f3SAndreas Gohr                    1 =>
53*8fed17f3SAndreas Gohr                        [
54*8fed17f3SAndreas Gohr                            0 => 'another',
55*8fed17f3SAndreas Gohr                            1 => '',
56*8fed17f3SAndreas Gohr                        ],
57*8fed17f3SAndreas Gohr                    2 =>
58*8fed17f3SAndreas Gohr                        [
59*8fed17f3SAndreas Gohr                            0 => 'foo',
60*8fed17f3SAndreas Gohr                            1 => 'bar',
61*8fed17f3SAndreas Gohr                        ],
62*8fed17f3SAndreas Gohr                ],
63*8fed17f3SAndreas Gohr            'cols' =>
64*8fed17f3SAndreas Gohr                [
65*8fed17f3SAndreas Gohr                    0 => '%pageid%',
66*8fed17f3SAndreas Gohr                    1 => 'count',
67*8fed17f3SAndreas Gohr                ],
68*8fed17f3SAndreas Gohr            'sort' =>
69*8fed17f3SAndreas Gohr                [
70*8fed17f3SAndreas Gohr                    [
71*8fed17f3SAndreas Gohr                        0 => 'count',
72*8fed17f3SAndreas Gohr                        1 => false,
73*8fed17f3SAndreas Gohr                    ],
74*8fed17f3SAndreas Gohr                    [
75*8fed17f3SAndreas Gohr                        0 => '%pageid%',
76*8fed17f3SAndreas Gohr                        1 => true,
77*8fed17f3SAndreas Gohr                    ],
78*8fed17f3SAndreas Gohr                    [
79*8fed17f3SAndreas Gohr                        0 => 'bam',
80*8fed17f3SAndreas Gohr                        1 => false,
81*8fed17f3SAndreas Gohr                    ]
82*8fed17f3SAndreas Gohr                ],
83*8fed17f3SAndreas Gohr            'csv' => true,
84*8fed17f3SAndreas Gohr            'target' => '',
85*8fed17f3SAndreas Gohr            'align' => ['right', 'left', 'center', null]
86*8fed17f3SAndreas Gohr        ];
87*8fed17f3SAndreas Gohr
88*8fed17f3SAndreas Gohr        $this->assertEquals($expected_config, $actual_config);
89*8fed17f3SAndreas Gohr    }
90*8fed17f3SAndreas Gohr
91*8fed17f3SAndreas Gohr    public function test_width()
92*8fed17f3SAndreas Gohr    {
93*8fed17f3SAndreas Gohr        $lines = ['width: 5, 15px, 23.4em, meh, 10em'];
94*8fed17f3SAndreas Gohr
95*8fed17f3SAndreas Gohr        $configParser = new meta\ConfigParser($lines);
96*8fed17f3SAndreas Gohr
97*8fed17f3SAndreas Gohr        $config = $configParser->getConfig();
98*8fed17f3SAndreas Gohr
99*8fed17f3SAndreas Gohr        $this->assertEquals(
100*8fed17f3SAndreas Gohr            ['5px', '15px', '23.4em', '', '10em'],
101*8fed17f3SAndreas Gohr            $config['widths']
102*8fed17f3SAndreas Gohr        );
103*8fed17f3SAndreas Gohr    }
104*8fed17f3SAndreas Gohr
105*8fed17f3SAndreas Gohr    /**
106*8fed17f3SAndreas Gohr     * @see test_splitLine
107*8fed17f3SAndreas Gohr     */
108*8fed17f3SAndreas Gohr    public function provide_splitLine()
109*8fed17f3SAndreas Gohr    {
110*8fed17f3SAndreas Gohr        return [
111*8fed17f3SAndreas Gohr            ['', ['', '']],
112*8fed17f3SAndreas Gohr            ['   ', ['', '']],
113*8fed17f3SAndreas Gohr            ['foo', ['foo', '']],
114*8fed17f3SAndreas Gohr            ['foo:bar', ['foo', 'bar']],
115*8fed17f3SAndreas Gohr            ['foo: bar', ['foo', 'bar']],
116*8fed17f3SAndreas Gohr            ['fOO: bar', ['foo', 'bar']],
117*8fed17f3SAndreas Gohr            ['  fOO: bar  ', ['foo', 'bar']],
118*8fed17f3SAndreas Gohr        ];
119*8fed17f3SAndreas Gohr    }
120*8fed17f3SAndreas Gohr
121*8fed17f3SAndreas Gohr    /**
122*8fed17f3SAndreas Gohr     * @dataProvider provide_splitLine
123*8fed17f3SAndreas Gohr     */
124*8fed17f3SAndreas Gohr    public function test_splitLine($line, $expected)
125*8fed17f3SAndreas Gohr    {
126*8fed17f3SAndreas Gohr        $configParser = new meta\ConfigParser(array());
127*8fed17f3SAndreas Gohr        $actual = $this->callInaccessibleMethod($configParser, 'splitLine', [$line]);
128*8fed17f3SAndreas Gohr        $this->assertEquals($expected, $actual);
129*8fed17f3SAndreas Gohr    }
130*8fed17f3SAndreas Gohr}
131