Package jfxtras.scene.menu.test

Source Code of jfxtras.scene.menu.test.CornerMenuTest

package jfxtras.scene.menu.test;

import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

import javafx.event.ActionEvent;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import jfxtras.test.JFXtrasGuiTest;
import jfxtras.scene.layout.CircularPane;
import jfxtras.scene.menu.CornerMenu;
import jfxtras.test.AssertNode;
import jfxtras.test.AssertNode.A;
import jfxtras.test.TestUtil;
import jfxtras.util.Implements;
import jfxtras.util.NodeUtil;

import org.junit.Assert;
import org.junit.Test;

/**
*
* @author Tom Eugelink
*
*/
public class CornerMenuTest extends JFXtrasGuiTest {

  @Override
  protected Parent getRootNode() {
    // use a pane to force the scene large enough
    stackPane = new StackPane();
    stackPane.setMinSize(600, 600);
   
    // place label
    label = new Label();
    stackPane.getChildren().add(label);
   
    return stackPane;
  }
  private StackPane stackPane = null;
  private Label label = null;
  private CornerMenu cornerMenu = null;
  final private MenuItem facebookMenuItem = new MenuItem("Facebook", new ImageView(new Image(this.getClass().getResourceAsStream("social_facebook_button_blue.png"))));
  final private MenuItem googleMenuItem = new MenuItem("Google", new ImageView(new Image(this.getClass().getResourceAsStream("social_google_button_blue.png"))));
  final private MenuItem skypeMenuItem = new MenuItem("Skype", new ImageView(new Image(this.getClass().getResourceAsStream("social_skype_button_blue.png"))));
  final private MenuItem twitterMenuItem = new MenuItem("Twitter", new ImageView(new Image(this.getClass().getResourceAsStream("social_twitter_button_blue.png"))));
  final private MenuItem windowsMenuItem = new MenuItem("Windows", new ImageView(new Image(this.getClass().getResourceAsStream("social_windows_button.png"))));
 
  @Test
  public void topLeft() {
    setLabel("topLeft");
   
    // setup
    TestUtil.runThenWaitForPaintPulse( () -> {
      cornerMenu = new CornerMenu(CornerMenu.Location.TOP_LEFT, this.stackPane, true)
        .withAnimationInterpolation(null)
        .withAutoShowAndHide(false);
      cornerMenu.getItems().addAll(facebookMenuItem, googleMenuItem, skypeMenuItem, twitterMenuItem, windowsMenuItem);
    });

    //generateSource();
    assertWH(findCircularPane(), 165.4913053420834, 165.49130534208345);
    new AssertNode(findCircularPane().getChildren().get(0)).assertXYWH(126.86388834411386, 6.627416997969533, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(1)).assertXYWH(112.87937556175157, 49.667321763662784, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(2)).assertXYWH(86.2792515439946, 86.2792515439946, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(3)).assertXYWH(49.667321763662784, 112.87937556175163, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(4)).assertXYWH(6.627416997969533, 126.86388834411392, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
  }

  @Test
  public void topRight() {
    setLabel("topRight");
   
    // setup
    TestUtil.runThenWaitForPaintPulse( () -> {
      cornerMenu = new CornerMenu(CornerMenu.Location.TOP_RIGHT, this.stackPane, true)
        .withAnimationInterpolation(null)
        .withAutoShowAndHide(false);
      cornerMenu.getItems().addAll(facebookMenuItem, googleMenuItem, skypeMenuItem, twitterMenuItem, windowsMenuItem);
    });

    //generateSource();
    assertWH(findCircularPane(), 165.49130534208342, 165.49130534208342);
    new AssertNode(findCircularPane().getChildren().get(0)).assertXYWH(126.86388834411389, 126.86388834411389, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(1)).assertXYWH(83.82398357842062, 112.8793755617516, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(2)).assertXYWH(47.21205379808883, 86.27925154399458, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(3)).assertXYWH(20.611929780331806, 49.66732176366281, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(4)).assertXYWH(6.627416997969522, 6.627416997969533, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
  }

  @Test
  public void bottomRight() {
    setLabel("bottomRight");
   
    // setup
    TestUtil.runThenWaitForPaintPulse( () -> {
      cornerMenu = new CornerMenu(CornerMenu.Location.BOTTOM_RIGHT, this.stackPane, true)
        .withAnimationInterpolation(null)
        .withAutoShowAndHide(false);
      cornerMenu.getItems().addAll(facebookMenuItem, googleMenuItem, skypeMenuItem, twitterMenuItem, windowsMenuItem);
    });

    //generateSource();
    assertWH(findCircularPane(), 165.49130534208342, 165.49130534208342);
    new AssertNode(findCircularPane().getChildren().get(0)).assertXYWH(6.627416997969522, 126.86388834411386, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(1)).assertXYWH(20.611929780331806, 83.82398357842062, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(2)).assertXYWH(47.21205379808882, 47.21205379808883, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(3)).assertXYWH(83.82398357842061, 20.611929780331806, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(4)).assertXYWH(126.86388834411389, 6.627416997969522, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
  }

  @Test
  public void bottomLeft() {
    setLabel("bottomLeft");
   
    // setup
    TestUtil.runThenWaitForPaintPulse( () -> {
      cornerMenu = new CornerMenu(CornerMenu.Location.BOTTOM_LEFT, this.stackPane, true)
        .withAnimationInterpolation(null)
        .withAutoShowAndHide(false);
      cornerMenu.getItems().addAll(facebookMenuItem, googleMenuItem, skypeMenuItem, twitterMenuItem, windowsMenuItem);
    });

    //generateSource();
    assertWH(findCircularPane(), 165.49130534208345, 165.49130534208342);
    new AssertNode(findCircularPane().getChildren().get(0)).assertXYWH(6.627416997969533, 6.627416997969522, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(1)).assertXYWH(49.66732176366273, 20.61192978033175, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(2)).assertXYWH(86.2792515439946, 47.21205379808879, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(3)).assertXYWH(112.87937556175163, 83.8239835784206, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
    new AssertNode(findCircularPane().getChildren().get(4)).assertXYWH(126.86388834411392, 126.86388834411386, 32.0, 32.0, 0.01).assertClassName("jfxtras.scene.menu.CornerMenu$CornerMenuNode");
  }

  @Test
  public void isClickHandled() {
    setLabel("isClickHandled");
   
    // setup
    TestUtil.runThenWaitForPaintPulse( () -> {
      cornerMenu = new CornerMenu(CornerMenu.Location.TOP_RIGHT, this.stackPane, true)
        .withAnimationInterpolation(null)
        .withAutoShowAndHide(false);
      cornerMenu.getItems().addAll(facebookMenuItem, googleMenuItem, skypeMenuItem, twitterMenuItem, windowsMenuItem);
    });

    Assert.assertEquals(0, menuItemClickAtomicInteger.get());
    facebookMenuItem.setOnAction(this::handleByIncrementingMenuItemClick); // this should be #1
    click("#CornerMenuNode#1");
    click("#CornerMenuNode#2"); // this has no action handler attached
    Assert.assertEquals(1, menuItemClickAtomicInteger.get());
  }

  @Test
  public void isClickedThrough() {
    setLabel("isClickedThrough");
   
    // setup
    AtomicInteger underlyingClickAtomicInteger = new AtomicInteger();
    TestUtil.runThenWaitForPaintPulse( () -> {
      Button lUnderlyingButton = new Button("click me");
      lUnderlyingButton.setId("UnderlyingButton");
      stackPane.getChildren().add(lUnderlyingButton);
      lUnderlyingButton.setOnAction((actionEvent) -> {
        underlyingClickAtomicInteger.incrementAndGet();
      });
     
      cornerMenu = new CornerMenu(CornerMenu.Location.TOP_RIGHT, this.stackPane, true)
        .withAnimationInterpolation(null)
        .withAutoShowAndHide(false);
      cornerMenu.getItems().addAll(facebookMenuItem, googleMenuItem, skypeMenuItem, twitterMenuItem, windowsMenuItem);
    });

    Assert.assertEquals(0, underlyingClickAtomicInteger.get());
    click("#UnderlyingButton");
    Assert.assertEquals(1, underlyingClickAtomicInteger.get());
  }


  @Test
  public void autoShowAndHide() {
    setLabel("autoShowAndHide");
   
    // setup
    TestUtil.runThenWaitForPaintPulse( () -> {
      cornerMenu = new CornerMenu(CornerMenu.Location.TOP_LEFT, this.stackPane, false)
        .withAnimationInterpolation(null)
        .withAutoShowAndHide(true);
      cornerMenu.getItems().addAll(facebookMenuItem, googleMenuItem, skypeMenuItem, twitterMenuItem, windowsMenuItem);
    });

    // not visible
    Assert.assertFalse(cornerMenu.isShown());
   
    // move mouse to top left corner
    moveMouseToLeftCorner();
    Assert.assertTrue(cornerMenu.isShown());
   
    // move mouse to center
    moveMouseToCenter();
    Assert.assertFalse(cornerMenu.isShown());
  }


  // =============================================================================================================================================================================================================================
  // SUPPORT

  @Implements(interfaces=javafx.event.EventHandler.class)
  public void handleByIncrementingMenuItemClick(ActionEvent actionEvent) {
    menuItemClickAtomicInteger.incrementAndGet();
  }
  private final AtomicInteger menuItemClickAtomicInteger = new AtomicInteger();
 
  private void assertWH(Pane pane, double w, double h) {
    Assert.assertEquals(w, pane.getWidth(), 0.01);
    Assert.assertEquals(h, pane.getHeight(), 0.01);
  }
 
  private void setLabel(String s) {
    TestUtil.runThenWaitForPaintPulse( () -> {
      label.setText(s);
    });
  }

  private void generateSource() {
    Pane pane = findCircularPane();
    System.out.println("> " + label.getText());
    System.out.println("assertWH(findCircularPane(), " + pane.getWidth() + ", " + pane.getHeight() + ");");
    AssertNode.generateSource("findCircularPane()", pane.getChildren(), EXCLUDED_CLASSES, false, A.XYWH, A.CLASSNAME);
    TestUtil.sleep(3000);
  }
  List<String> EXCLUDED_CLASSES = java.util.Arrays.asList(new String[]{"jfxtras.scene.layout.CircularPane$Bead", "jfxtras.scene.layout.CircularPane$Connector"});
 
  private CircularPane findCircularPane() {
    return (CircularPane)stackPane.getChildren().get(1);   
  }
 
  private void moveMouseToCenter() {
    move(NodeUtil.screenX(stackPane) + (stackPane.getWidth() / 2), NodeUtil.screenY(stackPane) + (stackPane.getHeight() / 2));
  }
 
  private void moveMouseToLeftCorner() {
    move(NodeUtil.screenX(stackPane) + 5,  NodeUtil.screenY(stackPane) + 5);
  }
}
TOP

Related Classes of jfxtras.scene.menu.test.CornerMenuTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.