/* * Copyright (c) 2010, grossmann * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the jo-widgets.org nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.jowidgets.api.test; import org.jowidgets.api.image.Icons; import org.jowidgets.api.toolkit.Toolkit; import org.jowidgets.api.widgets.IButton; import org.jowidgets.api.widgets.IComposite; import org.jowidgets.api.widgets.IContainer; import org.jowidgets.api.widgets.IControl; import org.jowidgets.api.widgets.IDisplay; import org.jowidgets.api.widgets.IFrame; import org.jowidgets.api.widgets.ILabel; import org.jowidgets.api.widgets.ISplitComposite; import org.jowidgets.api.widgets.IWidget; import org.jowidgets.api.widgets.IWindow; import org.jowidgets.api.widgets.blueprint.builder.IComponentSetupBuilder; import org.jowidgets.api.widgets.blueprint.factory.IBluePrintFactory; import org.jowidgets.common.application.IApplication; import org.jowidgets.common.application.IApplicationLifecycle; import org.jowidgets.common.color.ColorValue; import org.jowidgets.common.color.IColorConstant; import org.jowidgets.common.types.Dimension; import org.jowidgets.common.types.Markup; import org.jowidgets.common.types.Position; import org.jowidgets.common.widgets.controller.IActionListener; import org.junit.Assert; import org.junit.Test; public class WidgetFactoryTest { private static final IColorConstant DEFAULT_FOREGROUND = new ColorValue(1, 2, 3); private static final IColorConstant DEFAULT_BACKGROUND = new ColorValue(222, 223, 224); private static final IColorConstant FOREGROUND = new ColorValue(4, 5, 6); private static final IColorConstant BACKGROUND = new ColorValue(219, 220, 221); private static final String LAYOUT_CONSTRAINTS = "growx"; private static final Dimension SIZE = new Dimension(145, 167); private static final Position POSITION = new Position(23, 19); private static final IBluePrintFactory BPF = Toolkit.getBluePrintFactory(); @Test public void createWidgetsTest() { Toolkit.getApplicationRunner().run(new IApplication() { @Override public void start(final IApplicationLifecycle lifecycle) { final IFrame frame = Toolkit.createRootFrame(BPF.frame(), lifecycle); frame.setVisible(true); Assert.assertTrue(frame.isVisible()); testCreateWidgets(frame); testAddAndRemove(frame); frame.dispose(); } }); } private void testCreateWidgets(final IFrame frame) { testCreateChildWidgets(frame); testCreateChildWidgets(frame.add(BPF.composite(), null)); testCreateChildWidgets(frame.add(BPF.scrollComposite(), null)); testChildWindow(frame, frame.createChildWindow(bpMod(BPF.dialog().setModal(false)))); testChildWindow(frame, frame.createChildWindow(bpMod(BPF.frame()))); testChildDisplay(frame, frame.createChildWindow(bpMod(BPF.questionDialog()))); testChildDisplay(frame, frame.createChildWindow(bpMod(BPF.messageDialog()))); } private void testCreateChildWidgets(final IContainer container) { testButtonWidget(container, container.add(bpMod(BPF.button()), null)); testChildControl(container, container.add(bpMod(BPF.checkBox()), null)); testChildControl(container, container.add(bpMod(BPF.comboBox(new String[] {})), null)); testChildControl(container, container.add(bpMod(BPF.comboBoxSelection(new String[] {})), null)); testChildControl(container, container.add(bpMod(BPF.composite()), null)); testChildControl(container, container.add(bpMod(BPF.icon()), null)); testChildControl(container, container.add(bpMod(BPF.inputFieldString()), null)); testChildControl(container, container.add(bpMod(BPF.label()), null)); testChildControl(container, container.add(bpMod(BPF.progressBar()), null)); testChildControl(container, container.add(bpMod(BPF.scrollComposite()), null)); testChildControl(container, container.add(bpMod(BPF.separator()), null)); testSplitCompositeWidget(container, container.add(bpMod(BPF.splitComposite()), null)); //TODO LG text field yoilds no longer an IInputControl but an ITextControl //testChildControl(container, container.add(bpMod(BPF.textField()), null)); testChildControl(container, container.add(bpMod(BPF.textLabel()), null)); testChildControl(container, container.add(bpMod(BPF.textSeparator()), null)); testChildControl(container, container.add(bpMod(BPF.toggleButton()), null)); testChildControl(container, container.add(bpMod(BPF.validationResultLabel()), null)); container.removeAll(); Assert.assertTrue(container.getChildren().size() == 0); } private <BLUE_PRINT_TYPE extends IComponentSetupBuilder<?>> BLUE_PRINT_TYPE bpMod(final BLUE_PRINT_TYPE bluePrint) { bluePrint.setForegroundColor(DEFAULT_FOREGROUND); bluePrint.setBackgroundColor(DEFAULT_BACKGROUND); return bluePrint; } private void testChildControl(final IContainer parent, final IControl widget) { //is widget created Assert.assertNotNull(widget); widget.setLayoutConstraints(LAYOUT_CONSTRAINTS); Assert.assertTrue(widget.getLayoutConstraints() instanceof String); Assert.assertTrue(((String) widget.getLayoutConstraints()).contains(LAYOUT_CONSTRAINTS)); //has widget colors from setup Assert.assertTrue(DEFAULT_FOREGROUND.equals(widget.getForegroundColor())); Assert.assertTrue(DEFAULT_BACKGROUND.equals(widget.getBackgroundColor())); //is widget a child its parent Assert.assertTrue(parent.getChildren().contains(widget)); //test the parent testParent(parent, widget); //has widget the widget a uiReference Assert.assertNotNull(widget.getUiReference()); //is widget visible Assert.assertTrue(widget.isVisible()); //test if widget could set invisible widget.setVisible(false); Assert.assertFalse(widget.isVisible()); //test if widget could set visible widget.setVisible(true); Assert.assertTrue(widget.isVisible()); //test if widget could set disabled widget.setEnabled(false); Assert.assertFalse(widget.isEnabled()); //test if widget could set enabled widget.setEnabled(true); Assert.assertTrue(widget.isEnabled()); //test if colors could set widget.setBackgroundColor(BACKGROUND); Assert.assertTrue(BACKGROUND.equals(widget.getBackgroundColor())); widget.setForegroundColor(FOREGROUND); Assert.assertTrue(FOREGROUND.equals(widget.getForegroundColor())); //test if redraw could be done widget.redraw(); //test if widget has a window anchestor Assert.assertNotNull(Toolkit.getWidgetUtils().getWindowAncestor(widget)); } private void testChildDisplay(final IWindow parent, final IDisplay widget) { Assert.assertNotNull(widget); Assert.assertNotNull(widget.getUiReference()); testParent(parent, widget); Assert.assertTrue(parent.getChildWindows().contains(widget)); } private void testChildWindow(final IWindow parent, final IWindow window) { testChildDisplay(parent, window); window.setSize(SIZE); window.setPosition(POSITION); window.setVisible(true); Assert.assertTrue(SIZE.equals(window.getSize())); Assert.assertTrue(POSITION.equals(window.getPosition())); } private void testSplitCompositeWidget(final IContainer parent, final ISplitComposite widget) { testChildControl(parent, widget); testParent(widget, widget.getFirst()); testParent(widget, widget.getSecond()); } private void testButtonWidget(final IContainer parent, final IButton widget) { testLabelWidget(parent, widget); final IActionListener listener = new IActionListener() { @Override public void actionPerformed() { } }; widget.addActionListener(listener); //TODO LG push button and check listener widget.removeActionListener(listener); //TODO LG push button and check listener not invoked } private void testLabelWidget(final IContainer parent, final ILabel widget) { testChildControl(parent, widget); widget.setIcon(Icons.ERROR); widget.setMarkup(Markup.STRONG); widget.setText("Test"); widget.setToolTipText("TooltipTest"); } private void testParent(final IWidget parent, final IWidget child) { Assert.assertNotNull(child.getParent()); Assert.assertTrue(parent == child.getParent()); } private void testAddAndRemove(final IFrame frame) { testAddAndRemoveForContainer(frame); testAddAndRemoveForContainer(frame.createChildWindow(BPF.frame())); testAddAndRemoveForContainer(frame.createChildWindow(BPF.dialog())); } private void testAddAndRemoveForContainer(final IContainer container) { final IComposite childComposite1 = container.add(BPF.composite(), null); Assert.assertTrue(container.getChildren().contains(childComposite1)); final IComposite childComposite2 = container.add(BPF.composite(), null); Assert.assertTrue(container.getChildren().contains(childComposite2)); final IComposite childComposite3 = childComposite1.add(BPF.composite(), null); Assert.assertTrue(childComposite1.getChildren().contains(childComposite3)); Assert.assertTrue(container.remove(childComposite2)); Assert.assertFalse(container.getChildren().contains(childComposite2)); Assert.assertTrue(container.remove(childComposite1)); Assert.assertFalse(container.getChildren().contains(childComposite1)); } }