/* * 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; /** * Test for {@link DeckLayoutPanel}. */ public class DeckLayoutPanelTest extends PanelTestBase<DeckLayoutPanel> { /** * Test that forcing layout without changing the widget doesn't cause the * widget to disappear. */ public void testForceLayoutSameWidget() { DeckLayoutPanel deck = createPanel(); Label[] labels = new Label[2]; for (int i = 0; i < labels.length; i++) { labels[i] = new Label("content" + i); deck.add(labels[i]); } // Show widget at index 1, make sure it becomes visible. deck.showWidget(1); assertEquals(1, deck.getVisibleWidgetIndex()); assertEquals(labels[1], deck.getVisibleWidget()); deck.forceLayout(); assertFalse(labels[0].isVisible()); assertTrue(labels[1].isVisible()); // Force layout and make sure that widget 1 is still visible. deck.forceLayout(); assertEquals(1, deck.getVisibleWidgetIndex()); assertEquals(labels[1], deck.getVisibleWidget()); assertFalse(labels[0].isVisible()); assertTrue(labels[1].isVisible()); } public void testSetWidget() { DeckLayoutPanel deck = createPanel(); Label[] labels = new Label[2]; for (int i = 0; i < labels.length; i++) { labels[i] = new Label("content" + i); } // Set a widget that isn't a child. deck.setWidget(labels[0]); assertEquals(deck, labels[0].getParent()); assertEquals(0, deck.getVisibleWidgetIndex()); assertEquals(labels[0], deck.getVisibleWidget()); // Set another widget that isn't a child. deck.setWidget(labels[1]); assertEquals(deck, labels[0].getParent()); assertEquals(deck, labels[1].getParent()); assertEquals(0, deck.getWidgetIndex(labels[0])); assertEquals(1, deck.getWidgetIndex(labels[1])); assertEquals(1, deck.getVisibleWidgetIndex()); assertEquals(labels[1], deck.getVisibleWidget()); // Set a widget that is a child. deck.setWidget(labels[0]); assertEquals(deck, labels[0].getParent()); assertEquals(deck, labels[1].getParent()); assertEquals(0, deck.getWidgetIndex(labels[0])); assertEquals(1, deck.getWidgetIndex(labels[1])); assertEquals(0, deck.getVisibleWidgetIndex()); assertEquals(labels[0], deck.getVisibleWidget()); // Set the widget to null. deck.setWidget(null); assertEquals(deck, labels[0].getParent()); assertEquals(deck, labels[1].getParent()); assertEquals(0, deck.getWidgetIndex(labels[0])); assertEquals(1, deck.getWidgetIndex(labels[1])); assertEquals(-1, deck.getVisibleWidgetIndex()); assertEquals(null, deck.getVisibleWidget()); } /** * Tests both {@link DeckLayoutPanel#showWidget(int)} and * {@link DeckLayoutPanel#showWidget(Widget)}. */ public void testShowWidget() { DeckLayoutPanel deck = createPanel(); Label[] labels = new Label[3]; for (int i = 0; i < labels.length; i++) { labels[i] = new Label("content" + i); deck.add(labels[i]); } // Show widget at index 1, make sure it becomes visible. deck.showWidget(1); assertEquals(1, deck.getVisibleWidgetIndex()); assertEquals(labels[1], deck.getVisibleWidget()); deck.forceLayout(); assertFalse(labels[0].isVisible()); assertTrue(labels[1].isVisible()); assertFalse(labels[2].isVisible()); // Show widget at index 0, make sure widget 1 becomes invisible. deck.showWidget(labels[0]); assertEquals(0, deck.getVisibleWidgetIndex()); assertEquals(labels[0], deck.getVisibleWidget()); deck.forceLayout(); assertTrue(labels[0].isVisible()); assertFalse(labels[1].isVisible()); assertFalse(labels[2].isVisible()); } /** * Test that toggling a widget out and back in within the same event loop * doesn't cause the widget to be hidden. */ public void testShowWidgetToggle() { DeckLayoutPanel deck = createPanel(); Label[] labels = new Label[2]; for (int i = 0; i < labels.length; i++) { labels[i] = new Label("content" + i); deck.add(labels[i]); } // Show widget at index 1, make sure it becomes visible. deck.showWidget(1); assertEquals(1, deck.getVisibleWidgetIndex()); assertEquals(labels[1], deck.getVisibleWidget()); deck.forceLayout(); assertFalse(labels[0].isVisible()); assertTrue(labels[1].isVisible()); // Toggle the widget out and back in. deck.showWidget(0); deck.showWidget(1); assertEquals(1, deck.getVisibleWidgetIndex()); assertEquals(labels[1], deck.getVisibleWidget()); deck.forceLayout(); assertFalse(labels[0].isVisible()); assertTrue(labels[1].isVisible()); } @Override protected DeckLayoutPanel createPanel() { return new DeckLayoutPanel(); } }