/* * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import com.sun.swingset3.demos.splitpane.SplitPaneDemo; import static com.sun.swingset3.demos.splitpane.SplitPaneDemo.*; import java.awt.Component; import java.awt.event.KeyEvent; import javax.swing.JSplitPane; import static org.jemmy2ext.JemmyExt.*; import org.jtregext.GuiTestListener; import org.netbeans.jemmy.ClassReference; import org.netbeans.jemmy.ComponentChooser; import org.netbeans.jemmy.operators.JButtonOperator; import org.netbeans.jemmy.operators.JCheckBoxOperator; import org.netbeans.jemmy.operators.JFrameOperator; import org.netbeans.jemmy.operators.JRadioButtonOperator; import org.netbeans.jemmy.operators.JSplitPaneOperator; import org.netbeans.jemmy.operators.JTextFieldOperator; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import static org.testng.AssertJUnit.*; /* * @test * @key headful * @summary Verifies SwingSet3 SplitPaneDemo by performing OneClick expansion, * changing size of the divier, moving the divider to different positions * and changing the divider orientation. * * @library /sanity/client/lib/jemmy/src * @library /sanity/client/lib/Extensions/src * @library /sanity/client/lib/SwingSet3/src * @modules java.desktop * java.logging * @build org.jemmy2ext.JemmyExt * @build com.sun.swingset3.demos.splitpane.SplitPaneDemo * @run testng SplitPaneDemoTest */ @Listeners(GuiTestListener.class) public class SplitPaneDemoTest { @Test public void test() throws Exception { new ClassReference(SplitPaneDemo.class.getCanonicalName()).startApplication(); JFrameOperator frame = new JFrameOperator(DEMO_TITLE); JSplitPaneOperator splitPane = new JSplitPaneOperator(frame); // Toggle OneTouch Expandable checkOneTouch(frame, splitPane, true); checkOneTouch(frame, splitPane, false); // Check changing divider size to minimum and maximum values changeDividerSize(frame, splitPane, 50); changeDividerSize(frame, splitPane, 6); // Check moving the divider checkDividerMoves(frame, splitPane, false); checkDividerMoves(frame, splitPane, true); // Check different minumum Day/Night sizes changeMinimumSizes(frame, splitPane, 100); changeMinimumSizes(frame, splitPane, 0); } // Check for different day and night minimum size public void changeMinimumSizes(JFrameOperator frame, JSplitPaneOperator splitPane, int amount) throws Exception { for (String label : new String[]{FIRST_COMPONENT_MIN_SIZE, SECOND_COMPONENT_MIN_SIZE}) { JTextFieldOperator size = new JTextFieldOperator(getLabeledContainerOperator(frame, label)); size.enterText(Integer.toString(amount)); size.pressKey(KeyEvent.VK_ENTER); } checkDividerMoves(frame, splitPane, false); checkDividerMoves(frame, splitPane, true); } // Check moving of divider public void checkDividerMoves(JFrameOperator frame, JSplitPaneOperator splitPane, boolean isVertical) throws Exception { if (isVertical) { new JRadioButtonOperator(frame, VERTICAL_SPLIT).doClick(); } else { new JRadioButtonOperator(frame, HORIZONTAL_SPLIT).doClick(); } splitPane.moveDivider(0.0); assertEquals("Move Minimum, dividerLocation is at minimumDividerLocation", splitPane.getMinimumDividerLocation(), splitPane.getDividerLocation()); // use getMaximumDividerLocation() to move divider to here because using proportion 1.0 does not work splitPane.moveDivider(1.0); assertEquals("Move Maximum, dividerLocation is at maximumDividerLocation", splitPane.getMaximumDividerLocation(), splitPane.getDividerLocation()); splitPane.moveDivider(0.5); assertEquals("Move Middle, dividerLocation is at the artithmetic average of minimum and maximum DividerLocations", (splitPane.getMaximumDividerLocation() + splitPane.getMinimumDividerLocation()) / 2, splitPane.getDividerLocation()); } private void waitDividerSize(JSplitPaneOperator splitPane, int size) { splitPane.waitState(new ComponentChooser() { public boolean checkComponent(Component c) { return splitPane.getDividerSize() == size; } public String getDescription() { return "Divider size to be " + size; } }); } // Check changing the size of the divider public void changeDividerSize(JFrameOperator frame, JSplitPaneOperator splitPane, int amount) throws Exception { JTextFieldOperator size = new JTextFieldOperator(getLabeledContainerOperator(frame, DIVIDER_SIZE)); size.enterText(Integer.toString(amount)); waitDividerSize(splitPane, amount); } private void waitDividerLocation(JSplitPaneOperator splitPane, int location) { splitPane.waitState(new ComponentChooser() { public boolean checkComponent(Component c) { return splitPane.getDividerLocation() == location; } public String getDescription() { return "Divider location to be " + location; } }); } public void checkOneTouch(JFrameOperator frame, JSplitPaneOperator splitPane, boolean oneTouch) throws Exception { JCheckBoxOperator checkBox = new JCheckBoxOperator(frame, ONE_TOUCH_EXPANDABLE); JButtonOperator buttonLeft = new JButtonOperator(splitPane.getDivider(), 0); JButtonOperator buttonRight = new JButtonOperator(splitPane.getDivider(), 1); int initDividerLocation = splitPane.getDividerLocation(); if (oneTouch) { if (!checkBox.isSelected()) { // uncheck checkBox.doClick(); } int left = getUIValue(splitPane, (JSplitPane sp) -> sp.getInsets().left); System.out.println("left = " + left); int right = getUIValue(splitPane, (JSplitPane sp) -> sp.getInsets().right); System.out.println("right = " + right); // expand full left buttonLeft.push(); waitDividerLocation(splitPane, left); // expand back from full left buttonRight.push(); waitDividerLocation(splitPane, initDividerLocation); // expand all the way right buttonRight.push(); waitDividerLocation(splitPane, splitPane.getWidth() - splitPane.getDividerSize() - right); // Click to move back from right expansion buttonLeft.push(); waitDividerLocation(splitPane, initDividerLocation); } // Test for case where one touch expandable is disabled if (!oneTouch) { if (checkBox.isSelected()) { // uncheck checkBox.doClick(); } splitPane.waitState(new ComponentChooser() { public boolean checkComponent(Component c) { return !splitPane.isOneTouchExpandable(); } public String getDescription() { return "Split pane not to be one touch expandable"; } }); } } }