|
1 # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
|
2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
|
3 # |
|
4 # This file is part of CubicWeb. |
|
5 # |
|
6 # CubicWeb is free software: you can redistribute it and/or modify it under the |
|
7 # terms of the GNU Lesser General Public License as published by the Free |
|
8 # Software Foundation, either version 2.1 of the License, or (at your option) |
|
9 # any later version. |
|
10 # |
|
11 # CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
|
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
|
13 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
|
14 # details. |
|
15 # |
|
16 # You should have received a copy of the GNU Lesser General Public License along |
|
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
|
18 import unittest |
|
19 |
|
20 from logilab.common.testlib import TestCase, unittest_main |
|
21 from cubicweb.devtools import TestServerConfiguration |
|
22 from cubicweb.xy import xy |
|
23 |
|
24 SKIPCAUSE = None |
|
25 try: |
|
26 from cubicweb.spa2rql import Sparql2rqlTranslator |
|
27 except ImportError as exc: |
|
28 SKIPCAUSE = str(exc) |
|
29 |
|
30 xy.add_equivalence('Project', 'doap:Project') |
|
31 xy.add_equivalence('Project creation_date', 'doap:Project doap:created') |
|
32 xy.add_equivalence('Project name', 'doap:Project doap:name') |
|
33 xy.add_equivalence('Project name', 'doap:Project dc:title') |
|
34 |
|
35 |
|
36 config = TestServerConfiguration('data') |
|
37 config.bootstrap_cubes() |
|
38 schema = config.load_schema() |
|
39 |
|
40 |
|
41 @unittest.skipIf(SKIPCAUSE, SKIPCAUSE) |
|
42 class XYTC(TestCase): |
|
43 def setUp(self): |
|
44 self.tr = Sparql2rqlTranslator(schema) |
|
45 |
|
46 def _test(self, sparql, rql, args={}): |
|
47 qi = self.tr.translate(sparql) |
|
48 self.assertEqual(qi.finalize(), (rql, args)) |
|
49 |
|
50 def XXX_test_base_01(self): |
|
51 self._test('SELECT * WHERE { }', 'Any X') |
|
52 |
|
53 |
|
54 def test_base_is(self): |
|
55 self._test(''' |
|
56 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
57 SELECT ?project |
|
58 WHERE { |
|
59 ?project a doap:Project; |
|
60 }''', 'Any PROJECT WHERE PROJECT is Project') |
|
61 |
|
62 def test_base_rdftype(self): |
|
63 self._test(''' |
|
64 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
65 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> |
|
66 SELECT ?project |
|
67 WHERE { |
|
68 ?project rdf:type doap:Project. |
|
69 }''', 'Any PROJECT WHERE PROJECT is Project') |
|
70 |
|
71 def test_base_attr_sel(self): |
|
72 self._test(''' |
|
73 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
74 SELECT ?created |
|
75 WHERE { |
|
76 ?project a doap:Project; |
|
77 doap:created ?created. |
|
78 }''', 'Any CREATED WHERE PROJECT creation_date CREATED, PROJECT is Project') |
|
79 |
|
80 |
|
81 def test_base_attr_sel_distinct(self): |
|
82 self._test(''' |
|
83 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
84 SELECT DISTINCT ?name |
|
85 WHERE { |
|
86 ?project a doap:Project; |
|
87 doap:name ?name. |
|
88 }''', 'DISTINCT Any NAME WHERE PROJECT name NAME, PROJECT is Project') |
|
89 |
|
90 |
|
91 def test_base_attr_sel_reduced(self): |
|
92 self._test(''' |
|
93 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
94 SELECT REDUCED ?name |
|
95 WHERE { |
|
96 ?project a doap:Project; |
|
97 doap:name ?name. |
|
98 }''', 'Any NAME WHERE PROJECT name NAME, PROJECT is Project') |
|
99 |
|
100 |
|
101 def test_base_attr_sel_limit_offset(self): |
|
102 self._test(''' |
|
103 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
104 SELECT ?name |
|
105 WHERE { |
|
106 ?project a doap:Project; |
|
107 doap:name ?name. |
|
108 } |
|
109 LIMIT 20''', 'Any NAME LIMIT 20 WHERE PROJECT name NAME, PROJECT is Project') |
|
110 self._test(''' |
|
111 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
112 SELECT ?name |
|
113 WHERE { |
|
114 ?project a doap:Project; |
|
115 doap:name ?name. |
|
116 } |
|
117 LIMIT 20 OFFSET 10''', 'Any NAME LIMIT 20 OFFSET 10 WHERE PROJECT name NAME, PROJECT is Project') |
|
118 |
|
119 |
|
120 def test_base_attr_sel_orderby(self): |
|
121 self._test(''' |
|
122 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
123 SELECT ?name |
|
124 WHERE { |
|
125 ?project a doap:Project; |
|
126 doap:name ?name; |
|
127 doap:created ?created. |
|
128 } |
|
129 ORDER BY ?name DESC(?created)''', 'Any NAME ORDERBY NAME ASC, CREATED DESC WHERE PROJECT name NAME, PROJECT creation_date CREATED, PROJECT is Project') |
|
130 |
|
131 |
|
132 def test_base_any_attr_sel(self): |
|
133 self._test(''' |
|
134 PREFIX dc: <http://purl.org/dc/elements/1.1/> |
|
135 SELECT ?x ?cd |
|
136 WHERE { |
|
137 ?x dc:date ?cd; |
|
138 }''', 'Any X, CD WHERE X creation_date CD') |
|
139 |
|
140 |
|
141 def test_base_any_attr_sel_amb(self): |
|
142 xy.add_equivalence('Version publication_date', 'doap:Version dc:date') |
|
143 try: |
|
144 self._test(''' |
|
145 PREFIX dc: <http://purl.org/dc/elements/1.1/> |
|
146 SELECT ?x ?cd |
|
147 WHERE { |
|
148 ?x dc:date ?cd; |
|
149 }''', '(Any X, CD WHERE , X creation_date CD) UNION (Any X, CD WHERE , X publication_date CD, X is Version)') |
|
150 finally: |
|
151 xy.remove_equivalence('Version publication_date', 'doap:Version dc:date') |
|
152 |
|
153 |
|
154 def test_base_any_attr_sel_amb_limit_offset(self): |
|
155 xy.add_equivalence('Version publication_date', 'doap:Version dc:date') |
|
156 try: |
|
157 self._test(''' |
|
158 PREFIX dc: <http://purl.org/dc/elements/1.1/> |
|
159 SELECT ?x ?cd |
|
160 WHERE { |
|
161 ?x dc:date ?cd; |
|
162 } |
|
163 LIMIT 20 OFFSET 10''', 'Any X, CD LIMIT 20 OFFSET 10 WITH X, CD BEING ((Any X, CD WHERE , X creation_date CD) UNION (Any X, CD WHERE , X publication_date CD, X is Version))') |
|
164 finally: |
|
165 xy.remove_equivalence('Version publication_date', 'doap:Version dc:date') |
|
166 |
|
167 |
|
168 def test_base_any_attr_sel_amb_orderby(self): |
|
169 xy.add_equivalence('Version publication_date', 'doap:Version dc:date') |
|
170 try: |
|
171 self._test(''' |
|
172 PREFIX dc: <http://purl.org/dc/elements/1.1/> |
|
173 SELECT ?x ?cd |
|
174 WHERE { |
|
175 ?x dc:date ?cd; |
|
176 } |
|
177 ORDER BY DESC(?cd)''', 'Any X, CD ORDERBY CD DESC WITH X, CD BEING ((Any X, CD WHERE , X creation_date CD) UNION (Any X, CD WHERE , X publication_date CD, X is Version))') |
|
178 finally: |
|
179 xy.remove_equivalence('Version publication_date', 'doap:Version dc:date') |
|
180 |
|
181 |
|
182 def test_restr_attr(self): |
|
183 self._test(''' |
|
184 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
185 SELECT ?project |
|
186 WHERE { |
|
187 ?project a doap:Project; |
|
188 doap:name "cubicweb". |
|
189 }''', 'Any PROJECT WHERE PROJECT name %(a)s, PROJECT is Project', {'a': 'cubicweb'}) |
|
190 |
|
191 def test_dctitle_both_project_cwuser(self): |
|
192 self._test(''' |
|
193 PREFIX doap: <http://usefulinc.com/ns/doap#> |
|
194 PREFIX dc: <http://purl.org/dc/elements/1.1/> |
|
195 SELECT ?project ?title |
|
196 WHERE { |
|
197 ?project a doap:Project; |
|
198 dc:title ?title. |
|
199 }''', 'Any PROJECT, TITLE WHERE PROJECT name TITLE, PROJECT is Project') |
|
200 |
|
201 # # Two elements in the group |
|
202 # PREFIX : <http://example.org/ns#> |
|
203 # SELECT * |
|
204 # { :p :q :r OPTIONAL { :a :b :c } |
|
205 # :p :q :r OPTIONAL { :a :b :c } |
|
206 # } |
|
207 |
|
208 # PREFIX : <http://example.org/ns#> |
|
209 # SELECT * |
|
210 # { |
|
211 # { ?s ?p ?o } UNION { ?a ?b ?c } |
|
212 # } |
|
213 |
|
214 # PREFIX dob: <http://placetime.com/interval/gregorian/1977-01-18T04:00:00Z/P> |
|
215 # PREFIX time: <http://www.ai.sri.com/daml/ontologies/time/Time.daml#> |
|
216 # PREFIX dc: <http://purl.org/dc/elements/1.1/> |
|
217 # SELECT ?desc |
|
218 # WHERE { |
|
219 # dob:1D a time:ProperInterval; |
|
220 # dc:description ?desc. |
|
221 # } |
|
222 |
|
223 if __name__ == '__main__': |
|
224 unittest_main() |