@@ -10,6 +10,7 @@ import geoscript.filter.Filter
1010import geoscript.workspace.Memory
1111import geoscript.geom.*
1212import geoscript.workspace.Workspace
13+ import geoscript.workspace.H2
1314
1415/**
1516 * The Layer UnitTest
@@ -358,31 +359,153 @@ class LayerTestCase {
358359 }
359360
360361 @Test void cursorSorting () {
362+ File f = new File (" target/h2" ). absoluteFile
363+ if (f. exists()) {
364+ boolean deleted = f. deleteDir()
365+ }
366+ H2 h2 = new H2(" facilities" , " target/h2" )
367+ Layer layer = h2. create(' facilities' ,[new Field (" geom" ," Point" , " EPSG:2927" ), new Field (" name" ," string" ), new Field (" price" ," float" )])
368+ layer. add(new Feature ([" geom" : new Point (111 ,-47 ), " name" : " A" , " price" : 10 ], " house1" ))
369+ layer. add(new Feature ([" geom" : new Point (112 ,-46 ), " name" : " B" , " price" : 12 ], " house2" ))
370+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " C" , " price" : 13 ], " house3" ))
371+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " D" , " price" : 14 ], " house4" ))
372+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " E" , " price" : 15 ], " house5" ))
373+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " F" , " price" : 16 ], " house6" ))
374+
375+ Cursor c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]])
376+ assertEquals " A" , c. next()[" name" ]
377+ assertEquals " B" , c. next()[" name" ]
378+ assertEquals " C" , c. next()[" name" ]
379+ assertEquals " D" , c. next()[" name" ]
380+ assertEquals " E" , c. next()[" name" ]
381+ assertEquals " F" , c. next()[" name" ]
382+ c. close()
383+
384+ c = layer. getCursor(Filter . PASS , [" name" ])
385+ assertEquals " A" , c. next()[" name" ]
386+ assertEquals " B" , c. next()[" name" ]
387+ assertEquals " C" , c. next()[" name" ]
388+ assertEquals " D" , c. next()[" name" ]
389+ assertEquals " E" , c. next()[" name" ]
390+ assertEquals " F" , c. next()[" name" ]
391+ c. close()
392+
393+ c = layer. getCursor(Filter . PASS , [[" name" ," DESC" ]])
394+ assertEquals " F" , c. next()[" name" ]
395+ assertEquals " E" , c. next()[" name" ]
396+ assertEquals " D" , c. next()[" name" ]
397+ assertEquals " C" , c. next()[" name" ]
398+ assertEquals " B" , c. next()[" name" ]
399+ assertEquals " A" , c. next()[" name" ]
400+ c. close()
401+
402+ // Named Parameters
403+ c = layer. getCursor(filter : " price >= 14.0" , sort : [[" price" , " DESC" ]])
404+ assertTrue c. hasNext()
405+ assertEquals " F" , c. next()[" name" ]
406+ assertEquals " E" , c. next()[" name" ]
407+ assertEquals " D" , c. next()[" name" ]
408+ assertFalse c. hasNext()
409+ c. close()
410+
411+ h2. close()
412+ }
413+
414+ @Test void cursorSortingAndPagingWithUnsupportedLayer () {
361415 Schema s = new Schema (" facilities" , [new Field (" geom" ," Point" , " EPSG:2927" ), new Field (" name" ," string" ), new Field (" price" ," float" )])
362416 Layer layer = new Layer (" facilities" , s)
363417 layer. add(new Feature ([new Point (111 ,-47 ), " A" , 10 ], " house1" , s))
364418 layer. add(new Feature ([new Point (112 ,-46 ), " B" , 12 ], " house2" , s))
365419 layer. add(new Feature ([new Point (113 ,-45 ), " C" , 11 ], " house3" , s))
420+ layer. add(new Feature ([new Point (113 ,-44 ), " D" , 15 ], " house4" , s))
366421
422+ // Sort ascending explicitly
367423 Cursor c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]])
368424 assertEquals " A" , c. next()[" name" ]
369425 assertEquals " B" , c. next()[" name" ]
370426 assertEquals " C" , c. next()[" name" ]
427+ assertEquals " D" , c. next()[" name" ]
428+ assertFalse c. hasNext()
371429 c. close()
372430
431+ // Sort ascending implicitly
373432 c = layer. getCursor(Filter . PASS , [" name" ])
374433 assertEquals " A" , c. next()[" name" ]
375434 assertEquals " B" , c. next()[" name" ]
376435 assertEquals " C" , c. next()[" name" ]
436+ assertEquals " D" , c. next()[" name" ]
437+ assertFalse c. hasNext()
377438 c. close()
378439
379- // @TODO MemoryDataStore doesn't actually sort!
380- /* c = layer.getCursor(Filter.PASS, [["name","DESC"]])
440+ // Sort descending
441+ c = layer. getCursor(Filter . PASS , [[" name" ," DESC" ]])
442+ assertEquals " D" , c. next()[" name" ]
381443 assertEquals " C" , c. next()[" name" ]
382444 assertEquals " B" , c. next()[" name" ]
383445 assertEquals " A" , c. next()[" name" ]
446+ assertFalse c. hasNext()
447+ c. close()
448+
449+ // Page (will work with GeoTools 9.0)
450+ /* c = layer.getCursor(start:0, max:2)
451+ assertEquals "A", c.next()["name"]
452+ assertEquals "B", c.next()["name"]
453+ assertFalse c.hasNext()
454+ c.close()
455+ c = layer.getCursor(start:2, max:2)
456+ assertEquals "C", c.next()["name"]
457+ assertEquals "D", c.next()["name"]
458+ assertFalse c.hasNext()
459+ c.close()
460+ c = layer.getCursor("price > 10", [["price", "DESC"]], 2, 1)
461+ assertEquals "B", c.next()["name"]
462+ assertEquals "C", c.next()["name"]
463+ assertFalse c.hasNext()
384464 c.close()*/
385465 }
386466
467+ @Test void cursorPaging () {
468+ File f = new File (" target/h2" ). absoluteFile
469+ if (f. exists()) {
470+ boolean deleted = f. deleteDir()
471+ }
472+ H2 h2 = new H2(" facilities" , " target/h2" )
473+ Layer layer = h2. create(' facilities' ,[new Field (" geom" ," Point" , " EPSG:2927" ), new Field (" name" ," string" ), new Field (" price" ," float" )])
474+ layer. add(new Feature ([" geom" : new Point (111 ,-47 ), " name" : " A" , " price" : 10 ], " house1" ))
475+ layer. add(new Feature ([" geom" : new Point (112 ,-46 ), " name" : " B" , " price" : 12 ], " house2" ))
476+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " C" , " price" : 13 ], " house3" ))
477+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " D" , " price" : 14 ], " house4" ))
478+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " E" , " price" : 15 ], " house5" ))
479+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " F" , " price" : 16 ], " house6" ))
480+
481+ Cursor c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]], 2 , 0 )
482+ assertEquals " A" , c. next()[" name" ]
483+ assertEquals " B" , c. next()[" name" ]
484+ assertFalse c. hasNext()
485+ c. close()
486+
487+ c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]], 2 , 2 )
488+ assertEquals " C" , c. next()[" name" ]
489+ assertEquals " D" , c. next()[" name" ]
490+ assertFalse c. hasNext()
491+ c. close()
492+
493+ c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]], 2 , 4 )
494+ assertEquals " E" , c. next()[" name" ]
495+ assertEquals " F" , c. next()[" name" ]
496+ assertFalse c. hasNext()
497+ c. close()
498+
499+ // Named parameters
500+ c = layer. getCursor(start : 0 , max : 4 )
501+ assertEquals " A" , c. next()[" name" ]
502+ assertEquals " B" , c. next()[" name" ]
503+ assertEquals " C" , c. next()[" name" ]
504+ assertEquals " D" , c. next()[" name" ]
505+ c. close()
506+
507+ h2. close()
508+ }
509+
387510}
388511
0 commit comments