Merge branch 'improvement/JAL-1988+JAL-3416_flatlaf_osx_apqhandler' into improvement...
[jalview.git] / utils / test / JalviewJSTest.java
index 95737d4..3e08024 100644 (file)
 package test;
+import jalview.gui.JvOptionPane;
+import jalview.util.JSONUtils;
+
 import java.awt.BorderLayout;
 import java.awt.ComponentOrientation;
 import java.awt.Container;
 import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.GridLayout;
+import java.awt.MediaTracker;
+import java.io.File;
+import java.text.DecimalFormat;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
 
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
 import javax.swing.JCheckBox;
+import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
+import javax.swing.JRadioButtonMenuItem;
 import javax.swing.SwingConstants;
+import javax.swing.WindowConstants;
 import javax.swing.border.TitledBorder;
 
+import org.json.simple.parser.ParseException;
+
 /**
  * A class with a main method entry point for ad hoc tests of JalviewJS
  * behaviour. The J2S transpiler should generate an html entry point for this
  * class, allowing comparison between Java and Javascript execution.
  */
-@SuppressWarnings("serial")
 public class JalviewJSTest extends JPanel
 {
   public static void main(String[] args)
   {
-    new JalviewJSTest().doTest();
+    new JalviewJSTest().doTest6();
+  }
+  
+  void doTest6()
+  {
+    /*
+     * check for transpiler fix associated with JSONParser yylex.java use of charAt()
+     * instead of codePointAt(); moved here from PDBFTSRestClient
+     */
+
+    String s = "e";
+    char c = 'c';
+    char f = 'f';
+    s += c | f;
+    int x = c & f;
+    int y = 2 & c;
+    int z = c ^ 5;
+    String result = s + x + y + z;
+    System.out.println("Expected " + "e103982102, found " + result);
+    try
+    {
+      Map<String, Object> jsonObj = (Map<String, Object>) JSONUtils
+              .parse("{\"a\":3}");
+      System.out.println(jsonObj);
+    } catch (ParseException e)
+    {
+      e.printStackTrace();
+    }
   }
 
   /**
+   * Dialog message truncation
+   */
+  void doTest5()
+  {
+    JFrame main = new JFrame();
+    main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+    main.setContentPane(new JPanel());
+    main.setMinimumSize(new Dimension(100,  100));
+    main.pack();
+    main.setVisible(true);
+    
+    /*
+     * like AlignFrame.delete_actionPerformed()
+     * except here it works fine, also in JS
+     */
+    JvOptionPane dialog = JvOptionPane.newOptionDialog(null);
+    Object[] options = new Object[] { "OK", "Cancel" };
+       String msg = "<html>Deleting all sequences will close the alignment window.<br>Confirm deletion or Cancel.";
+       dialog.showDialog(msg, "", JvOptionPane.DEFAULT_OPTION, JvOptionPane.PLAIN_MESSAGE, null, options, options[0]);
+
+  }
+
+  void doTest4() 
+  {
+         Float fl = new Float(0f);
+         System.out.println(fl.isInfinite());
+         System.out.println(fl.isNaN());
+
+         System.out.println(Float.isInfinite(0f));
+         System.out.println(Float.isFinite(0f));
+         System.out.println(Float.isNaN(0f));
+  }
+
+  void doTest3() 
+  {
+           System.out.println("Mungo".toLowerCase(Locale.getDefault()));
+           System.out.println("Mungo".toLowerCase(Locale.ENGLISH));
+    System.out.println("Mungo".toLowerCase(Locale.ROOT));
+  }
+  
+  void doTest2() {
+         Map<File, String> map = new HashMap<>();
+         File f1 = new File("/var/folders/y/xyz");
+         File f2 = new File("/var/folders/y/xyz");
+         map.put(f1,  "hello world");
+         System.out.println("f1.equals(f2) = " + f1.equals(f2));
+         System.out.println("f1 hashCode = " + f1.hashCode());
+         System.out.println("f2 hashCode = " + f2.hashCode());
+         System.out.println(map.get(f2));
+  }
+  
+  /**
    * Put some content in a JFrame and show it
    */
-  void doTest()
+  void doTest1()
   {
+         System.out.println("ab;c;".split(";"));
+    new DecimalFormat("###,###").format((Integer) 1);
     JFrame main = new JFrame();
-    main.setContentPane(getVisualPaneContent());
+    main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+    JMenu menu = new JMenu("testing");
+    menu.setHorizontalAlignment(SwingConstants.RIGHT);
+    main.setContentPane(getVisualPaneContent(menu));
+    main.setJMenuBar(new JMenuBar());
+    main.getJMenuBar().add(menu);
     main.pack();
     main.setVisible(true);
   }
@@ -40,8 +144,9 @@ public class JalviewJSTest extends JPanel
   /**
    * Builds a cut-down 'Preferences Visual tab' for a minimal test of layout
    * problems
+ * @param menu 
    */
-  Container getVisualPaneContent()
+  Container getVisualPaneContent(JMenu menu)
   {
     JPanel panel = new JPanel();
     panel.setPreferredSize(new Dimension(400, 500));
@@ -56,33 +161,36 @@ public class JalviewJSTest extends JPanel
      * bug 21/08/18:
      * - checkbox label and text extend outside the enclosing panel in JS
      */
-    JCheckBox cb1 = new JCheckBox();
     Font font = new Font("Verdana", Font.PLAIN, 11);
-    cb1.setFont(font);
-    cb1.setText("Maximise Window");
-    cb1.setHorizontalTextPosition(SwingConstants.LEADING);
-    cb1.setHorizontalAlignment(SwingConstants.LEFT);
 
-    /*
-     * bug 21/08/18:
-     * - label should precede checkbox, but it doesn't
-     */
-    JCheckBox cb2 = new JCheckBox("Open Overview");
-    cb2.setFont(font);
-    cb2.setHorizontalTextPosition(SwingConstants.LEADING);
-    // uncommenting this line gives 'leading text', but
-    // also results in label and checkbox outside container
-    //cb2.setHorizontalAlignment(SwingConstants.RIGHT);
+    JLabel l1 = new JLabel(getImage("test2.png"));
+    l1.setText("trailing right");
+    l1.setHorizontalTextPosition(SwingConstants.TRAILING);
+    l1.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
+    l1.setHorizontalAlignment(SwingConstants.RIGHT);
+
+    JLabel l2 = new JLabel(getImage("test2.png"));
+    l2.setText("leading left");
+    l2.setFont(font);
+    l2.setHorizontalTextPosition(SwingConstants.LEADING);
+    l2.setHorizontalAlignment(SwingConstants.LEFT);
+
+    JButton b1 = new JButton("right left");
+    b1.setIcon(getImage("test2.png"));
+    b1.setFont(font);
+    b1.setHorizontalTextPosition(SwingConstants.RIGHT);
+    b1.setHorizontalAlignment(SwingConstants.LEFT);
+
+    firstColumn.add(l1);
+    firstColumn.add(l2);
+    firstColumn.add(b1);
 
     
-//    ImageIcon icon =  new ImageIcon(getClass()
-//            .getClassLoader()
-//            .getResource("test2.png"), "test");
-//    
-    JCheckBox cb3 = new JCheckBox("leading,left-to-right");
+    JCheckBox cb3 = new JCheckBox("leading,left-to-right,rt");
     cb3.setFont(font);
     cb3.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
     cb3.setHorizontalTextPosition(SwingConstants.LEADING);
+    cb3.setHorizontalAlignment(SwingConstants.TRAILING);
 
     JCheckBox cb4 = new JCheckBox("leading,right-to-left");
     cb4.setFont(font);
@@ -94,11 +202,6 @@ public class JalviewJSTest extends JPanel
     cb5.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
     cb5.setHorizontalTextPosition(SwingConstants.TRAILING);
 
-    JCheckBox cb6 = new JCheckBox("trailing,right-to-left");
-    cb6.setFont(font);
-    cb6.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
-    cb6.setHorizontalTextPosition(SwingConstants.TRAILING);
-
     JRadioButton rb1 = new JRadioButton("trailing,right-to-left");
     rb1.setFont(font);
     rb1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
@@ -116,22 +219,80 @@ public class JalviewJSTest extends JPanel
 
 
     
-    firstColumn.add(cb1);
-    firstColumn.add(cb2);
     firstColumn.add(cb3);
     firstColumn.add(cb4);
     firstColumn.add(cb5);
-    firstColumn.add(cb6);
     firstColumn.add(rb1);
     firstColumn.add(rb2);
     firstColumn.add(rb3);
-    firstColumn.setBounds(20, 20, 200, 500);
+    firstColumn.setBounds(200, 20, 200, 500);
+
+    JCheckBoxMenuItem cb3m = new JCheckBoxMenuItem("leading,left-to-right");
+    cb3m.setFont(font);
+    cb3m.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
+    cb3m.setHorizontalTextPosition(SwingConstants.LEADING);
 
+    JCheckBoxMenuItem cb4m = new JCheckBoxMenuItem("leading,right-to-left");
+    cb4m.setFont(font);
+    cb4m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
+    cb4m.setHorizontalTextPosition(SwingConstants.LEADING);
+
+    JCheckBoxMenuItem cb5m = new JCheckBoxMenuItem("trailing,left-to-right");
+    cb5m.setFont(font);
+    cb5m.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
+    cb5m.setHorizontalTextPosition(SwingConstants.TRAILING);
+
+    JCheckBoxMenuItem cb6m = new JCheckBoxMenuItem("trailing,right-to-left");
+    cb6m.setFont(font);
+    cb6m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
+    cb6m.setHorizontalTextPosition(SwingConstants.TRAILING);
+
+    JRadioButtonMenuItem rb1m = new JRadioButtonMenuItem("trailing,right-to-left");
+    rb1m.setFont(font);
+    rb1m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
+    rb1m.setHorizontalTextPosition(SwingConstants.TRAILING);
+
+    JRadioButtonMenuItem rb2m = new JRadioButtonMenuItem("right,left-to-right");
+    rb2m.setFont(font);
+    rb2m.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
+    rb2m.setHorizontalTextPosition(SwingConstants.RIGHT);
+
+    JRadioButtonMenuItem rb3m = new JRadioButtonMenuItem("right,right-to-left");
+    rb3m.setFont(font);
+    rb3m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
+    rb3m.setHorizontalTextPosition(SwingConstants.RIGHT);
+
+    JMenu m1 = new JMenu("left");
+    JMenu m2 = new JMenu("right");
+    menu.add(m1);
+    menu.add(m2);
+    m1.add(cb3m);
+    m2.add(cb4m);
+    m1.add(cb5m);
+    m2.add(cb6m);
+    m2.add(rb1m);
+    m1.add(rb2m);
+    m2.add(rb3m);
+    
     JPanel theTab = new JPanel();
+    
     theTab.setLayout(null);
     theTab.add(firstColumn);
     panel.add(theTab);
 
     return panel;
   }
+
+private ImageIcon getImage(String name) {
+    ImageIcon icon = new ImageIcon(getClass().getResource(name));
+
+    while(icon.getImageLoadStatus() == MediaTracker.LOADING)
+    {
+      try {
+       Thread.sleep(10);
+      } catch (InterruptedException e) {
+      }
+    }
+    return icon;
+}
 }