]> dev.renevier.net Git - syp.git/blob - openlayers/tests/Format/Filter/v1_1_0.html
initial commit
[syp.git] / openlayers / tests / Format / Filter / v1_1_0.html
1 <html> 
2 <head> 
3     <script src="../../../lib/OpenLayers.js"></script>
4     <script type="text/javascript">
5     
6     var test_xml =
7         '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
8             '<ogc:Or>' +
9                 '<ogc:PropertyIsBetween>' +
10                     '<ogc:PropertyName>number</ogc:PropertyName>' +
11                     '<ogc:LowerBoundary>' +
12                         '<ogc:Literal>1064866676</ogc:Literal>' +
13                     '</ogc:LowerBoundary>' +
14                     '<ogc:UpperBoundary>' +
15                         '<ogc:Literal>1065512599</ogc:Literal>' +
16                     '</ogc:UpperBoundary>' +
17                 '</ogc:PropertyIsBetween>' +
18                 '<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">' +
19                     '<ogc:PropertyName>cat</ogc:PropertyName>' +
20                     '<ogc:Literal>*dog.food!*good</ogc:Literal>' +
21                 '</ogc:PropertyIsLike>' +
22                 '<ogc:Not>' +
23                     '<ogc:PropertyIsLessThanOrEqualTo>' +
24                         '<ogc:PropertyName>FOO</ogc:PropertyName>' +
25                         '<ogc:Literal>5000</ogc:Literal>' +
26                     '</ogc:PropertyIsLessThanOrEqualTo>' +
27                 '</ogc:Not>' +
28                 '<ogc:PropertyIsEqualTo matchCase="true">' +
29                     '<ogc:PropertyName>cat</ogc:PropertyName>' +
30                     '<ogc:Literal>dog</ogc:Literal>' +
31                 '</ogc:PropertyIsEqualTo>' +
32                 '<ogc:PropertyIsEqualTo matchCase="false">' +
33                     '<ogc:PropertyName>cat</ogc:PropertyName>' +
34                     '<ogc:Literal>dog</ogc:Literal>' +
35                 '</ogc:PropertyIsEqualTo>' +
36             '</ogc:Or>' +
37         '</ogc:Filter>';
38
39     function test_read(t) {
40         t.plan(3);
41
42         var parser = new OpenLayers.Format.Filter.v1_1_0();
43         var xml = new OpenLayers.Format.XML();
44         var filter = parser.read(xml.read(test_xml).documentElement);
45
46         t.ok(filter instanceof OpenLayers.Filter.Logical, "instance of correct class");
47         t.eq(filter.type, OpenLayers.Filter.Logical.OR, "correct type");
48         t.eq(filter.filters.length, 5, "correct number of child filters");
49     }
50     
51     function test_write(t) {
52         t.plan(1);
53
54         // read first - testing that write produces the ogc:Filter element above
55         var parser = new OpenLayers.Format.Filter.v1_1_0();
56         var xml = new OpenLayers.Format.XML();
57         var filter = parser.read(xml.read(test_xml).documentElement);
58         
59         var node = parser.write(filter);
60         t.xml_eq(node, test_xml, "filter correctly written");
61         
62     }
63     
64     function test_matchCase(t) {
65         var parser = new OpenLayers.Format.Filter.v1_1_0();
66         var xml = new OpenLayers.Format.XML();
67         
68         var cases = [{
69             str:
70                 '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
71                     '<ogc:PropertyIsEqualTo>' +
72                         '<ogc:PropertyName>cat</ogc:PropertyName>' +
73                         '<ogc:Literal>dog</ogc:Literal>' +
74                     '</ogc:PropertyIsEqualTo>' +
75                 '</ogc:Filter>',
76             exp: true
77         }, {
78             str:
79                 '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
80                     '<ogc:PropertyIsEqualTo matchCase="1">' +
81                         '<ogc:PropertyName>cat</ogc:PropertyName>' +
82                         '<ogc:Literal>dog</ogc:Literal>' +
83                     '</ogc:PropertyIsEqualTo>' +
84                 '</ogc:Filter>',
85             exp: true
86         }, {
87             str:
88                 '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
89                     '<ogc:PropertyIsEqualTo matchCase="true">' +
90                         '<ogc:PropertyName>cat</ogc:PropertyName>' +
91                         '<ogc:Literal>dog</ogc:Literal>' +
92                     '</ogc:PropertyIsEqualTo>' +
93                 '</ogc:Filter>',
94             exp: true
95         }, {
96             str:
97                 '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
98                     '<ogc:PropertyIsEqualTo matchCase="0">' +
99                         '<ogc:PropertyName>cat</ogc:PropertyName>' +
100                         '<ogc:Literal>dog</ogc:Literal>' +
101                     '</ogc:PropertyIsEqualTo>' +
102                 '</ogc:Filter>',
103             exp: false
104         }, {
105             str:
106                 '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
107                     '<ogc:PropertyIsEqualTo matchCase="0">' +
108                         '<ogc:PropertyName>cat</ogc:PropertyName>' +
109                         '<ogc:Literal>dog</ogc:Literal>' +
110                     '</ogc:PropertyIsEqualTo>' +
111                 '</ogc:Filter>',
112             exp: false
113         }, {
114             str:
115                 '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
116                     '<ogc:PropertyIsNotEqualTo matchCase="true">' +
117                         '<ogc:PropertyName>cat</ogc:PropertyName>' +
118                         '<ogc:Literal>dog</ogc:Literal>' +
119                     '</ogc:PropertyIsNotEqualTo>' +
120                 '</ogc:Filter>',
121             exp: true
122         }, {
123             str:
124                 '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
125                     '<ogc:PropertyIsNotEqualTo matchCase="false">' +
126                         '<ogc:PropertyName>cat</ogc:PropertyName>' +
127                         '<ogc:Literal>dog</ogc:Literal>' +
128                     '</ogc:PropertyIsNotEqualTo>' +
129                 '</ogc:Filter>',
130             exp: false
131         }];
132         
133         t.plan(cases.length);
134         
135         var filter, c;
136         for(var i=0; i<cases.length; ++i) {
137             c = cases[i];
138             filter = parser.read(xml.read(c.str).documentElement);
139             t.eq(filter.matchCase, c.exp, "case " + i);
140         }
141         
142     }
143
144     function test_BBOX(t) {
145         t.plan(1);
146         var filter = new OpenLayers.Filter.Spatial({
147             type: OpenLayers.Filter.Spatial.BBOX,
148             property: "the_geom",
149             value: new OpenLayers.Bounds(-180, -90, 180, 90),
150             projection: "EPSG:4326"
151         });
152         
153         var out =
154             '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
155                 '<ogc:BBOX>' +
156                     '<ogc:PropertyName>the_geom</ogc:PropertyName>' +
157                     '<gml:Envelope xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">' +
158                         '<gml:lowerCorner>-180 -90</gml:lowerCorner>' +
159                         '<gml:upperCorner>180 90</gml:upperCorner>' +
160                     '</gml:Envelope>' +
161                 '</ogc:BBOX>' +
162             '</ogc:Filter>';
163         
164         var parser = new OpenLayers.Format.Filter.v1_1_0();
165         var node = parser.write(filter);
166         
167         t.xml_eq(node, out, "bbox correctly written");
168     }
169     
170     function test_Intersects(t) {
171         
172         t.plan(4);
173         
174         var str =
175             '<Filter xmlns="http://www.opengis.net/ogc">' +
176                 '<Intersects>' +
177                     '<PropertyName>Geometry</PropertyName>' +
178                     '<gml:Envelope xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">' +
179                         '<gml:lowerCorner>-180 -90</gml:lowerCorner>' +
180                         '<gml:upperCorner>180 90</gml:upperCorner>' +
181                     '</gml:Envelope>' +
182                 '</Intersects>' +
183             '</Filter>';
184
185         var format = new OpenLayers.Format.Filter.v1_1_0();
186         var filter = new OpenLayers.Filter.Spatial({
187             type: OpenLayers.Filter.Spatial.INTERSECTS,
188             property: "Geometry",
189             value: new OpenLayers.Bounds(-180, -90, 180, 90),
190             projection: "EPSG:4326"
191         });
192         
193         // test writing
194         var node = format.write(filter);
195         t.xml_eq(node, str, "filter correctly written");
196         
197         // test reading
198         var doc = (new OpenLayers.Format.XML).read(str);
199         var got = format.read(doc.firstChild);
200         t.eq(got.type, filter.type, "read correct type");
201         t.eq(got.property, filter.property, "read correct property");
202         t.eq(got.value.toArray(), filter.value.toArray(), "read correct value");
203
204     }
205
206     </script> 
207 </head> 
208 <body>
209 </body> 
210 </html>