summaryrefslogtreecommitdiffstats
path: root/shared
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <teemusa@vaadin.com>2014-12-19 09:01:23 +0200
committerTeemu Suo-Anttila <teemusa@vaadin.com>2014-12-19 08:06:37 +0000
commitc1c3564717388708e34f7ec6e9beeb09e4c2d6a4 (patch)
tree1846ee2299d710e3062408046152c7145e851b75 /shared
parentab07a2ef324c13614cea34bf2efd84aee75edcd0 (diff)
downloadvaadin-framework-c1c3564717388708e34f7ec6e9beeb09e4c2d6a4.tar.gz
vaadin-framework-c1c3564717388708e34f7ec6e9beeb09e4c2d6a4.zip
Fix Range.restrictTo to work with non-intersecting ranges(#13334)
Also adds a special case for isSubsetOf with two empty ranges. Change-Id: I9b4c854051bd760bbac05c7a0bc2e5418371e90e
Diffstat (limited to 'shared')
-rw-r--r--shared/src/com/vaadin/shared/ui/grid/Range.java14
-rw-r--r--shared/tests/src/com/vaadin/shared/ui/grid/RangeTest.java19
2 files changed, 30 insertions, 3 deletions
diff --git a/shared/src/com/vaadin/shared/ui/grid/Range.java b/shared/src/com/vaadin/shared/ui/grid/Range.java
index 2054845320..6be9e04cbc 100644
--- a/shared/src/com/vaadin/shared/ui/grid/Range.java
+++ b/shared/src/com/vaadin/shared/ui/grid/Range.java
@@ -177,6 +177,10 @@ public final class Range implements Serializable {
* range
*/
public boolean isSubsetOf(final Range other) {
+ if (isEmpty() && other.isEmpty()) {
+ return true;
+ }
+
return other.getStart() <= getStart() && getEnd() <= other.getEnd();
}
@@ -411,8 +415,10 @@ public final class Range implements Serializable {
* @return a bounded range
*/
public Range restrictTo(Range bounds) {
- boolean startWithin = getStart() >= bounds.getStart();
- boolean endWithin = getEnd() <= bounds.getEnd();
+ boolean startWithin = bounds.contains(getStart());
+ boolean endWithin = bounds.contains(getEnd());
+ boolean boundsWithin = getStart() < bounds.getStart()
+ && getEnd() >= bounds.getEnd();
if (startWithin) {
if (endWithin) {
@@ -423,8 +429,10 @@ public final class Range implements Serializable {
} else {
if (endWithin) {
return Range.between(bounds.getStart(), getEnd());
- } else {
+ } else if (boundsWithin) {
return bounds;
+ } else {
+ return Range.withLength(getStart(), 0);
}
}
}
diff --git a/shared/tests/src/com/vaadin/shared/ui/grid/RangeTest.java b/shared/tests/src/com/vaadin/shared/ui/grid/RangeTest.java
index ab67b22d0b..e3cae858ee 100644
--- a/shared/tests/src/com/vaadin/shared/ui/grid/RangeTest.java
+++ b/shared/tests/src/com/vaadin/shared/ui/grid/RangeTest.java
@@ -372,6 +372,7 @@ public class RangeTest {
assertTrue(r2 == r3);
}
+ @Test
public void restrictTo_notInterstecting() {
Range r1 = Range.between(5, 10);
Range r2 = Range.between(15, 20);
@@ -385,6 +386,7 @@ public class RangeTest {
r4.isEmpty());
}
+ @Test
public void restrictTo_startOutside() {
Range r1 = Range.between(5, 10);
Range r2 = Range.between(7, 15);
@@ -392,8 +394,11 @@ public class RangeTest {
Range r3 = r1.restrictTo(r2);
assertEquals(Range.between(7, 10), r3);
+
+ assertEquals(r2.restrictTo(r1), r3);
}
+ @Test
public void restrictTo_endOutside() {
Range r1 = Range.between(5, 10);
Range r2 = Range.between(4, 7);
@@ -401,6 +406,20 @@ public class RangeTest {
Range r3 = r1.restrictTo(r2);
assertEquals(Range.between(5, 7), r3);
+
+ assertEquals(r2.restrictTo(r1), r3);
+ }
+
+ @Test
+ public void restrictTo_empty() {
+ Range r1 = Range.between(5, 10);
+ Range r2 = Range.between(0, 0);
+
+ Range r3 = r1.restrictTo(r2);
+ assertTrue(r3.isEmpty());
+
+ Range r4 = r2.restrictTo(r1);
+ assertTrue(r4.isEmpty());
}
}