Also adds a special case for isSubsetOf with two empty ranges. Change-Id: I9b4c854051bd760bbac05c7a0bc2e5418371e90etags/7.4.0.beta1^2
private Range getMinCacheRange() { | private Range getMinCacheRange() { | ||||
Range availableDataRange = getAvailableRangeForCache(); | Range availableDataRange = getAvailableRangeForCache(); | ||||
Range minCacheRange = cacheStrategy.getMinCacheRange( | Range minCacheRange = cacheStrategy.getMinCacheRange( | ||||
requestedAvailability, cached, availableDataRange); | requestedAvailability, cached, availableDataRange); | ||||
* range | * range | ||||
*/ | */ | ||||
public boolean isSubsetOf(final Range other) { | public boolean isSubsetOf(final Range other) { | ||||
if (isEmpty() && other.isEmpty()) { | |||||
return true; | |||||
} | |||||
return other.getStart() <= getStart() && getEnd() <= other.getEnd(); | return other.getStart() <= getStart() && getEnd() <= other.getEnd(); | ||||
} | } | ||||
* @return a bounded range | * @return a bounded range | ||||
*/ | */ | ||||
public Range restrictTo(Range bounds) { | 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 (startWithin) { | ||||
if (endWithin) { | if (endWithin) { | ||||
} else { | } else { | ||||
if (endWithin) { | if (endWithin) { | ||||
return Range.between(bounds.getStart(), getEnd()); | return Range.between(bounds.getStart(), getEnd()); | ||||
} else { | |||||
} else if (boundsWithin) { | |||||
return bounds; | return bounds; | ||||
} else { | |||||
return Range.withLength(getStart(), 0); | |||||
} | } | ||||
} | } | ||||
} | } |
assertTrue(r2 == r3); | assertTrue(r2 == r3); | ||||
} | } | ||||
@Test | |||||
public void restrictTo_notInterstecting() { | public void restrictTo_notInterstecting() { | ||||
Range r1 = Range.between(5, 10); | Range r1 = Range.between(5, 10); | ||||
Range r2 = Range.between(15, 20); | Range r2 = Range.between(15, 20); | ||||
r4.isEmpty()); | r4.isEmpty()); | ||||
} | } | ||||
@Test | |||||
public void restrictTo_startOutside() { | public void restrictTo_startOutside() { | ||||
Range r1 = Range.between(5, 10); | Range r1 = Range.between(5, 10); | ||||
Range r2 = Range.between(7, 15); | Range r2 = Range.between(7, 15); | ||||
Range r3 = r1.restrictTo(r2); | Range r3 = r1.restrictTo(r2); | ||||
assertEquals(Range.between(7, 10), r3); | assertEquals(Range.between(7, 10), r3); | ||||
assertEquals(r2.restrictTo(r1), r3); | |||||
} | } | ||||
@Test | |||||
public void restrictTo_endOutside() { | public void restrictTo_endOutside() { | ||||
Range r1 = Range.between(5, 10); | Range r1 = Range.between(5, 10); | ||||
Range r2 = Range.between(4, 7); | Range r2 = Range.between(4, 7); | ||||
Range r3 = r1.restrictTo(r2); | Range r3 = r1.restrictTo(r2); | ||||
assertEquals(Range.between(5, 7), r3); | 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()); | |||||
} | } | ||||
} | } |
import java.util.List; | import java.util.List; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
import org.openqa.selenium.By; | |||||
import org.openqa.selenium.NoSuchElementException; | import org.openqa.selenium.NoSuchElementException; | ||||
import org.openqa.selenium.WebElement; | import org.openqa.selenium.WebElement; | ||||
import com.vaadin.testbench.By; | |||||
import com.vaadin.testbench.TestBenchElement; | import com.vaadin.testbench.TestBenchElement; | ||||
import com.vaadin.testbench.elements.GridElement; | import com.vaadin.testbench.elements.GridElement; | ||||
import com.vaadin.testbench.elements.GridElement.GridCellElement; | import com.vaadin.testbench.elements.GridElement.GridCellElement; | ||||
public void testItemSetChangeEvent() throws Exception { | public void testItemSetChangeEvent() throws Exception { | ||||
openTestURL(); | openTestURL(); | ||||
final By newRow = By.xpath("//td[text()='newcell: 0']"); | |||||
final org.openqa.selenium.By newRow = By | |||||
.xpath("//td[text()='newcell: 0']"); | |||||
assertTrue("Unexpected initial state", !isElementPresent(newRow)); | assertTrue("Unexpected initial state", !isElementPresent(newRow)); | ||||
assertEquals("Grid scrolled unexpectedly", cellContent, cell.getText()); | assertEquals("Grid scrolled unexpectedly", cellContent, cell.getText()); | ||||
} | } | ||||
@Test | |||||
public void testScrollAndRemoveAll() { | |||||
setDebug(true); | |||||
openTestURL(); | |||||
getGridElement().scrollToRow(500); | |||||
selectMenuPath("Component", "Body rows", "Remove all rows"); | |||||
assertFalse("Error notification was present after removing all rows", | |||||
isElementPresent(NotificationElement.class)); | |||||
assertFalse(getGridElement().isElementPresent(By.vaadin("#cell[0][0]"))); | |||||
} | |||||
private void assertPrimaryStylename(String stylename) { | private void assertPrimaryStylename(String stylename) { | ||||
assertTrue(getGridElement().getAttribute("class").contains(stylename)); | assertTrue(getGridElement().getAttribute("class").contains(stylename)); | ||||