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