/* * Copyright 2008 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; /** * Tests {@link LazyPanel}. */ public class LazyPanelTest extends GWTTestCase { private final static class MyLazyPanel extends LazyPanel { final Widget widgetToCreate; boolean createWasCalled; public MyLazyPanel(Widget widgetToCreate) { this.widgetToCreate = widgetToCreate; } @Override protected Widget createWidget() { createWasCalled = true; return widgetToCreate; } } @Override public String getModuleName() { return "com.google.gwt.user.User"; } public void testSetVisible() { Widget w = new Label(); MyLazyPanel p = new MyLazyPanel(w); assertNull(p.getWidget()); assertNull(w.getParent()); RootPanel.get().add(p); assertNull(w.getParent()); p.setVisible(true); assertWidgetIsChildOf(w, p); p.createWasCalled = false; p.setVisible(false); assertFalse(p.createWasCalled); p.setVisible(true); assertFalse("Should not call createWidget again", p.createWasCalled); } public void testEnsureWidget() { Widget w = new Label(); MyLazyPanel p = new MyLazyPanel(w); p.ensureWidget(); assertWidgetIsChildOf(w, p); assertEquals(w, p.getWidget()); } private void assertWidgetIsChildOf(Widget w, Widget p) { Widget parentCursor = w; while (parentCursor != null && parentCursor != RootPanel.get()) { parentCursor = parentCursor.getParent(); if (p.equals(parentCursor)) { break; } } assertEquals("Expect w to be child of p", p, parentCursor); } public void testInDeckPanel() { // There are separate paths for the first widget displayed // and for succeeding, so test both (see DeckPanel#showWidget) DeckPanel deck = new DeckPanel(); Widget w0 = new Label(); deck.insert(new MyLazyPanel(w0), 0); assertNull(w0.getParent()); Widget w1 = new Label(); deck.insert(new MyLazyPanel(w1), 1); assertNull(w0.getParent()); assertNull(w1.getParent()); deck.showWidget(0); assertWidgetIsChildOf(w0, deck); assertNull(w1.getParent()); deck.showWidget(1); assertWidgetIsChildOf(w1, deck); } public void testInStackPanel() { StackPanel stack = new StackPanel(); stack.add(new Label(), "Able"); Widget w = new Label(); stack.add(new MyLazyPanel(w), "Baker"); assertNull(w.getParent()); stack.showStack(1); assertWidgetIsChildOf(w, stack); } public void testInDisclosurePanel() { Widget w = new Label(); DisclosurePanel dp = new DisclosurePanel(); dp.add(new MyLazyPanel(w)); assertNull(w.getParent()); dp.setOpen(true); assertWidgetIsChildOf(w, dp); } public void testInAnimatedDisclosurePanel() { Widget w = new Label(); DisclosurePanel dp = new DisclosurePanel(); dp.setAnimationEnabled(true); dp.add(new MyLazyPanel(w)); assertNull(w.getParent()); dp.setOpen(true); assertWidgetIsChildOf(w, dp); } }