1 /*
   2  * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package test.javafx.scene.control.skin;
  27 
  28 import com.sun.javafx.scene.SceneHelper;
  29 import test.com.sun.javafx.scene.control.infrastructure.KeyEventFirer;
  30 import test.com.sun.javafx.scene.control.infrastructure.MouseEventFirer;
  31 import test.com.sun.javafx.scene.control.infrastructure.MouseEventGenerator;
  32 import com.sun.javafx.tk.Toolkit;
  33 import javafx.scene.Scene;
  34 import javafx.scene.control.ColorPicker;
  35 import javafx.scene.control.Hyperlink;
  36 import javafx.scene.control.skin.ColorPickerPaletteShim;
  37 import javafx.scene.control.skin.ColorPickerSkin;
  38 import javafx.scene.input.KeyCode;
  39 import javafx.scene.input.MouseEvent;
  40 import javafx.scene.layout.GridPane;
  41 import javafx.scene.layout.VBox;
  42 import javafx.stage.Stage;
  43 import org.junit.Before;
  44 import org.junit.Test;
  45 
  46 import static org.junit.Assert.assertEquals;
  47 import static org.junit.Assert.assertNotNull;
  48 import static org.junit.Assert.assertTrue;
  49 
  50 public class ColorPickerSkinTest {
  51     private ColorPicker colorPicker;
  52     private Toolkit tk;
  53     private Stage stage;
  54 
  55     @Before public void setup() {
  56         tk = Toolkit.getToolkit();
  57         colorPicker = new ColorPicker();
  58         Scene scene = new Scene(new VBox(20), 800, 600);
  59         VBox box = (VBox)scene.getRoot();
  60         box.getChildren().add(colorPicker);
  61         stage = new Stage();
  62         stage.setScene(scene);
  63         stage.show();
  64         tk.firePulse();
  65     }
  66 
  67 
  68     @Test public void ensureCanSelectColorFromPalette() {
  69          final MouseEventGenerator generator = new MouseEventGenerator();
  70          ColorPickerSkin skin = (ColorPickerSkin)colorPicker.getSkin();
  71          assertTrue(skin != null);
  72          colorPicker.show();
  73          tk.firePulse();
  74          assertTrue(colorPicker.isShowing());
  75          GridPane grid = ColorPickerPaletteShim.getColorGrid(colorPicker);
  76          double xval = grid.getBoundsInLocal().getMinX();
  77          double yval = grid.getBoundsInLocal().getMinY();
  78 
  79         Scene paletteScene = ColorPickerPaletteShim.getPopup(colorPicker).getScene();
  80         paletteScene.getWindow().requestFocus();
  81 
  82         SceneHelper.processMouseEvent(paletteScene,
  83                 generator.generateMouseEvent(MouseEvent.MOUSE_PRESSED, xval+85, yval+65));
  84 
  85         SceneHelper.processMouseEvent(paletteScene,
  86                 generator.generateMouseEvent(MouseEvent.MOUSE_RELEASED, xval+85, yval+65));
  87         tk.firePulse();
  88 
  89         assertEquals(colorPicker.getValue().toString(), "0x330033ff");
  90     }
  91 
  92     @Test public void testEscapeClosesCustomColorDialog() {
  93 //        final MouseEventGenerator generator = new MouseEventGenerator();
  94         ColorPickerSkin skin = (ColorPickerSkin)colorPicker.getSkin();
  95         assertTrue(skin != null);
  96 //        ColorPalette colorPalette = ColorPickerPaletteShim.getColorPalette(colorPicker);
  97         colorPicker.show();
  98         tk.firePulse();
  99         assertTrue(colorPicker.isShowing());
 100         Hyperlink link = ColorPickerPaletteShim.ColorPallette_getCustomColorLink(colorPicker);
 101 
 102         Scene paletteScene = ColorPickerPaletteShim.getPopup(colorPicker).getScene();
 103         paletteScene.getWindow().requestFocus();
 104 
 105         //Click on CustomColor hyperlink to show the custom color dialog.
 106         Hyperlink hyperlink = ColorPickerPaletteShim.ColorPallette_getCustomColorLink(colorPicker);
 107         MouseEventFirer mouse = new MouseEventFirer(hyperlink);
 108         mouse.fireMousePressAndRelease();
 109         mouse.dispose();
 110 
 111         Stage dialog = ColorPickerPaletteShim.ColorPallette_getCustomColorDialog(colorPicker);
 112         assertNotNull(dialog);
 113         assertTrue(dialog.isShowing());
 114 
 115         dialog.requestFocus();
 116         tk.firePulse();
 117 
 118         // fire KeyEvent (Escape) on custom color dialog to close it
 119         KeyEventFirer keyboard = new KeyEventFirer(dialog);
 120         keyboard.doKeyPress(KeyCode.ESCAPE);
 121         tk.firePulse();
 122         assertTrue(!dialog.isShowing());
 123     }
 124 }