X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fanalysis%2FAlignmentAnnotationUtilsTest.java;h=c3191e83c4d76d97d4439c881ec7ab84b0183524;hb=8f118c154e74caaef6bec19acd0466904ac424d4;hp=1da1939f8d2edbf3c00990f43e43da8a6fc79a3d;hpb=195c41c18f6a059b334d063312cd15de6a937ea5;p=jalview.git
diff --git a/test/jalview/analysis/AlignmentAnnotationUtilsTest.java b/test/jalview/analysis/AlignmentAnnotationUtilsTest.java
index 1da1939..c3191e8 100644
--- a/test/jalview/analysis/AlignmentAnnotationUtilsTest.java
+++ b/test/jalview/analysis/AlignmentAnnotationUtilsTest.java
@@ -1,10 +1,32 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.analysis;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
import jalview.datamodel.SequenceI;
import jalview.io.AppletFormatAdapter;
@@ -16,8 +38,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
public class AlignmentAnnotationUtilsTest
{
@@ -36,21 +58,21 @@ public class AlignmentAnnotationUtilsTest
"TIETHKEEELTA-" + EOL;
// @formatter:on
- private static final int SEQ_ANN_COUNT = 10;
+ private static final int SEQ_ANN_COUNT = 12;
private AlignmentI alignment;
/**
* Test method that converts a (possibly null) array to a list.
*/
- @Test
+ @Test(groups = { "Functional" })
public void testAsList()
{
// null array
Collection c1 = AlignmentAnnotationUtils
.asList(null);
assertTrue(c1.isEmpty());
-
+
// empty array
AlignmentAnnotation[] anns = new AlignmentAnnotation[0];
c1 = AlignmentAnnotationUtils.asList(anns);
@@ -111,16 +133,26 @@ public class AlignmentAnnotationUtilsTest
return result;
}
- @Before
+ /**
+ * Load the test alignment and generate annotations on it
+ *
+ * @throws IOException
+ */
+ @BeforeMethod(alwaysRun = true)
public void setUp() throws IOException
{
alignment = new jalview.io.FormatAdapter().readFile(TEST_DATA,
AppletFormatAdapter.PASTE, "FASTA");
-
+
AlignmentAnnotation[] anns = new AlignmentAnnotation[SEQ_ANN_COUNT];
for (int i = 0; i < anns.length; i++)
{
- anns[i] = new AlignmentAnnotation("Label" + i, null, 0d);
+ /*
+ * Use the constructor for a positional annotation (with an Annotation
+ * array)
+ */
+ anns[i] = new AlignmentAnnotation("Label" + i, "Desc " + i,
+ new Annotation[] {});
anns[i].setCalcId("CalcId" + i);
anns[i].visible = true;
alignment.addAnnotation(anns[i]);
@@ -130,14 +162,14 @@ public class AlignmentAnnotationUtilsTest
/**
* Test a mixture of show/hidden annotations in/outside selection group.
*/
- @Test
+ @Test(groups = { "Functional" })
public void testGetShownHiddenTypes_forSelectionGroup()
{
Map>> shownTypes = new HashMap>>();
Map>> hiddenTypes = new HashMap>>();
AlignmentAnnotation[] anns = alignment.getAlignmentAnnotation();
SequenceI[] seqs = alignment.getSequencesArray();
-
+
/*
* Configure annotation properties for test
*/
@@ -147,7 +179,7 @@ public class AlignmentAnnotationUtilsTest
anns[4].visible = false;
anns[7].sequenceRef = seqs[1];
anns[7].visible = true;
-
+
/*
* in selection group, hidden:
*/
@@ -171,12 +203,11 @@ public class AlignmentAnnotationUtilsTest
anns[6].visible = true;
anns[9].sequenceRef = seqs[3]; // CalcId9/Label9
anns[9].visible = true;
-
+
List selected = selectSequences(0, 3);
AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes, hiddenTypes,
- AlignmentAnnotationUtils.asList(anns),
- selected);
-
+ AlignmentAnnotationUtils.asList(anns), selected);
+
// check results; note CalcId9/Label9 is both hidden and shown (for
// different sequences) so should be in both
// shown: CalcId6/Label6 and CalcId9/Label9
@@ -187,7 +218,7 @@ public class AlignmentAnnotationUtilsTest
assertEquals(1, shownTypes.get("CalcId9").size());
assertEquals(1, shownTypes.get("CalcId9").get(0).size());
assertEquals("Label9", shownTypes.get("CalcId9").get(0).get(0));
-
+
// hidden: CalcId2/Label2, CalcId2/Label3, CalcId3/Label2, CalcId9/Label9
assertEquals(3, hiddenTypes.size());
assertEquals(2, hiddenTypes.get("CalcId2").size());
@@ -201,7 +232,7 @@ public class AlignmentAnnotationUtilsTest
assertEquals(1, hiddenTypes.get("CalcId9").size());
assertEquals(1, hiddenTypes.get("CalcId9").get(0).size());
assertEquals("Label9", hiddenTypes.get("CalcId9").get(0).get(0));
-
+
consoleDebug(shownTypes, hiddenTypes);
}
@@ -209,23 +240,24 @@ public class AlignmentAnnotationUtilsTest
* Test case where there are 'grouped' annotations, visible and hidden, within
* and without the selection group.
*/
- @Test
+ @Test(groups = { "Functional" })
public void testGetShownHiddenTypes_withGraphGroups()
{
+ final int GROUP_3 = 3;
final int GROUP_4 = 4;
final int GROUP_5 = 5;
final int GROUP_6 = 6;
-
+
Map>> shownTypes = new HashMap>>();
Map>> hiddenTypes = new HashMap>>();
AlignmentAnnotation[] anns = alignment.getAlignmentAnnotation();
SequenceI[] seqs = alignment.getSequencesArray();
-
+
/*
- * Configure annotation properties for test
+ * Annotations for selection group and graph group
+ *
+ * Hidden annotations Label2, Label3, in (hidden) group 5
*/
- // annotations for selection group and graph group
- // hidden annotations Label2, Label3, in (hidden) group 5
anns[2].sequenceRef = seqs[3];
anns[2].visible = false;
anns[2].graph = AlignmentAnnotation.LINE_GRAPH;
@@ -236,7 +268,20 @@ public class AlignmentAnnotationUtilsTest
anns[3].graphGroup = GROUP_5;
// need to ensure annotations have the same calcId as well
anns[3].setCalcId("CalcId2");
-
+ // annotations for a different hidden group generating the same group label
+ anns[10].sequenceRef = seqs[0];
+ anns[10].visible = false;
+ anns[10].graph = AlignmentAnnotation.LINE_GRAPH;
+ anns[10].graphGroup = GROUP_3;
+ anns[10].label = "Label3";
+ anns[10].setCalcId("CalcId2");
+ anns[11].sequenceRef = seqs[3];
+ anns[11].visible = false;
+ anns[11].graph = AlignmentAnnotation.LINE_GRAPH;
+ anns[11].graphGroup = GROUP_3;
+ anns[11].label = "Label2";
+ anns[11].setCalcId("CalcId2");
+
// annotations Label1 (hidden), Label5 (visible) in group 6 (visible)
anns[1].sequenceRef = seqs[3];
// being in a visible group should take precedence over this visibility
@@ -248,9 +293,29 @@ public class AlignmentAnnotationUtilsTest
anns[5].graph = AlignmentAnnotation.LINE_GRAPH;
anns[5].graphGroup = GROUP_6;
anns[5].setCalcId("CalcId1");
-
- // annotations outwith selection group - should be ignored
- // hidden grouped annotations
+ /*
+ * Annotations 0 and 4 are visible, for a different CalcId and graph group.
+ * They produce the same label as annotations 1 and 5, which should not be
+ * duplicated in the results. This case corresponds to (e.g.) many
+ * occurrences of an IUPred Short/Long annotation group, one per sequence.
+ */
+ anns[4].sequenceRef = seqs[0];
+ anns[4].visible = false;
+ anns[4].graph = AlignmentAnnotation.LINE_GRAPH;
+ anns[4].graphGroup = GROUP_4;
+ anns[4].label = "Label1";
+ anns[4].setCalcId("CalcId1");
+ anns[0].sequenceRef = seqs[0];
+ anns[0].visible = true;
+ anns[0].graph = AlignmentAnnotation.LINE_GRAPH;
+ anns[0].graphGroup = GROUP_4;
+ anns[0].label = "Label5";
+ anns[0].setCalcId("CalcId1");
+
+ /*
+ * Annotations outwith selection group - should be ignored.
+ */
+ // Hidden grouped annotations
anns[6].sequenceRef = seqs[2];
anns[6].visible = false;
anns[6].graph = AlignmentAnnotation.LINE_GRAPH;
@@ -259,6 +324,7 @@ public class AlignmentAnnotationUtilsTest
anns[8].visible = false;
anns[8].graph = AlignmentAnnotation.LINE_GRAPH;
anns[8].graphGroup = GROUP_4;
+
// visible grouped annotations Label7, Label9
anns[7].sequenceRef = seqs[2];
anns[7].visible = true;
@@ -268,21 +334,28 @@ public class AlignmentAnnotationUtilsTest
anns[9].visible = true;
anns[9].graph = AlignmentAnnotation.LINE_GRAPH;
anns[9].graphGroup = GROUP_4;
-
+
+ /*
+ * Generate annotations[] arrays to match aligned columns
+ */
+ // adjustForAlignment(anns);
+
List selected = selectSequences(0, 3);
AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes, hiddenTypes,
- AlignmentAnnotationUtils.asList(anns),
- selected);
-
+ AlignmentAnnotationUtils.asList(anns), selected);
+
consoleDebug(shownTypes, hiddenTypes);
-
- // CalcId1 / Label1, Label5 (only) should be 'shown', as a compound type
+
+ // CalcId1 / Label1, Label5 (only) should be 'shown', once, as a compound
+ // type
+ assertEquals(1, shownTypes.size());
assertEquals(1, shownTypes.get("CalcId1").size());
assertEquals(2, shownTypes.get("CalcId1").get(0).size());
assertEquals("Label1", shownTypes.get("CalcId1").get(0).get(0));
assertEquals("Label5", shownTypes.get("CalcId1").get(0).get(1));
-
+
// CalcId2 / Label2, Label3 (only) should be 'hidden'
+ assertEquals(1, hiddenTypes.size());
assertEquals(1, hiddenTypes.get("CalcId2").size());
assertEquals(2, hiddenTypes.get("CalcId2").get(0).size());
assertEquals("Label2", hiddenTypes.get("CalcId2").get(0).get(0));
@@ -292,7 +365,7 @@ public class AlignmentAnnotationUtilsTest
/**
* Test method that determines visible graph groups.
*/
- @Test
+ @Test(groups = { "Functional" })
public void testGetVisibleGraphGroups()
{
AlignmentAnnotation[] anns = alignment.getAlignmentAnnotation();
@@ -302,7 +375,7 @@ public class AlignmentAnnotationUtilsTest
anns[0].graph = AlignmentAnnotation.BAR_GRAPH;
anns[0].graphGroup = 1;
anns[0].visible = true;
-
+
/*
* a line graph group is included as long as one of its members is visible
*/
@@ -312,19 +385,19 @@ public class AlignmentAnnotationUtilsTest
anns[2].graph = AlignmentAnnotation.LINE_GRAPH;
anns[2].graphGroup = 5;
anns[2].visible = true;
-
+
/*
* a line graph group with no visible rows is not included
*/
anns[3].graph = AlignmentAnnotation.LINE_GRAPH;
anns[3].graphGroup = 3;
anns[3].visible = false;
-
+
// a visible line graph with no graph group is not included
anns[4].graph = AlignmentAnnotation.LINE_GRAPH;
anns[4].graphGroup = -1;
anns[4].visible = true;
-
+
BitSet result = AlignmentAnnotationUtils
.getVisibleLineGraphGroups(AlignmentAnnotationUtils
.asList(anns));
@@ -339,7 +412,7 @@ public class AlignmentAnnotationUtilsTest
* Test for case where no sequence is selected. Shouldn't normally arise but
* check it handles it gracefully.
*/
- @Test
+ @Test(groups = { "Functional" })
public void testGetShownHiddenTypes_noSequenceSelected()
{
Map>> shownTypes = new HashMap>>();