| /* | |
| * 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)); | |
| } | |
| } |