blob: c74f78965ce6f3d44815005be08de45a69402aa8 [file] [log] [blame]
/*
* Copyright 2007 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.dom.client.Element;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* Tests the FlowPanel widget.
*/
public class FlowPanelTest extends PanelTestBase<FlowPanel> {
public void testClear() {
int size = 10;
FlowPanel target;
List<Widget> children = new ArrayList<Widget>();
target = new FlowPanel();
for (int i = 0; i < size; i++) {
Widget w = new Label("widget-" + i);
target.add(w);
children.add(w);
}
RootPanel.get().add(target);
for (Widget child : target) {
assertNotNull(child.getElement().getPropertyString("__listener"));
}
assertEquals(10, target.getWidgetCount());
target.clear();
assertEquals(0, target.getWidgetCount());
for (Widget child : target) {
assertNull(child.getElement().getPropertyString("__listener") == null);
}
}
public void testClearWithError() {
// Create a widget that will throw an exception onUnload.
BadWidget badWidget = new BadWidget();
badWidget.setFailOnUnload(true);
Label label0 = new Label();
Label label1 = new Label();
// Add the widget to a panel.
FlowPanel panel = createPanel();
panel.add(label0);
panel.add(badWidget);
panel.add(label1);
assertFalse(label0.isAttached());
assertFalse(badWidget.isAttached());
assertFalse(label1.isAttached());
// Attach the widget.
RootPanel.get().add(panel);
assertTrue(label0.isAttached());
assertTrue(badWidget.isAttached());
assertTrue(label1.isAttached());
// Remove the widget from the panel.
try {
panel.clear();
} catch (AttachDetachException e) {
// Expected.
Set<Throwable> causes = e.getCauses();
assertEquals(1, causes.size());
Throwable[] throwables = causes.toArray(new Throwable[1]);
assertTrue(throwables[0] instanceof IllegalArgumentException);
}
assertFalse(label0.isAttached());
assertFalse(badWidget.isAttached());
assertFalse(label1.isAttached());
assertNull(badWidget.getParent());
assertNull(badWidget.getElement().getParentElement());
}
public void testClearWithNestedChildren() {
FlowPanel target = new FlowPanel();
FlowPanel child0 = new FlowPanel();
HTML child1 = new HTML();
target.add(child0);
child0.add(child1);
Element child0Elem = child0.getElement();
Element child1Elem = child1.getElement();
assertEquals(child0Elem, target.getElement().getFirstChild());
assertEquals(child1Elem, child0Elem.getFirstChild());
target.clear();
assertEquals(child1Elem, child0Elem.getFirstChildElement());
}
@Override
protected FlowPanel createPanel() {
return new FlowPanel();
}
}