blob: cc6b377e86bc41b004b05e7f87f61935b1f5b3fd [file] [log] [blame]
/*
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.view.client;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* Test cases for {@link ListDataProvider}.
*/
public class ListDataProviderTest extends AbstractDataProviderTest {
public void testConstructorList() {
List<String> list = new ArrayList<String>();
list.add("helloworld");
ListDataProvider<String> provider = new ListDataProvider<String>(list);
assertEquals("helloworld", provider.getList().get(0));
}
public void testFlush() {
ListDataProvider<String> provider = createDataProvider();
List<String> list = provider.getList();
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
display.clearLastRowDataAndRange();
display.setRowCount(0, true);
// Add data to the list.
for (int i = 0; i < 10; i++) {
list.add("test " + i);
}
assertEquals(0, display.getRowCount());
assertNull(display.getLastRowData());
assertNull(display.getLastRowDataRange());
// Flush the data immediately.
provider.flush();
assertEquals(10, display.getRowCount());
assertTrue(display.isRowCountExact());
assertEquals(list, display.getLastRowData());
assertEquals(new Range(0, 10), display.getLastRowDataRange());
}
public void testListAdd() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
// add(String).
list.add("added");
assertEquals("added", list.get(10));
provider.flush();
assertEquals(new Range(10, 1), display.getLastRowDataRange());
// add(int, String).
list.add(2, "inserted");
assertEquals("inserted", list.get(2));
provider.flush();
assertEquals(new Range(2, 10), display.getLastRowDataRange());
}
public void testListAddAll() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 25);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
// addAll(Collection).
List<String> toAdd = createData(10, 3);
list.addAll(toAdd);
assertEquals("test 10", list.get(10));
assertEquals("test 11", list.get(11));
assertEquals("test 12", list.get(12));
provider.flush();
assertEquals(toAdd, display.getLastRowData());
assertEquals(new Range(10, 3), display.getLastRowDataRange());
// addAll(int, Collection).
List<String> toInsert = createData(20, 3);
list.addAll(2, toInsert);
assertEquals("test 20", list.get(2));
assertEquals("test 21", list.get(3));
assertEquals("test 22", list.get(4));
provider.flush();
assertEquals(new Range(2, 14), display.getLastRowDataRange());
}
public void testListClear() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
assertEquals(10, list.size());
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
list.clear();
assertEquals(0, list.size());
provider.flush();
assertEquals(0, display.getRowCount());
}
public void testListContains() {
List<String> list = createListDataProvider(5).getList();
// contains(Object).
assertTrue(list.contains("test 0"));
assertFalse(list.contains("platypus"));
// containsAll(Collection).
assertTrue(list.containsAll(createData(1, 2)));
assertFalse(list.containsAll(createData(10, 2)));
}
public void testListEquals() {
List<String> list = createListDataProvider(5).getList();
assertTrue(list.equals(createData(0, 5)));
assertFalse(list.equals(createData(0, 4)));
}
public void testListIndexOf() {
List<String> list = createListDataProvider(5).getList();
// indexOf(Object).
assertEquals(3, list.indexOf("test 3"));
assertEquals(-1, list.indexOf("duck"));
// lastIndexOf(Object).
assertEquals(3, list.lastIndexOf("test 3"));
assertEquals(-1, list.lastIndexOf("duck"));
list.add("test 3");
assertEquals(5, list.lastIndexOf("test 3"));
}
public void testListIsEmpty() {
List<String> list = createListDataProvider(0).getList();
assertTrue(list.isEmpty());
list.add("test");
assertFalse(list.isEmpty());
}
public void testListIterator() {
List<String> list = createListDataProvider(3).getList();
Iterator<String> iterator = list.iterator();
// Modify before next.
try {
iterator.remove();
fail("Expected IllegalStateException");
} catch (IllegalStateException e) {
// Expected.
}
// next and hasNext.
assertTrue(iterator.hasNext());
assertEquals("test 0", iterator.next());
assertEquals("test 1", iterator.next());
assertEquals("test 2", iterator.next());
assertFalse(iterator.hasNext());
// remove.
iterator = list.iterator();
iterator.next();
iterator.remove();
assertEquals("test 1", list.get(0));
assertEquals(2, list.size());
try {
iterator.remove();
fail("Expected IllegalStateException");
} catch (IllegalStateException e) {
// Expected.
}
assertEquals("test 1", iterator.next());
}
public void testListListIterator() {
List<String> list = createListDataProvider(3).getList();
ListIterator<String> iterator = list.listIterator();
// Modify before next.
try {
iterator.set("test");
fail("Expected IllegalStateException");
} catch (IllegalStateException e) {
// Expected.
}
try {
iterator.add("test");
fail("Expected IllegalStateException");
} catch (IllegalStateException e) {
// Expected.
}
try {
iterator.remove();
fail("Expected IllegalStateException");
} catch (IllegalStateException e) {
// Expected.
}
// next, hasNext, and nextIndex.
assertTrue(iterator.hasNext());
assertEquals(0, iterator.nextIndex());
assertEquals("test 0", iterator.next());
assertEquals("test 1", iterator.next());
assertEquals("test 2", iterator.next());
assertFalse(iterator.hasNext());
assertEquals(3, iterator.nextIndex());
// previo0us, hasPrevious, and previousIndex.
assertTrue(iterator.hasPrevious());
assertEquals(2, iterator.previousIndex());
assertEquals("test 2", iterator.previous());
assertEquals("test 1", iterator.previous());
assertEquals("test 0", iterator.previous());
assertFalse(iterator.hasPrevious());
assertEquals(-1, iterator.previousIndex());
// set.
iterator.set("set0");
assertEquals("set0", list.get(0));
iterator.set("set1");
assertEquals("set1", list.get(0));
// add.
iterator.add("added");
assertEquals("added", list.get(0));
assertEquals("set1", list.get(1));
assertEquals(4, list.size());
try {
iterator.add("double add");
fail("Expected IllegalStateException");
} catch (IllegalStateException e) {
// Expected.
}
assertEquals("set1", iterator.next());
// remove.
iterator.remove();
assertEquals("test 1", list.get(1));
assertEquals(3, list.size());
try {
iterator.remove();
fail("Expected IllegalStateException");
} catch (IllegalStateException e) {
// Expected.
}
assertEquals("added", iterator.previous());
}
public void testListListIteratorAtIndex() {
List<String> list = createListDataProvider(3).getList();
ListIterator<String> iterator = list.listIterator(2);
assertEquals("test 2", iterator.next());
}
public void testListRemove() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
// remove(int).
assertEquals("test 4", list.remove(4));
assertEquals("test 5", list.get(4));
provider.flush();
assertEquals(new Range(4, 5), display.getLastRowDataRange());
// remove(String).
assertTrue(list.remove("test 2"));
assertEquals("test 3", list.get(2));
provider.flush();
assertEquals(new Range(2, 6), display.getLastRowDataRange());
// remove(String)
assertFalse(list.remove("not in list"));
}
public void testListRemoveAll() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
List<String> toRemove = createData(2, 3);
assertTrue(list.removeAll(toRemove));
assertEquals(7, list.size());
assertEquals("test 5", list.get(2));
provider.flush();
assertEquals(new Range(0, 7), display.getLastRowDataRange());
assertFalse(list.removeAll(toRemove));
}
public void testListRetainAll() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
List<String> toRetain = createData(2, 3);
assertTrue(list.retainAll(toRetain));
assertEquals(3, list.size());
assertEquals("test 2", list.get(0));
provider.flush();
assertEquals(new Range(0, 3), display.getLastRowDataRange());
}
public void testListSet() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
list.set(3, "newvalue");
assertEquals("newvalue", list.get(3));
provider.flush();
assertEquals(new Range(3, 1), display.getLastRowDataRange());
}
public void testSubList() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
List<String> subList = list.subList(2, 5);
assertEquals(3, subList.size());
subList.set(0, "test");
assertEquals("test", subList.get(0));
assertEquals("test", list.get(2));
provider.flush();
assertEquals(new Range(2, 1), display.getLastRowDataRange());
}
public void testToArray() {
List<String> list = createListDataProvider(3).getList();
String[] expected = new String[]{"test 0", "test 1", "test 2"};
Object[] objects = list.toArray();
String[] strings = list.toArray(new String[3]);
assertEquals(3, strings.length);
assertEquals(3, objects.length);
for (int i = 0; i < 3; i++) {
String s = expected[i];
assertEquals(s, objects[i]);
assertEquals(s, strings[i]);
}
}
public void testListSize() {
List<String> list = createListDataProvider(10).getList();
assertEquals(10, list.size());
}
public void testOnRangeChanged() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
MockHasData<String> display0 = new MockHasData<String>();
MockHasData<String> display1 = new MockHasData<String>();
display0.setVisibleRange(0, 15);
display1.setVisibleRange(0, 15);
provider.addDataDisplay(display0);
provider.addDataDisplay(display1);
provider.flush();
display0.clearLastRowDataAndRange();
display1.clearLastRowDataAndRange();
// Change the range of display0.
display0.setVisibleRange(0, 12);
assertEquals(list, display0.getLastRowData());
assertEquals(new Range(0, 10), display0.getLastRowDataRange());
assertNull(display1.getLastRowData());
assertNull(display1.getLastRowDataRange());
}
public void testRefresh() {
ListDataProvider<String> provider = createListDataProvider(10);
List<String> list = provider.getList();
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
// Refresh the display.
provider.refresh();
assertEquals(list, display.getLastRowData());
assertEquals(new Range(0, 10), display.getLastRowDataRange());
}
public void testSetList() {
ListDataProvider<String> provider = createListDataProvider(10);
final MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
display.clearLastRowDataAndRange();
List<String> oldList = provider.getList();
assertEquals("test 0", oldList.get(0));
// Replace the list.
List<String> replace = new ArrayList<String>();
replace.add("helloworld");
provider.setList(replace);
assertEquals("helloworld", provider.getList().get(0));
assertEquals(1, display.getRowCount());
assertEquals(replace, display.getLastRowData());
assertEquals(new Range(0, 1), display.getLastRowDataRange());
display.clearLastRowDataAndRange();
// Verify that the old list doesn't trigger updates in the display.
oldList.set(0, "newValue");
delayTestFinish(2000);
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
public void execute() {
assertNull(display.getLastRowData());
finishTest();
}
});
}
public void testSetListEmpty() {
ListDataProvider<String> provider = createListDataProvider(10);
MockHasData<String> display = new MockHasData<String>();
display.setVisibleRange(0, 15);
provider.addDataDisplay(display);
provider.flush();
assertEquals(10, display.getRowCount());
display.clearLastRowDataAndRange();
assertEquals("test 0", provider.getList().get(0));
List<String> replace = new ArrayList<String>();
provider.setList(replace);
assertEquals(0, display.getRowCount());
// An empty set should NOT set the row values.
assertEquals(replace, display.getLastRowData());
assertEquals(new Range(0, 0), display.getLastRowDataRange());
}
@Override
protected ListDataProvider<String> createDataProvider() {
return createListDataProvider(0);
}
private ListDataProvider<String> createListDataProvider(int size) {
return new ListDataProvider<String>(createData(0, size));
}
}