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