X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=utils%2Ftest%2FJalviewJSTest.java;fp=utils%2Ftest%2FJalviewJSTest.java;h=3e08024f3aef6281f072dcf18b46ed6bd81a7a18;hp=0000000000000000000000000000000000000000;hb=e95c5f895775891d55d9f23d5da64f8ce6bd07bb;hpb=74f21ca6ca8fa17d53708e457d191e15904f8310 diff --git a/utils/test/JalviewJSTest.java b/utils/test/JalviewJSTest.java new file mode 100644 index 0000000..3e08024 --- /dev/null +++ b/utils/test/JalviewJSTest.java @@ -0,0 +1,298 @@ +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. + */ +public class JalviewJSTest extends JPanel +{ + public static void main(String[] args) + { + 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 jsonObj = (Map) 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 = "Deleting all sequences will close the alignment window.
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 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 doTest1() + { + System.out.println("ab;c;".split(";")); + new DecimalFormat("###,###").format((Integer) 1); + JFrame main = new JFrame(); + 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); + } + + /** + * Builds a cut-down 'Preferences Visual tab' for a minimal test of layout + * problems + * @param menu + */ + Container getVisualPaneContent(JMenu menu) + { + JPanel panel = new JPanel(); + panel.setPreferredSize(new Dimension(400, 500)); + panel.setOpaque(true); + panel.setLayout(new BorderLayout()); + + JPanel firstColumn = new JPanel(); + firstColumn.setLayout(new GridLayout(10, 1)); + firstColumn.setBorder(new TitledBorder("column 1")); + + /* + * bug 21/08/18: + * - checkbox label and text extend outside the enclosing panel in JS + */ + Font font = new Font("Verdana", Font.PLAIN, 11); + + 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); + + + 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); + cb4.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); + cb4.setHorizontalTextPosition(SwingConstants.LEADING); + + JCheckBox cb5 = new JCheckBox("trailing,left-to-right"); + cb5.setFont(font); + cb5.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); + cb5.setHorizontalTextPosition(SwingConstants.TRAILING); + + JRadioButton rb1 = new JRadioButton("trailing,right-to-left"); + rb1.setFont(font); + rb1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); + rb1.setHorizontalTextPosition(SwingConstants.TRAILING); + + JRadioButton rb2 = new JRadioButton("right,left-to-right"); + rb2.setFont(font); + rb2.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); + rb2.setHorizontalTextPosition(SwingConstants.RIGHT); + + JRadioButton rb3 = new JRadioButton("right,right-to-left"); + rb3.setFont(font); + rb3.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); + rb3.setHorizontalTextPosition(SwingConstants.RIGHT); + + + + firstColumn.add(cb3); + firstColumn.add(cb4); + firstColumn.add(cb5); + firstColumn.add(rb1); + firstColumn.add(rb2); + firstColumn.add(rb3); + 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; +} +}