blob: 600314608dbf94d56cdb7e3c48a1f102c4d688ca [file] [log] [blame]
/*
* Copyright 2011 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.user.client.ui;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.ui.FiniteWidgetIterator.WidgetProvider;
import java.util.HashMap;
import java.util.Map;
import java.util.NoSuchElementException;
/**
* Test cases for {@link FiniteWidgetIterator}.
*/
public class FiniteWidgetIteratorTest extends GWTTestCase {
/**
* Implementation of {@link WidgetProvider}.
*/
private static class WidgetProviderImpl implements WidgetProvider {
private final Map<Integer, Widget> widgets = new HashMap<Integer, Widget>();
/**
* Construct a new {@link WidgetProviderImpl} with the specified widgets.
*/
public WidgetProviderImpl(Widget... widgets) {
if (widgets != null) {
for (int i = 0; i < widgets.length; i++) {
setWidget(i, widgets[i]);
}
}
}
/**
* Set the widget at the specified index.
*
* @param index the index
* @param w the widget
*/
public void setWidget(int index, Widget w) {
widgets.put(index, w);
}
public Widget get(int index) {
if (!widgets.containsKey(index)) {
fail("A widget was not specified for index: " + index);
}
return widgets.get(index);
}
}
@Override
public String getModuleName() {
return "com.google.gwt.user.User";
}
public void testHasNextEmpty() {
FiniteWidgetIterator iterator = new FiniteWidgetIterator(new WidgetProviderImpl(), 0);
assertFalse(iterator.hasNext());
try {
iterator.next();
fail("Expected NoSuchElementException");
} catch (NoSuchElementException e) {
// Expected.
}
}
public void testNext() {
Widget w0 = new Widget();
Widget w1 = new Widget();
Widget w2 = new Widget();
FiniteWidgetIterator iterator = new FiniteWidgetIterator(new WidgetProviderImpl(w0, w1, w2), 3);
assertTrue(iterator.hasNext());
assertEquals(w0, iterator.next());
assertTrue(iterator.hasNext());
assertEquals(w1, iterator.next());
assertTrue(iterator.hasNext());
assertEquals(w2, iterator.next());
assertFalse(iterator.hasNext());
try {
iterator.next();
fail("Expected NoSuchElementException");
} catch (NoSuchElementException e) {
// Expected.
}
}
/**
* Test that the iterator skips null widgets at the start of the list.
*/
public void testNullWidgetStart() {
Widget w1 = new Widget();
Widget w2 = new Widget();
FiniteWidgetIterator iterator =
new FiniteWidgetIterator(new WidgetProviderImpl(null, w1, w2), 3);
assertTrue(iterator.hasNext());
assertEquals(w1, iterator.next());
assertTrue(iterator.hasNext());
assertEquals(w2, iterator.next());
assertFalse(iterator.hasNext());
}
/**
* Test that the iterator skips null widgets at the end of the list.
*/
public void testNullWidgetEnd() {
Widget w0 = new Widget();
Widget w1 = new Widget();
FiniteWidgetIterator iterator =
new FiniteWidgetIterator(new WidgetProviderImpl(w0, w1, null), 3);
assertTrue(iterator.hasNext());
assertEquals(w0, iterator.next());
assertTrue(iterator.hasNext());
assertEquals(w1, iterator.next());
assertFalse(iterator.hasNext());
}
/**
* Test that the iterator skips null widgets in the middle of the list.
*/
public void testNullWidgetMiddle() {
Widget w0 = new Widget();
Widget w2 = new Widget();
FiniteWidgetIterator iterator =
new FiniteWidgetIterator(new WidgetProviderImpl(w0, null, w2), 3);
assertTrue(iterator.hasNext());
assertEquals(w0, iterator.next());
assertTrue(iterator.hasNext());
assertEquals(w2, iterator.next());
assertFalse(iterator.hasNext());
}
public void testRemove() {
Widget w0 = new Label();
Widget w1 = new Label();
Widget w2 = new Label();
WidgetProviderImpl provider = new WidgetProviderImpl(w0, w1, w2);
FiniteWidgetIterator iterator = new FiniteWidgetIterator(provider, 3);
// Add the widgets to a panel.
FlowPanel panel = new FlowPanel();
panel.add(w0);
panel.add(w1);
panel.add(w2);
// Remove before getting first widget.
try {
iterator.remove();
fail("Expected IllegalStateException");
} catch (IllegalStateException e) {
// Expected.
}
// Remove the widget.
assertEquals(w0, iterator.next());
assertEquals(panel, w0.getParent());
iterator.remove();
assertNull(w0.getParent());
provider.setWidget(0, null); // Update the provider.
// Try to remove again.
try {
iterator.remove();
fail("Expected IllegalStateException");
} catch (IllegalStateException e) {
// Expected.
}
// Get the next widget.
assertEquals(w1, iterator.next());
}
}