Merge branch 'patch/JAL-4036_uniprot_fts_legacy_endpoint' into develop
[jalview.git] / utils / test / JalviewJSTest.java
1 package test;
2 import jalview.gui.JvOptionPane;
3 import jalview.util.JSONUtils;
4
5 import java.awt.BorderLayout;
6 import java.awt.ComponentOrientation;
7 import java.awt.Container;
8 import java.awt.Dimension;
9 import java.awt.Font;
10 import java.awt.GridLayout;
11 import java.awt.MediaTracker;
12 import java.io.File;
13 import java.text.DecimalFormat;
14 import java.util.HashMap;
15 import java.util.Locale;
16 import java.util.Map;
17
18 import javax.swing.ImageIcon;
19 import javax.swing.JButton;
20 import javax.swing.JCheckBox;
21 import javax.swing.JCheckBoxMenuItem;
22 import javax.swing.JFrame;
23 import javax.swing.JLabel;
24 import javax.swing.JMenu;
25 import javax.swing.JMenuBar;
26 import javax.swing.JPanel;
27 import javax.swing.JRadioButton;
28 import javax.swing.JRadioButtonMenuItem;
29 import javax.swing.SwingConstants;
30 import javax.swing.WindowConstants;
31 import javax.swing.border.TitledBorder;
32
33 import org.json.simple.parser.ParseException;
34
35 /**
36  * A class with a main method entry point for ad hoc tests of JalviewJS
37  * behaviour. The J2S transpiler should generate an html entry point for this
38  * class, allowing comparison between Java and Javascript execution.
39  */
40 public class JalviewJSTest extends JPanel
41 {
42   public static void main(String[] args)
43   {
44     new JalviewJSTest().doTest6();
45   }
46   
47   void doTest6()
48   {
49     /*
50      * check for transpiler fix associated with JSONParser yylex.java use of charAt()
51      * instead of codePointAt(); moved here from PDBFTSRestClient
52      */
53
54     String s = "e";
55     char c = 'c';
56     char f = 'f';
57     s += c | f;
58     int x = c & f;
59     int y = 2 & c;
60     int z = c ^ 5;
61     String result = s + x + y + z;
62     System.out.println("Expected " + "e103982102, found " + result);
63     try
64     {
65       Map<String, Object> jsonObj = (Map<String, Object>) JSONUtils
66               .parse("{\"a\":3}");
67       System.out.println(jsonObj);
68     } catch (ParseException e)
69     {
70       e.printStackTrace();
71     }
72   }
73
74   /**
75    * Dialog message truncation
76    */
77   void doTest5()
78   {
79     JFrame main = new JFrame();
80     main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
81     main.setContentPane(new JPanel());
82     main.setMinimumSize(new Dimension(100,  100));
83     main.pack();
84     main.setVisible(true);
85     
86     /*
87      * like AlignFrame.delete_actionPerformed()
88      * except here it works fine, also in JS
89      */
90     JvOptionPane dialog = JvOptionPane.newOptionDialog(null);
91     Object[] options = new Object[] { "OK", "Cancel" };
92         String msg = "<html>Deleting all sequences will close the alignment window.<br>Confirm deletion or Cancel.";
93         dialog.showDialog(msg, "", JvOptionPane.DEFAULT_OPTION, JvOptionPane.PLAIN_MESSAGE, null, options, options[0]);
94
95   }
96
97   void doTest4() 
98   {
99           Float fl = new Float(0f);
100           System.out.println(fl.isInfinite());
101           System.out.println(fl.isNaN());
102
103           System.out.println(Float.isInfinite(0f));
104           System.out.println(Float.isFinite(0f));
105           System.out.println(Float.isNaN(0f));
106   }
107
108   void doTest3() 
109   {
110             System.out.println("Mungo".toLowerCase(Locale.getDefault()));
111             System.out.println("Mungo".toLowerCase(Locale.ENGLISH));
112     System.out.println("Mungo".toLowerCase(Locale.ROOT));
113   }
114   
115   void doTest2() {
116           Map<File, String> map = new HashMap<>();
117           File f1 = new File("/var/folders/y/xyz");
118           File f2 = new File("/var/folders/y/xyz");
119           map.put(f1,  "hello world");
120           System.out.println("f1.equals(f2) = " + f1.equals(f2));
121           System.out.println("f1 hashCode = " + f1.hashCode());
122           System.out.println("f2 hashCode = " + f2.hashCode());
123           System.out.println(map.get(f2));
124   }
125   
126   /**
127    * Put some content in a JFrame and show it
128    */
129   void doTest1()
130   {
131           System.out.println("ab;c;".split(";"));
132     new DecimalFormat("###,###").format((Integer) 1);
133     JFrame main = new JFrame();
134     main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
135     JMenu menu = new JMenu("testing");
136     menu.setHorizontalAlignment(SwingConstants.RIGHT);
137     main.setContentPane(getVisualPaneContent(menu));
138     main.setJMenuBar(new JMenuBar());
139     main.getJMenuBar().add(menu);
140     main.pack();
141     main.setVisible(true);
142   }
143
144   /**
145    * Builds a cut-down 'Preferences Visual tab' for a minimal test of layout
146    * problems
147  * @param menu 
148    */
149   Container getVisualPaneContent(JMenu menu)
150   {
151     JPanel panel = new JPanel();
152     panel.setPreferredSize(new Dimension(400, 500));
153     panel.setOpaque(true);
154     panel.setLayout(new BorderLayout());
155
156     JPanel firstColumn = new JPanel();
157     firstColumn.setLayout(new GridLayout(10, 1));
158     firstColumn.setBorder(new TitledBorder("column 1"));
159
160     /*
161      * bug 21/08/18:
162      * - checkbox label and text extend outside the enclosing panel in JS
163      */
164     Font font = new Font("Verdana", Font.PLAIN, 11);
165
166     JLabel l1 = new JLabel(getImage("test2.png"));
167     l1.setText("trailing right");
168     l1.setHorizontalTextPosition(SwingConstants.TRAILING);
169     l1.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
170     l1.setHorizontalAlignment(SwingConstants.RIGHT);
171
172     JLabel l2 = new JLabel(getImage("test2.png"));
173     l2.setText("leading left");
174     l2.setFont(font);
175     l2.setHorizontalTextPosition(SwingConstants.LEADING);
176     l2.setHorizontalAlignment(SwingConstants.LEFT);
177
178     JButton b1 = new JButton("right left");
179     b1.setIcon(getImage("test2.png"));
180     b1.setFont(font);
181     b1.setHorizontalTextPosition(SwingConstants.RIGHT);
182     b1.setHorizontalAlignment(SwingConstants.LEFT);
183
184     firstColumn.add(l1);
185     firstColumn.add(l2);
186     firstColumn.add(b1);
187
188     
189     JCheckBox cb3 = new JCheckBox("leading,left-to-right,rt");
190     cb3.setFont(font);
191     cb3.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
192     cb3.setHorizontalTextPosition(SwingConstants.LEADING);
193     cb3.setHorizontalAlignment(SwingConstants.TRAILING);
194
195     JCheckBox cb4 = new JCheckBox("leading,right-to-left");
196     cb4.setFont(font);
197     cb4.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
198     cb4.setHorizontalTextPosition(SwingConstants.LEADING);
199
200     JCheckBox cb5 = new JCheckBox("trailing,left-to-right");
201     cb5.setFont(font);
202     cb5.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
203     cb5.setHorizontalTextPosition(SwingConstants.TRAILING);
204
205     JRadioButton rb1 = new JRadioButton("trailing,right-to-left");
206     rb1.setFont(font);
207     rb1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
208     rb1.setHorizontalTextPosition(SwingConstants.TRAILING);
209
210     JRadioButton rb2 = new JRadioButton("right,left-to-right");
211     rb2.setFont(font);
212     rb2.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
213     rb2.setHorizontalTextPosition(SwingConstants.RIGHT);
214
215     JRadioButton rb3 = new JRadioButton("right,right-to-left");
216     rb3.setFont(font);
217     rb3.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
218     rb3.setHorizontalTextPosition(SwingConstants.RIGHT);
219
220
221     
222     firstColumn.add(cb3);
223     firstColumn.add(cb4);
224     firstColumn.add(cb5);
225     firstColumn.add(rb1);
226     firstColumn.add(rb2);
227     firstColumn.add(rb3);
228     firstColumn.setBounds(200, 20, 200, 500);
229
230     JCheckBoxMenuItem cb3m = new JCheckBoxMenuItem("leading,left-to-right");
231     cb3m.setFont(font);
232     cb3m.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
233     cb3m.setHorizontalTextPosition(SwingConstants.LEADING);
234
235     JCheckBoxMenuItem cb4m = new JCheckBoxMenuItem("leading,right-to-left");
236     cb4m.setFont(font);
237     cb4m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
238     cb4m.setHorizontalTextPosition(SwingConstants.LEADING);
239
240     JCheckBoxMenuItem cb5m = new JCheckBoxMenuItem("trailing,left-to-right");
241     cb5m.setFont(font);
242     cb5m.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
243     cb5m.setHorizontalTextPosition(SwingConstants.TRAILING);
244
245     JCheckBoxMenuItem cb6m = new JCheckBoxMenuItem("trailing,right-to-left");
246     cb6m.setFont(font);
247     cb6m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
248     cb6m.setHorizontalTextPosition(SwingConstants.TRAILING);
249
250     JRadioButtonMenuItem rb1m = new JRadioButtonMenuItem("trailing,right-to-left");
251     rb1m.setFont(font);
252     rb1m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
253     rb1m.setHorizontalTextPosition(SwingConstants.TRAILING);
254
255     JRadioButtonMenuItem rb2m = new JRadioButtonMenuItem("right,left-to-right");
256     rb2m.setFont(font);
257     rb2m.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
258     rb2m.setHorizontalTextPosition(SwingConstants.RIGHT);
259
260     JRadioButtonMenuItem rb3m = new JRadioButtonMenuItem("right,right-to-left");
261     rb3m.setFont(font);
262     rb3m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
263     rb3m.setHorizontalTextPosition(SwingConstants.RIGHT);
264
265     JMenu m1 = new JMenu("left");
266     JMenu m2 = new JMenu("right");
267     menu.add(m1);
268     menu.add(m2);
269     m1.add(cb3m);
270     m2.add(cb4m);
271     m1.add(cb5m);
272     m2.add(cb6m);
273     m2.add(rb1m);
274     m1.add(rb2m);
275     m2.add(rb3m);
276     
277     JPanel theTab = new JPanel();
278     
279     theTab.setLayout(null);
280     theTab.add(firstColumn);
281     panel.add(theTab);
282
283     return panel;
284   }
285
286 private ImageIcon getImage(String name) {
287     ImageIcon icon = new ImageIcon(getClass().getResource(name));
288
289     while(icon.getImageLoadStatus() == MediaTracker.LOADING)
290     {
291       try {
292         Thread.sleep(10);
293       } catch (InterruptedException e) {
294       }
295     }
296     return icon;
297 }
298 }