From 011802fd293119f98c756e2ffd84ea7ecfdc104b Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 5 Jun 2012 07:22:36 +0000
Subject: [PATCH] SP-46, BIS-37: bug fixed and tests added

SVN: 25553
---
 .../basic/AlternativesStringFilter.java       |  4 +-
 .../basic/AlternativesStringFilterTest.java   | 90 +++++++++++++++++++
 2 files changed, 92 insertions(+), 2 deletions(-)

diff --git a/common/source/java/ch/systemsx/cisd/common/shared/basic/AlternativesStringFilter.java b/common/source/java/ch/systemsx/cisd/common/shared/basic/AlternativesStringFilter.java
index 9969f7980c8..d091648ae61 100644
--- a/common/source/java/ch/systemsx/cisd/common/shared/basic/AlternativesStringFilter.java
+++ b/common/source/java/ch/systemsx/cisd/common/shared/basic/AlternativesStringFilter.java
@@ -242,11 +242,11 @@ public class AlternativesStringFilter
                     case LT:
                         return value.compareTo(this.filter) < 0;
                     case LE:
-                        return value.compareTo(this.filter) <= 0;
+                        return value.compareTo(this.filter) < 0 || value.startsWith(filter);
                     case GT:
                         return value.compareTo(this.filter) > 0;
                     case GE:
-                        return value.compareTo(this.filter) >= 0;
+                        return value.compareTo(this.filter) > 0 || value.startsWith(filter);
                     default:
                         return false;
                 }
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/shared/basic/AlternativesStringFilterTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/shared/basic/AlternativesStringFilterTest.java
index 9867a82c3c9..db421e361dd 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/shared/basic/AlternativesStringFilterTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/shared/basic/AlternativesStringFilterTest.java
@@ -36,6 +36,96 @@ public class AlternativesStringFilterTest
         return filter;
     }
 
+    private static final AlternativesStringFilter prepareDateFilter(String value)
+    {
+        final AlternativesStringFilter filter = new AlternativesStringFilter();
+        filter.setDateFilterValue(value);
+        return filter;
+    }
+    
+    @Test
+    public void testDateMatching()
+    {
+        AlternativesStringFilter filter = prepareDateFilter("=2011-07-21");
+        assertTrue(filter.passes("2011-07-21 10:22:33"));
+        assertTrue(filter.passes("2011-07-21"));
+        assertFalse(filter.passes("2011-07-20"));
+        assertFalse(filter.passes("2010-07-21"));
+    }
+    
+    @Test
+    public void testDateMatchingBefore()
+    {
+        AlternativesStringFilter filter = prepareDateFilter("<2011-07-21");
+        assertTrue(filter.passes("2011-07-20 10:22:33"));
+        assertTrue(filter.passes("2011-07"));
+        assertFalse(filter.passes("2011-07-21"));
+        assertFalse(filter.passes("2011-07-22"));
+    }
+    
+    @Test
+    public void testDateMatchingBeforeAndEqual()
+    {
+        AlternativesStringFilter filter = prepareDateFilter("<=2011-07-21");
+        assertTrue(filter.passes("2011-07-20"));
+        assertTrue(filter.passes("2011-07-21 10:22:33"));
+        assertTrue(filter.passes("2011-07-21"));
+        assertFalse(filter.passes("2011-07-22"));
+        assertFalse(filter.passes("2011-07-23"));
+    }
+    
+    @Test
+    public void testDateMatchingAfter()
+    {
+        AlternativesStringFilter filter = prepareDateFilter(">2011-07-21");
+        assertTrue(filter.passes("2011-07-22 10:22:33"));
+        assertTrue(filter.passes("2011-07-22"));
+        assertFalse(filter.passes("2011-07-21"));
+        assertFalse(filter.passes("2011-07-20"));
+    }
+    
+    @Test
+    public void testDateMatchingAfterAndEqual()
+    {
+        AlternativesStringFilter filter = prepareDateFilter(">=2011-07-21");
+        assertTrue(filter.passes("2011-07-22"));
+        assertTrue(filter.passes("2011-07-21 10:22:33"));
+        assertTrue(filter.passes("2011-07-21"));
+        assertFalse(filter.passes("2011-07-20"));
+        assertFalse(filter.passes("2011-07-19"));
+    }
+    
+    @Test
+    public void testDateMatchingRange()
+    {
+        AlternativesStringFilter filter = prepareDateFilter(">2011 & <2011-07");
+        assertTrue(filter.passes("2011-06-03 10:22:33"));
+        assertTrue(filter.passes("2011-06-03"));
+        assertFalse(filter.passes("2011-07-01"));
+        assertFalse(filter.passes("2011-07-01 00:00:01"));
+        assertFalse(filter.passes("2010-12-31"));
+        assertFalse(filter.passes("2010-12-31 23:59:59"));
+    }
+    
+    @Test
+    public void testEmptyDateMatch()
+    {
+        AlternativesStringFilter filter = prepareDateFilter("");
+        assertTrue(filter.passes("2011-06-03 10:22:33"));
+        assertTrue(filter.passes("2011-06-03"));
+        assertTrue(filter.passes("2011-07-01 12:13:14"));
+    }
+    
+    @Test
+    public void testSimpleDateMatch()
+    {
+        AlternativesStringFilter filter = prepareDateFilter("2011");
+        assertTrue(filter.passes("2011-06-03 10:22:33"));
+        assertTrue(filter.passes("2011-06-03"));
+        assertFalse(filter.passes("2010-12-31 23:59:59"));
+        assertFalse(filter.passes("2012-11-06 13:14:15"));
+    }
+    
     @Test
     public void testEmptyMatch()
     {
-- 
GitLab