xref: /plugin/strata/_test/query_sort_optional.test.php (revision 5153720fcc1dd2b6e63035d45f7c2bc32e429371)
1*5153720fSfkaag71<?php
2*5153720fSfkaag71require_once('strataquerytest.inc.php');
3*5153720fSfkaag71
4*5153720fSfkaag71/**
5*5153720fSfkaag71 * Tests queries - sorting optional.
6*5153720fSfkaag71 *
7*5153720fSfkaag71 * @group plugin_strata_optional
8*5153720fSfkaag71 * @group plugins
9*5153720fSfkaag71 */
10*5153720fSfkaag71class query_sort_optional_test extends Strata_Query_UnitTestCase {
11*5153720fSfkaag71
12*5153720fSfkaag71    function setup() {
13*5153720fSfkaag71        parent::setup();
14*5153720fSfkaag71    }
15*5153720fSfkaag71
16*5153720fSfkaag71    function testPartiallyNumericSort() {
17*5153720fSfkaag71        $query = array (
18*5153720fSfkaag71            'type' => 'select',
19*5153720fSfkaag71            'grouping'=>array(),
20*5153720fSfkaag71            'group' => array (
21*5153720fSfkaag71                'type' => 'triple',
22*5153720fSfkaag71                'subject' => array (
23*5153720fSfkaag71                    'type' => 'variable',
24*5153720fSfkaag71                    'text' => 'p'
25*5153720fSfkaag71                ),
26*5153720fSfkaag71                'predicate' => array (
27*5153720fSfkaag71                    'type' => 'literal',
28*5153720fSfkaag71                    'text' => 'tax rate'
29*5153720fSfkaag71                ),
30*5153720fSfkaag71                'object' => array (
31*5153720fSfkaag71                    'type' => 'variable',
32*5153720fSfkaag71                    'text' => 'tax'
33*5153720fSfkaag71                )
34*5153720fSfkaag71            ),
35*5153720fSfkaag71            'projection' => array (
36*5153720fSfkaag71                'p',
37*5153720fSfkaag71                'tax'
38*5153720fSfkaag71            ),
39*5153720fSfkaag71            'ordering' => array (
40*5153720fSfkaag71                array (
41*5153720fSfkaag71                    'variable' => 'tax',
42*5153720fSfkaag71                    'direction' => 'asc'
43*5153720fSfkaag71                )
44*5153720fSfkaag71            )
45*5153720fSfkaag71        );
46*5153720fSfkaag71
47*5153720fSfkaag71        $expected = array (
48*5153720fSfkaag71            array (
49*5153720fSfkaag71                'p' => array('person:carol'),
50*5153720fSfkaag71                'tax' => array('2%')
51*5153720fSfkaag71            ),
52*5153720fSfkaag71            array (
53*5153720fSfkaag71                'p' => array('person:alice'),
54*5153720fSfkaag71                'tax' => array('10%')
55*5153720fSfkaag71            ),
56*5153720fSfkaag71            array (
57*5153720fSfkaag71                'p' => array('person:bob'),
58*5153720fSfkaag71                'tax' => array('25%')
59*5153720fSfkaag71            )
60*5153720fSfkaag71        );
61*5153720fSfkaag71
62*5153720fSfkaag71        $this->assertQueryResult($query, $expected, 'Partial numeric sort (numbers first, text second) unsupported');
63*5153720fSfkaag71    }
64*5153720fSfkaag71
65*5153720fSfkaag71    function testNaturalSort() {
66*5153720fSfkaag71        $query = array (
67*5153720fSfkaag71            'type' => 'select',
68*5153720fSfkaag71            'grouping'=>array(),
69*5153720fSfkaag71            'group' => array (
70*5153720fSfkaag71                'type' => 'triple',
71*5153720fSfkaag71                'subject' => array (
72*5153720fSfkaag71                    'type' => 'variable',
73*5153720fSfkaag71                    'text' => 'p'
74*5153720fSfkaag71                ),
75*5153720fSfkaag71                'predicate' => array (
76*5153720fSfkaag71                    'type' => 'literal',
77*5153720fSfkaag71                    'text' => 'has length'
78*5153720fSfkaag71                ),
79*5153720fSfkaag71                'object' => array (
80*5153720fSfkaag71                    'type' => 'variable',
81*5153720fSfkaag71                    'text' => 'length'
82*5153720fSfkaag71                )
83*5153720fSfkaag71            ),
84*5153720fSfkaag71            'projection' => array (
85*5153720fSfkaag71                'p',
86*5153720fSfkaag71                'length'
87*5153720fSfkaag71            ),
88*5153720fSfkaag71            'ordering' => array (
89*5153720fSfkaag71                array (
90*5153720fSfkaag71                    'variable' => 'length',
91*5153720fSfkaag71                    'direction' => 'asc'
92*5153720fSfkaag71                )
93*5153720fSfkaag71            )
94*5153720fSfkaag71        );
95*5153720fSfkaag71
96*5153720fSfkaag71        $expected = array (
97*5153720fSfkaag71            array (
98*5153720fSfkaag71                'p' => array('person:carol'),
99*5153720fSfkaag71                'length' => array('4 ft 11 in')
100*5153720fSfkaag71            ),
101*5153720fSfkaag71            array (
102*5153720fSfkaag71                'p' => array('person:alice'),
103*5153720fSfkaag71                'length' => array('5 ft 5 in')
104*5153720fSfkaag71            ),
105*5153720fSfkaag71            array (
106*5153720fSfkaag71                'p' => array('person:bob'),
107*5153720fSfkaag71                'length' => array('5 ft 10 in')
108*5153720fSfkaag71            )
109*5153720fSfkaag71        );
110*5153720fSfkaag71
111*5153720fSfkaag71        $this->assertQueryResult($query, $expected, 'Full natural sort unsupported');
112*5153720fSfkaag71    }
113*5153720fSfkaag71
114*5153720fSfkaag71    function testUnicodeSort() {
115*5153720fSfkaag71        $query = array (
116*5153720fSfkaag71            'type' => 'select',
117*5153720fSfkaag71            'grouping'=>array(),
118*5153720fSfkaag71            'group' => array (
119*5153720fSfkaag71                'type' => 'triple',
120*5153720fSfkaag71                'subject' => array (
121*5153720fSfkaag71                    'type' => 'variable',
122*5153720fSfkaag71                    'text' => 'p'
123*5153720fSfkaag71                ),
124*5153720fSfkaag71                'predicate' => array (
125*5153720fSfkaag71                    'type' => 'literal',
126*5153720fSfkaag71                    'text' => 'identifier'
127*5153720fSfkaag71                ),
128*5153720fSfkaag71                'object' => array (
129*5153720fSfkaag71                    'type' => 'variable',
130*5153720fSfkaag71                    'text' => 'id'
131*5153720fSfkaag71                )
132*5153720fSfkaag71            ),
133*5153720fSfkaag71            'projection' => array (
134*5153720fSfkaag71                'p',
135*5153720fSfkaag71                'id'
136*5153720fSfkaag71            ),
137*5153720fSfkaag71            'ordering' => array (
138*5153720fSfkaag71                array (
139*5153720fSfkaag71                    'variable' => 'id',
140*5153720fSfkaag71                    'direction' => 'asc'
141*5153720fSfkaag71                )
142*5153720fSfkaag71            )
143*5153720fSfkaag71        );
144*5153720fSfkaag71
145*5153720fSfkaag71        $expected = array (
146*5153720fSfkaag71            array (
147*5153720fSfkaag71                'p' => array('person:alice'),
148*5153720fSfkaag71                'id' => array('α')
149*5153720fSfkaag71            ),
150*5153720fSfkaag71            array (
151*5153720fSfkaag71                'p' => array('person:bob'),
152*5153720fSfkaag71                'id' => array('Β')
153*5153720fSfkaag71            ),
154*5153720fSfkaag71            array (
155*5153720fSfkaag71                'p' => array('person:carol'),
156*5153720fSfkaag71                'id' => array('γ')
157*5153720fSfkaag71            )
158*5153720fSfkaag71        );
159*5153720fSfkaag71
160*5153720fSfkaag71        $this->assertQueryResult($query, $expected, 'Case insensitive unicode sort unsupported');
161*5153720fSfkaag71    }
162*5153720fSfkaag71
163*5153720fSfkaag71}
164