/tests/Filter/Comparison.html

https://github.com/pgiraud/openlayers · HTML · 405 lines · 372 code · 33 blank · 0 comment · 0 complexity · 3007288ea0b488de4bb87dc95cb97100 MD5 · raw file

  1. <html>
  2. <head>
  3. <script src="../OLLoader.js"></script>
  4. <script type="text/javascript">
  5. function test_initialize(t) {
  6. t.plan(3);
  7. var options = {'foo': 'bar'};
  8. var filter = new OpenLayers.Filter.Comparison(options);
  9. t.ok(filter instanceof OpenLayers.Filter.Comparison,
  10. "new OpenLayers.Filter.Comparison returns object" );
  11. t.eq(filter.foo, "bar", "constructor sets options correctly");
  12. t.eq(typeof filter.evaluate, "function", "filter has an evaluate function");
  13. }
  14. function test_destroy(t) {
  15. t.plan(1);
  16. var filter = new OpenLayers.Filter.Comparison();
  17. filter.destroy();
  18. t.eq(filter.symbolizer, null, "symbolizer hash nulled properly");
  19. }
  20. function test_value2regex(t) {
  21. t.plan(4);
  22. var filter = new OpenLayers.Filter.Comparison({
  23. property: "foo",
  24. value: "*b?r\\*\\?*",
  25. type: OpenLayers.Filter.Comparison.LIKE});
  26. filter.value2regex("*", "?", "\\");
  27. t.eq(filter.value, ".*b.r\\*\\?.*", "Regular expression generated correctly.");
  28. filter.value = "%b.r!%!.%";
  29. filter.value2regex("%", ".", "!");
  30. t.eq(filter.value, ".*b.r\\%\\..*", "Regular expression with different wildcard and escape chars generated correctly.");
  31. filter.value = "!!";
  32. filter.value2regex();
  33. t.eq(filter.value, "\\!", "!! successfully unescaped to \\!");
  34. // Big one.
  35. filter.value = "!!c!!!d!e";
  36. filter.value2regex();
  37. t.eq(filter.value, "\\!c\\!\\d\\e", "!!c!!!d!e successfully unescaped to \\!c\\!\\d\\e");
  38. }
  39. function test_regex2value(t) {
  40. t.plan(8);
  41. function r2v(regex) {
  42. return OpenLayers.Filter.Comparison.prototype.regex2value.call(
  43. {value: regex}
  44. );
  45. }
  46. t.eq(r2v("foo"), "foo", "doesn't change string without special chars");
  47. t.eq(r2v("foo.*foo"), "foo*foo", "wildCard replaced");
  48. t.eq(r2v("foo.foo"), "foo.foo", "singleChar replaced");
  49. t.eq(r2v("foo\\\\foo"), "foo\\foo", "escape removed");
  50. t.eq(r2v("foo!foo"), "foo!!foo", "escapes !");
  51. t.eq(r2v("foo\\*foo"), "foo!*foo", "replaces escape on *");
  52. t.eq(r2v("foo\\.foo"), "foo!.foo", "replaces escape on .");
  53. t.eq(r2v("foo\\\\.foo"), "foo\\.foo", "unescapes only \\ before .");
  54. }
  55. function test_evaluate(t) {
  56. var cases = [{
  57. filter: new OpenLayers.Filter.Comparison({
  58. type: OpenLayers.Filter.Comparison.BETWEEN,
  59. property: "area",
  60. lowerBoundary: 1000,
  61. upperBoundary: 4999
  62. }),
  63. context: {area: 999},
  64. expect: false
  65. }, {
  66. filter: new OpenLayers.Filter.Comparison({
  67. type: OpenLayers.Filter.Comparison.BETWEEN,
  68. property: "area",
  69. lowerBoundary: 1000,
  70. upperBoundary: 4999
  71. }),
  72. context: {area: 1000},
  73. expect: true
  74. }, {
  75. filter: new OpenLayers.Filter.Comparison({
  76. type: OpenLayers.Filter.Comparison.BETWEEN,
  77. property: "area",
  78. lowerBoundary: 1000,
  79. upperBoundary: 4999
  80. }),
  81. context: {area: 4999},
  82. expect: true
  83. }, {
  84. filter: new OpenLayers.Filter.Comparison({
  85. type: OpenLayers.Filter.Comparison.BETWEEN,
  86. property: "area",
  87. lowerBoundary: 1000,
  88. upperBoundary: 4999
  89. }),
  90. context: {area: 5000},
  91. expect: false
  92. }, {
  93. filter: new OpenLayers.Filter.Comparison({
  94. type: OpenLayers.Filter.Comparison.BETWEEN,
  95. property: "area",
  96. lowerBoundary: 1000,
  97. upperBoundary: 4999
  98. }),
  99. context: {area: 999},
  100. expect: false
  101. }, {
  102. filter: new OpenLayers.Filter.Comparison({
  103. type: OpenLayers.Filter.Comparison.EQUAL_TO,
  104. property: "prop",
  105. value: "Foo"
  106. }),
  107. context: {prop: "Foo"},
  108. expect: true
  109. }, {
  110. filter: new OpenLayers.Filter.Comparison({
  111. type: OpenLayers.Filter.Comparison.EQUAL_TO,
  112. property: "prop",
  113. value: "Foo"
  114. }),
  115. context: {prop: "foo"},
  116. expect: false
  117. }, {
  118. filter: new OpenLayers.Filter.Comparison({
  119. type: OpenLayers.Filter.Comparison.EQUAL_TO,
  120. matchCase: true,
  121. property: "prop",
  122. value: "Foo"
  123. }),
  124. context: {prop: "foo"},
  125. expect: false
  126. }, {
  127. filter: new OpenLayers.Filter.Comparison({
  128. type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO,
  129. property: "prop",
  130. value: "foo"
  131. }),
  132. context: {prop: "FOO"},
  133. expect: true
  134. }, {
  135. filter: new OpenLayers.Filter.Comparison({
  136. type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO,
  137. matchCase: true,
  138. property: "prop",
  139. value: "foo"
  140. }),
  141. context: {prop: "FOO"},
  142. expect: true
  143. }, {
  144. filter: new OpenLayers.Filter.Comparison({
  145. type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO,
  146. matchCase: false,
  147. property: "prop",
  148. value: "foo"
  149. }),
  150. context: {prop: "FOO"},
  151. expect: false
  152. }, {
  153. filter: new OpenLayers.Filter.Comparison({
  154. type: OpenLayers.Filter.Comparison.IS_NULL,
  155. property: "prop"
  156. }),
  157. context: {prop: null},
  158. expect: true
  159. }, {
  160. filter: new OpenLayers.Filter.Comparison({
  161. type: OpenLayers.Filter.Comparison.IS_NULL,
  162. property: "prop"
  163. }),
  164. context: {},
  165. expect: false
  166. }, {
  167. filter: new OpenLayers.Filter.Comparison({
  168. type: OpenLayers.Filter.Comparison.IS_NULL,
  169. property: "prop"
  170. }),
  171. context: {prop: "foo"},
  172. expect: false
  173. }, {
  174. filter: new OpenLayers.Filter.Comparison({
  175. type: OpenLayers.Filter.Comparison.IS_NULL,
  176. property: "prop"
  177. }),
  178. context: {prop: 0},
  179. expect: false
  180. }, {
  181. filter: new OpenLayers.Filter.Comparison({
  182. type: OpenLayers.Filter.Comparison.LIKE,
  183. property: "prop",
  184. value: ".+"
  185. }),
  186. context: {prop: "FOO"},
  187. expect: true
  188. }, {
  189. filter: new OpenLayers.Filter.Comparison({
  190. type: OpenLayers.Filter.Comparison.LIKE,
  191. property: "prop",
  192. value: ".+"
  193. }),
  194. context: {},
  195. expect: false
  196. }];
  197. t.plan(cases.length);
  198. var c;
  199. for(var i=0; i<cases.length; ++i) {
  200. c = cases[i];
  201. t.eq(c.filter.evaluate(c.context), c.expect, "case " + i + ": " + c.filter.type);
  202. }
  203. }
  204. function test_evaluate_feature(t) {
  205. var cases = [{
  206. filter: new OpenLayers.Filter.Comparison({
  207. type: OpenLayers.Filter.Comparison.BETWEEN,
  208. property: "area",
  209. lowerBoundary: 1000,
  210. upperBoundary: 4999
  211. }),
  212. context: new OpenLayers.Feature.Vector(null, {area: 999}),
  213. expect: false
  214. }, {
  215. filter: new OpenLayers.Filter.Comparison({
  216. type: OpenLayers.Filter.Comparison.BETWEEN,
  217. property: "area",
  218. lowerBoundary: 1000,
  219. upperBoundary: 4999
  220. }),
  221. context: new OpenLayers.Feature.Vector(null, {area: 1000}),
  222. expect: true
  223. }, {
  224. filter: new OpenLayers.Filter.Comparison({
  225. type: OpenLayers.Filter.Comparison.BETWEEN,
  226. property: "area",
  227. lowerBoundary: 1000,
  228. upperBoundary: 4999
  229. }),
  230. context: new OpenLayers.Feature.Vector(null, {area: 4999}),
  231. expect: true
  232. }, {
  233. filter: new OpenLayers.Filter.Comparison({
  234. type: OpenLayers.Filter.Comparison.BETWEEN,
  235. property: "area",
  236. lowerBoundary: 1000,
  237. upperBoundary: 4999
  238. }),
  239. context: new OpenLayers.Feature.Vector(null, {area: 5000}),
  240. expect: false
  241. }, {
  242. filter: new OpenLayers.Filter.Comparison({
  243. type: OpenLayers.Filter.Comparison.BETWEEN,
  244. property: "area",
  245. lowerBoundary: 1000,
  246. upperBoundary: 4999
  247. }),
  248. context: new OpenLayers.Feature.Vector(null, {area: 999}),
  249. expect: false
  250. }, {
  251. filter: new OpenLayers.Filter.Comparison({
  252. type: OpenLayers.Filter.Comparison.EQUAL_TO,
  253. property: "prop",
  254. value: "Foo"
  255. }),
  256. context: new OpenLayers.Feature.Vector(null, {prop: "Foo"}),
  257. expect: true
  258. }, {
  259. filter: new OpenLayers.Filter.Comparison({
  260. type: OpenLayers.Filter.Comparison.EQUAL_TO,
  261. property: "prop",
  262. value: "Foo"
  263. }),
  264. context: new OpenLayers.Feature.Vector(null, {prop: "foo"}),
  265. expect: false
  266. }, {
  267. filter: new OpenLayers.Filter.Comparison({
  268. type: OpenLayers.Filter.Comparison.EQUAL_TO,
  269. matchCase: true,
  270. property: "prop",
  271. value: "Foo"
  272. }),
  273. context: new OpenLayers.Feature.Vector(null, {prop: "foo"}),
  274. expect: false
  275. }, {
  276. filter: new OpenLayers.Filter.Comparison({
  277. type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO,
  278. property: "prop",
  279. value: "foo"
  280. }),
  281. context: {prop: "FOO"},
  282. expect: true
  283. }, {
  284. filter: new OpenLayers.Filter.Comparison({
  285. type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO,
  286. matchCase: true,
  287. property: "prop",
  288. value: "foo"
  289. }),
  290. context: new OpenLayers.Feature.Vector(null, {prop: "FOO"}),
  291. expect: true
  292. }, {
  293. filter: new OpenLayers.Filter.Comparison({
  294. type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO,
  295. matchCase: false,
  296. property: "prop",
  297. value: "foo"
  298. }),
  299. context: new OpenLayers.Feature.Vector(null, {prop: "FOO"}),
  300. expect: false
  301. }, {
  302. filter: new OpenLayers.Filter.Comparison({
  303. type: OpenLayers.Filter.Comparison.IS_NULL,
  304. property: "prop"
  305. }),
  306. context: new OpenLayers.Feature.Vector(null, {prop: null}),
  307. expect: true
  308. }, {
  309. filter: new OpenLayers.Filter.Comparison({
  310. type: OpenLayers.Filter.Comparison.IS_NULL,
  311. property: "prop"
  312. }),
  313. context: new OpenLayers.Feature.Vector(null, {}),
  314. expect: false
  315. }, {
  316. filter: new OpenLayers.Filter.Comparison({
  317. type: OpenLayers.Filter.Comparison.IS_NULL,
  318. property: "prop"
  319. }),
  320. context: new OpenLayers.Feature.Vector(null, {prop: "foo"}),
  321. expect: false
  322. }, {
  323. filter: new OpenLayers.Filter.Comparison({
  324. type: OpenLayers.Filter.Comparison.IS_NULL,
  325. property: "prop"
  326. }),
  327. context: new OpenLayers.Feature.Vector(null, {prop: 0}),
  328. expect: false
  329. }, {
  330. filter: new OpenLayers.Filter.Comparison({
  331. type: OpenLayers.Filter.Comparison.LIKE,
  332. property: "prop",
  333. value: ".+"
  334. }),
  335. context: new OpenLayers.Feature.Vector(null, {prop: "FOO"}),
  336. expect: true
  337. }, {
  338. filter: new OpenLayers.Filter.Comparison({
  339. type: OpenLayers.Filter.Comparison.LIKE,
  340. property: "prop",
  341. value: ".+"
  342. }),
  343. context: new OpenLayers.Feature.Vector(null, {}),
  344. expect: false
  345. }];
  346. t.plan(cases.length);
  347. var c;
  348. for(var i=0; i<cases.length; ++i) {
  349. c = cases[i];
  350. t.eq(c.filter.evaluate(c.context), c.expect, "case " + i + ": " + c.filter.type);
  351. }
  352. }
  353. function test_clone(t) {
  354. t.plan(3);
  355. var filter = new OpenLayers.Filter.Comparison({
  356. type: OpenLayers.Filter.Comparison.EQUAL_TO,
  357. property: "prop",
  358. value: "val"
  359. });
  360. var clone = filter.clone();
  361. // modify the original
  362. filter.type = OpenLayers.Filter.Comparison.NOT_EQUAL_TO;
  363. t.eq(clone.type, OpenLayers.Filter.Comparison.EQUAL_TO, "clone has proper type");
  364. t.eq(clone.property, "prop", "clone has proper property");
  365. t.eq(clone.value, "val", "clone has proper value");
  366. filter.destroy();
  367. }
  368. </script>
  369. </head>
  370. <body>
  371. </body>
  372. </html>