JAL-3438 spotless for 2.11.2.0
[jalview.git] / test / jalview / analysis / GroupingTest.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.analysis;
22
23 import jalview.datamodel.Alignment;
24 import jalview.datamodel.AlignmentI;
25 import jalview.datamodel.ColumnSelection;
26 import jalview.datamodel.Sequence;
27 import jalview.datamodel.SequenceGroup;
28 import jalview.datamodel.SequenceI;
29 import jalview.gui.JvOptionPane;
30
31 import java.util.Arrays;
32
33 import org.testng.AssertJUnit;
34 import org.testng.annotations.BeforeClass;
35 import org.testng.annotations.Test;
36
37 public class GroupingTest
38 {
39   @BeforeClass(alwaysRun = true)
40   public void setUpJvOptionPane()
41   {
42     JvOptionPane.setInteractiveMode(false);
43     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
44   }
45
46   Sequence s1 = new Sequence("s1", "AAAADDDDEEEE");
47
48   Sequence s2 = new Sequence("s2", "AAAADDDDEEEE");
49
50   Sequence s3 = new Sequence("s3", "ACAADDEDEEEE");
51
52   Sequence s4 = new Sequence("s4", "AAAADDEDEEEE");
53
54   Sequence s5 = new Sequence("s5", "AAAADDEDTTEE");
55
56   SequenceGroup sg_12 = new SequenceGroup(
57           Arrays.asList(new SequenceI[]
58           { s1, s2 }), "Group1", null, false, false, false, 0, 5);
59
60   SequenceGroup sg_345 = new SequenceGroup(
61           Arrays.asList(new SequenceI[]
62           { s3, s4, s5 }), "Group2", null, false, false, false, 0, 5);
63
64   AlignmentI alignment = new Alignment(
65           new SequenceI[]
66           { s1, s2, s3, s4, s5 });
67
68   /*
69    * test for the case where column selections are not added in
70    * left to right order
71    */
72   int[] positions = new int[] { 7, 9, 1 };
73
74   @Test(groups = { "Functional" })
75   public void testMakeGroupsWithBoth()
76   {
77     String[] str = new String[alignment.getHeight()];
78     int seq = 0;
79     for (SequenceI s : alignment.getSequences())
80     {
81       StringBuilder sb = new StringBuilder();
82       for (int p : positions)
83       {
84         sb.append(s.getCharAt(p));
85       }
86       str[seq++] = sb.toString();
87     }
88     SequenceGroup[] seqgroupsString = Grouping.makeGroupsFrom(
89             alignment.getSequencesArray(), str,
90             Arrays.asList(new SequenceGroup[]
91             { sg_12, sg_345 }));
92
93     ColumnSelection cs = new ColumnSelection();
94     for (int p : positions)
95     {
96       cs.addElement(p);
97     }
98     SequenceGroup[] seqgroupsColSel = Grouping.makeGroupsFromCols(
99             alignment.getSequencesArray(), cs,
100             Arrays.asList(new SequenceGroup[]
101             { sg_12, sg_345 }));
102     AssertJUnit.assertEquals(seqgroupsString.length,
103             seqgroupsColSel.length);
104     for (int p = 0; p < seqgroupsString.length; p++)
105     {
106       AssertJUnit.assertEquals(seqgroupsString[p].getName(),
107               seqgroupsColSel[p].getName());
108       AssertJUnit.assertArrayEquals(
109               seqgroupsString[p].getSequencesInOrder(alignment),
110               seqgroupsColSel[p].getSequencesInOrder(alignment));
111       if (seqgroupsString[p].getSequences().contains(s2))
112       {
113         AssertJUnit.assertTrue(seqgroupsString[p].getSize() == 2);
114       }
115     }
116   }
117
118 }