Clover icon

Coverage Report

  1. Project Clover database Thu Aug 13 2020 12:04:21 BST
  2. Package jalview.gui

File ColourMenuHelperTest.java

 

Code metrics

22
102
5
1
263
179
16
0.16
20.4
5
3.2

Classes

Class Line # Actions
ColourMenuHelperTest 32 102 16
1.0100%
 

Contributing tests

This file is covered by 4 tests. .

Source view

1    package jalview.gui;
2   
3    import static org.testng.Assert.assertEquals;
4    import static org.testng.Assert.assertFalse;
5    import static org.testng.Assert.assertSame;
6    import static org.testng.Assert.assertTrue;
7   
8    import jalview.bin.Cache;
9    import jalview.datamodel.Alignment;
10    import jalview.datamodel.AlignmentI;
11    import jalview.datamodel.Sequence;
12    import jalview.datamodel.SequenceI;
13    import jalview.schemes.ClustalxColourScheme;
14    import jalview.schemes.ColourSchemeI;
15    import jalview.schemes.ColourSchemes;
16    import jalview.schemes.NucleotideColourScheme;
17    import jalview.schemes.PIDColourScheme;
18    import jalview.schemes.ResidueColourScheme;
19    import jalview.util.MessageManager;
20   
21    import java.util.Enumeration;
22    import java.util.Iterator;
23   
24    import javax.swing.AbstractButton;
25    import javax.swing.ButtonGroup;
26    import javax.swing.JMenu;
27    import javax.swing.JMenuItem;
28   
29    import org.testng.annotations.BeforeClass;
30    import org.testng.annotations.Test;
31   
 
32    public class ColourMenuHelperTest
33    {
34    /**
35    * Use a properties file with a user-defined colour scheme
36    */
 
37  1 toggle @BeforeClass(alwaysRun = true)
38    public void setUp()
39    {
40  1 Cache.loadProperties("test/jalview/io/testProps.jvprops");
41    }
42   
 
43  1 toggle @Test(groups = "Functional")
44    public void testAddMenuItems_peptide()
45    {
46  1 SequenceI s1 = new Sequence("s1", "KFRQSILM");
47  1 AlignmentI al = new Alignment(new SequenceI[] { s1 });
48  1 JMenu menu = new JMenu();
49   
50  1 ButtonGroup bg = ColourMenuHelper.addMenuItems(menu, null, al, false);
51  1 Enumeration<AbstractButton> bgElements = bg.getElements();
52   
53    /*
54    * first entry is 'No Colour' option
55    */
56  1 JMenuItem item = menu.getItem(0);
57  1 assertEquals(item.getName(), ResidueColourScheme.NONE);
58  1 assertEquals(item.getText(), MessageManager.getString("label.none"));
59  1 AbstractButton bgItem = bgElements.nextElement();
60  1 assertSame(bgItem, item);
61   
62    /*
63    * check that each registered colour scheme is in the menu,
64    * and in the button group;
65    * nucleotide-only schemes should be disabled menu items
66    */
67  1 Iterator<ColourSchemeI> colourSchemes = ColourSchemes.getInstance()
68    .getColourSchemes().iterator();
69  1 final int items = menu.getItemCount();
70  16 for (int i = 1; i < items; i++)
71    {
72  15 item = menu.getItem(i);
73  15 bgItem = bgElements.nextElement();
74  15 assertSame(bgItem, item);
75  15 ColourSchemeI cs = colourSchemes.next();
76  15 String name = cs.getSchemeName();
77  15 assertEquals(item.getName(), name);
78  15 boolean enabled = item.isEnabled();
79  15 assertEquals(enabled, cs.isApplicableTo(al));
80  15 if (cs instanceof NucleotideColourScheme) // nucleotide only
81    {
82  1 assertFalse(enabled);
83    }
84  15 if (cs instanceof ClustalxColourScheme) // peptide only
85    {
86  1 assertTrue(enabled);
87    }
88  15 if (cs instanceof PIDColourScheme) // nucleotide or peptide
89    {
90  1 assertTrue(enabled);
91    }
92   
93    /*
94    * check i18n for display name
95    */
96  15 String label = MessageManager.getStringOrReturn("label.colourScheme_",
97    name);
98  15 assertEquals(item.getText(), label);
99    }
100   
101    /*
102    * check nothing left over
103    */
104  1 assertFalse(colourSchemes.hasNext());
105  1 assertFalse(bgElements.hasMoreElements());
106    }
107   
 
108  1 toggle @Test(groups = "Functional")
109    public void testAddMenuItems_nucleotide()
110    {
111  1 SequenceI s1 = new Sequence("s1", "GAATAATCCATAACAG");
112  1 AlignmentI al = new Alignment(new SequenceI[] { s1 });
113  1 JMenu menu = new JMenu();
114  1 AlignFrame af = new AlignFrame(al, 500, 500);
115   
116    /*
117    * menu for SequenceGroup excludes 'User Defined Colour'
118    */
119  1 PopupMenu popup = new PopupMenu(af.alignPanel, s1, null);
120  1 ButtonGroup bg = ColourMenuHelper.addMenuItems(menu, popup, al, false);
121  1 Enumeration<AbstractButton> bgElements = bg.getElements();
122   
123    /*
124    * first entry is 'No Colour' option
125    */
126  1 JMenuItem item = menu.getItem(0);
127  1 assertEquals(item.getName(), ResidueColourScheme.NONE);
128  1 assertEquals(item.getText(), MessageManager.getString("label.none"));
129  1 AbstractButton bgItem = bgElements.nextElement();
130  1 assertSame(bgItem, item);
131   
132    /*
133    * check that each registered colour scheme is in the menu,
134    * and in the button group;
135    * nucleotide-only schemes should be disabled menu items
136    */
137  1 Iterator<ColourSchemeI> colourSchemes = ColourSchemes.getInstance()
138    .getColourSchemes().iterator();
139  1 final int items = menu.getItemCount();
140  16 for (int i = 1; i < items; i++)
141    {
142  15 item = menu.getItem(i);
143  15 bgItem = bgElements.nextElement();
144  15 assertSame(bgItem, item);
145  15 ColourSchemeI cs = colourSchemes.next();
146  15 String name = cs.getSchemeName();
147  15 assertEquals(item.getName(), name);
148  15 boolean enabled = item.isEnabled();
149  15 assertEquals(enabled, cs.isApplicableTo(al));
150  15 if (cs instanceof NucleotideColourScheme) // nucleotide only
151    {
152  1 assertTrue(enabled);
153    }
154  15 if (cs instanceof ClustalxColourScheme) // peptide only
155    {
156  1 assertFalse(enabled);
157    }
158  15 if (cs instanceof PIDColourScheme) // nucleotide or peptide
159    {
160  1 assertTrue(enabled);
161    }
162   
163    /*
164    * check i18n for display name
165    */
166  15 String label = MessageManager.getStringOrReturn("label.colourScheme_",
167    name);
168  15 assertEquals(item.getText(), label);
169    }
170   
171    /*
172    * check nothing left over
173    */
174  1 assertFalse(colourSchemes.hasNext());
175  1 assertFalse(bgElements.hasMoreElements());
176    }
177   
178    /**
179    * 'Simple only' mode constructs colour menu for structures
180    * <ul>
181    * <li>no 'No Colour' option</li>
182    * <li>only simple colour schemes (colour per residue)</li>
183    * </ul>
184    */
 
185  1 toggle @Test(groups = "Functional")
186    public void testAddMenuItems_simpleOnly()
187    {
188  1 SequenceI s1 = new Sequence("s1", "KFRQSILM");
189  1 AlignmentI al = new Alignment(new SequenceI[] { s1 });
190  1 JMenu menu = new JMenu();
191   
192  1 ButtonGroup bg = ColourMenuHelper.addMenuItems(menu, null, al, true);
193  1 Enumeration<AbstractButton> bgElements = bg.getElements();
194   
195    /*
196    * check that only 'simple' colour schemes are included
197    */
198  1 Iterator<ColourSchemeI> colourSchemes = ColourSchemes.getInstance()
199    .getColourSchemes().iterator();
200  1 int i = 0;
201  16 while (colourSchemes.hasNext())
202    {
203  15 ColourSchemeI cs = colourSchemes.next();
204  15 if (!cs.isSimple())
205    {
206  6 continue;
207    }
208  9 JMenuItem item = menu.getItem(i++);
209  9 AbstractButton bgItem = bgElements.nextElement();
210  9 assertSame(bgItem, item);
211    }
212   
213    /*
214    * check nothing left over
215    */
216  1 assertEquals(i, menu.getItemCount());
217  1 assertFalse(bgElements.hasMoreElements());
218    }
219   
220    /*
221    * menu for AlignFrame includes 'User Defined Colour'
222    */
 
223  1 toggle @Test(groups = "Functional")
224    public void testAddMenuItems_forAlignFrame()
225    {
226  1 SequenceI s1 = new Sequence("s1", "KFRQSILM");
227  1 AlignmentI al = new Alignment(new SequenceI[] { s1 });
228  1 AlignFrame af = new AlignFrame(al, 500, 500);
229  1 JMenu menu = new JMenu();
230   
231  1 ButtonGroup bg = ColourMenuHelper.addMenuItems(menu, af, al, false);
232  1 Enumeration<AbstractButton> bgElements = bg.getElements();
233   
234    /*
235    * check that each registered colour scheme is in the menu,
236    * (skipping over No Colour which is the first menu item),
237    * and in the button group
238    */
239  1 bgElements.nextElement(); // skip No Colour
240  1 Iterator<ColourSchemeI> colourSchemes = ColourSchemes.getInstance()
241    .getColourSchemes().iterator();
242  1 final int items = menu.getItemCount();
243  16 for (int i = 1; i < items - 1; i++)
244    {
245  15 JMenuItem item = menu.getItem(i);
246  15 AbstractButton bgItem = bgElements.nextElement();
247  15 assertSame(bgItem, item);
248  15 ColourSchemeI cs = colourSchemes.next();
249  15 assertEquals(item.getName(), cs.getSchemeName());
250    }
251   
252    /*
253    * check menu also has User Defined Colour
254    */
255  1 assertFalse(colourSchemes.hasNext());
256  1 JMenuItem item = menu.getItem(items - 1);
257  1 AbstractButton bgItem = bgElements.nextElement();
258  1 assertSame(bgItem, item);
259  1 assertEquals(item.getName(), ResidueColourScheme.USER_DEFINED_MENU);
260  1 assertEquals(item.getText(),
261    MessageManager.getString("action.user_defined"));
262    }
263    }