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;
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;
21 import java.util.Enumeration;
22 import java.util.Iterator;
24 import javax.swing.AbstractButton;
25 import javax.swing.ButtonGroup;
26 import javax.swing.JMenu;
27 import javax.swing.JMenuItem;
29 import org.testng.annotations.BeforeClass;
30 import org.testng.annotations.Test;
32 public class ColourMenuHelperTest
35 * Use a properties file with a user-defined colour scheme
37 @BeforeClass(alwaysRun = true)
40 Cache.loadProperties("test/jalview/io/testProps.jvprops");
43 @Test(groups = "Functional")
44 public void testAddMenuItems_peptide()
46 SequenceI s1 = new Sequence("s1", "KFRQSILM");
47 AlignmentI al = new Alignment(new SequenceI[] { s1 });
48 JMenu menu = new JMenu();
50 ButtonGroup bg = ColourMenuHelper.addMenuItems(menu, null, al, false);
51 Enumeration<AbstractButton> bgElements = bg.getElements();
54 * first entry is 'No Colour' option
56 JMenuItem item = menu.getItem(0);
57 assertEquals(item.getName(), ResidueColourScheme.NONE);
58 assertEquals(item.getText(), MessageManager.getString("label.none"));
59 AbstractButton bgItem = bgElements.nextElement();
60 assertSame(bgItem, item);
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
67 Iterator<ColourSchemeI> colourSchemes = ColourSchemes.getInstance()
68 .getColourSchemes().iterator();
69 final int items = menu.getItemCount();
70 for (int i = 1; i < items; i++)
72 item = menu.getItem(i);
73 bgItem = bgElements.nextElement();
74 assertSame(bgItem, item);
75 ColourSchemeI cs = colourSchemes.next();
76 String name = cs.getSchemeName();
77 assertEquals(item.getName(), name);
78 boolean enabled = item.isEnabled();
79 assertEquals(enabled, cs.isApplicableTo(al));
80 if (cs instanceof NucleotideColourScheme) // nucleotide only
84 if (cs instanceof ClustalxColourScheme) // peptide only
88 if (cs instanceof PIDColourScheme) // nucleotide or peptide
94 * check i18n for display name
96 String label = MessageManager.getStringOrReturn("label.colourScheme_",
98 assertEquals(item.getText(), label);
102 * check nothing left over
104 assertFalse(colourSchemes.hasNext());
105 assertFalse(bgElements.hasMoreElements());
108 @Test(groups = "Functional")
109 public void testAddMenuItems_nucleotide()
111 SequenceI s1 = new Sequence("s1", "GAATAATCCATAACAG");
112 AlignmentI al = new Alignment(new SequenceI[] { s1 });
113 JMenu menu = new JMenu();
114 AlignFrame af = new AlignFrame(al, 500, 500);
117 * menu for SequenceGroup excludes 'User Defined Colour'
119 PopupMenu popup = new PopupMenu(af.alignPanel, s1, null);
120 ButtonGroup bg = ColourMenuHelper.addMenuItems(menu, popup, al, false);
121 Enumeration<AbstractButton> bgElements = bg.getElements();
124 * first entry is 'No Colour' option
126 JMenuItem item = menu.getItem(0);
127 assertEquals(item.getName(), ResidueColourScheme.NONE);
128 assertEquals(item.getText(), MessageManager.getString("label.none"));
129 AbstractButton bgItem = bgElements.nextElement();
130 assertSame(bgItem, item);
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
137 Iterator<ColourSchemeI> colourSchemes = ColourSchemes.getInstance()
138 .getColourSchemes().iterator();
139 final int items = menu.getItemCount();
140 for (int i = 1; i < items; i++)
142 item = menu.getItem(i);
143 bgItem = bgElements.nextElement();
144 assertSame(bgItem, item);
145 ColourSchemeI cs = colourSchemes.next();
146 String name = cs.getSchemeName();
147 assertEquals(item.getName(), name);
148 boolean enabled = item.isEnabled();
149 assertEquals(enabled, cs.isApplicableTo(al));
150 if (cs instanceof NucleotideColourScheme) // nucleotide only
154 if (cs instanceof ClustalxColourScheme) // peptide only
156 assertFalse(enabled);
158 if (cs instanceof PIDColourScheme) // nucleotide or peptide
164 * check i18n for display name
166 String label = MessageManager.getStringOrReturn("label.colourScheme_",
168 assertEquals(item.getText(), label);
172 * check nothing left over
174 assertFalse(colourSchemes.hasNext());
175 assertFalse(bgElements.hasMoreElements());
179 * 'Simple only' mode constructs colour menu for structures
181 * <li>no 'No Colour' option</li>
182 * <li>only simple colour schemes (colour per residue)</li>
185 @Test(groups = "Functional")
186 public void testAddMenuItems_simpleOnly()
188 SequenceI s1 = new Sequence("s1", "KFRQSILM");
189 AlignmentI al = new Alignment(new SequenceI[] { s1 });
190 JMenu menu = new JMenu();
192 ButtonGroup bg = ColourMenuHelper.addMenuItems(menu, null, al, true);
193 Enumeration<AbstractButton> bgElements = bg.getElements();
196 * check that only 'simple' colour schemes are included
198 Iterator<ColourSchemeI> colourSchemes = ColourSchemes.getInstance()
199 .getColourSchemes().iterator();
201 while (colourSchemes.hasNext())
203 ColourSchemeI cs = colourSchemes.next();
208 JMenuItem item = menu.getItem(i++);
209 AbstractButton bgItem = bgElements.nextElement();
210 assertSame(bgItem, item);
214 * check nothing left over
216 assertEquals(i, menu.getItemCount());
217 assertFalse(bgElements.hasMoreElements());
221 * menu for AlignFrame includes 'User Defined Colour'
223 @Test(groups = "Functional")
224 public void testAddMenuItems_forAlignFrame()
226 SequenceI s1 = new Sequence("s1", "KFRQSILM");
227 AlignmentI al = new Alignment(new SequenceI[] { s1 });
228 AlignFrame af = new AlignFrame(al, 500, 500);
229 JMenu menu = new JMenu();
231 ButtonGroup bg = ColourMenuHelper.addMenuItems(menu, af, al, false);
232 Enumeration<AbstractButton> bgElements = bg.getElements();
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
239 bgElements.nextElement(); // skip No Colour
240 Iterator<ColourSchemeI> colourSchemes = ColourSchemes.getInstance()
241 .getColourSchemes().iterator();
242 final int items = menu.getItemCount();
243 for (int i = 1; i < items - 1; i++)
245 JMenuItem item = menu.getItem(i);
246 AbstractButton bgItem = bgElements.nextElement();
247 assertSame(bgItem, item);
248 ColourSchemeI cs = colourSchemes.next();
249 assertEquals(item.getName(), cs.getSchemeName());
253 * check menu also has User Defined Colour
255 assertFalse(colourSchemes.hasNext());
256 JMenuItem item = menu.getItem(items - 1);
257 AbstractButton bgItem = bgElements.nextElement();
258 assertSame(bgItem, item);
259 assertEquals(item.getName(), ResidueColourScheme.USER_DEFINED_MENU);
260 assertEquals(item.getText(),
261 MessageManager.getString("action.user_defined"));