+
+ public static Annotation newAnnotation(String ann)
+ {
+ float val = 0f;
+ try
+ {
+ val = Float.parseFloat(ann);
+ } catch (NumberFormatException q)
+ {
+ }
+ ;
+ return new Annotation(ann, ann, '\0', val);
+ }
+
+ @Test(groups = { "Functional" })
+ public void testIsQuantitative()
+ {
+ AlignmentAnnotation ann = null;
+
+ ann = new AlignmentAnnotation("an", "some an", null);
+ Assert
+ .assertFalse(ann.isQuantitative(),
+ "Empty annotation set should not be quantitative.");
+
+ ann = new AlignmentAnnotation("an", "some an",
+ new Annotation[] {
+ newAnnotation("4"), newAnnotation("1"), newAnnotation("1"),
+ newAnnotation("0.1"), newAnnotation("0.3") });
+ Assert
+ .assertTrue(ann.isQuantitative(),
+ "All numbers annotation set should be quantitative.");
+
+ ann = new AlignmentAnnotation("an", "some an",
+ new Annotation[] {
+ newAnnotation("E"), newAnnotation("E"), newAnnotation("E"),
+ newAnnotation("E"), newAnnotation("E") });
+ Assert
+ .assertFalse(ann.isQuantitative(),
+ "All 'E' annotation set should not be quantitative.");
+
+ ann = new AlignmentAnnotation("an", "some an",
+ new Annotation[] {
+ newAnnotation("E"), newAnnotation("1"), newAnnotation("2"),
+ newAnnotation("3"), newAnnotation("E") });
+ Assert
+ .assertTrue(ann.isQuantitative(),
+ "Mixed 'E' annotation set should be quantitative.");
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation()
+ {
+ HiddenColumns h = new HiddenColumns();
+ Annotation[] anns = new Annotation[] {
+ null, null, new Annotation(1), new Annotation(2), new Annotation(3),
+ null, null, new Annotation(4), new Annotation(5), new Annotation(6),
+ new Annotation(7), new Annotation(8) };
+ AlignmentAnnotation ann = new AlignmentAnnotation("an", "some an", anns);
+
+ // null annotations
+ AlignmentAnnotation emptyann = new AlignmentAnnotation("an", "some ann",
+ null);
+ emptyann.makeVisibleAnnotation(h);
+ assertNull(emptyann.annotations);
+
+ emptyann.makeVisibleAnnotation(3, 4, h);
+ assertNull(emptyann.annotations);
+
+ // without bounds, does everything
+ ann.makeVisibleAnnotation(h);
+ assertEquals(12, ann.annotations.length);
+ assertNull(ann.annotations[0]);
+ assertNull(ann.annotations[1]);
+ assertEquals(1.0f, ann.annotations[2].value);
+ assertEquals(2.0f, ann.annotations[3].value);
+ assertEquals(3.0f, ann.annotations[4].value);
+ assertNull(ann.annotations[5]);
+ assertNull(ann.annotations[6]);
+ assertEquals(4.0f, ann.annotations[7].value);
+ assertEquals(5.0f, ann.annotations[8].value);
+ assertEquals(6.0f, ann.annotations[9].value);
+ assertEquals(7.0f, ann.annotations[10].value);
+ assertEquals(8.0f, ann.annotations[11].value);
+
+ // without hidden cols, just truncates
+ ann.makeVisibleAnnotation(3, 5, h);
+ assertEquals(3, ann.annotations.length);
+ assertEquals(2.0f, ann.annotations[0].value);
+ assertEquals(3.0f, ann.annotations[1].value);
+ assertNull(ann.annotations[2]);
+
+ anns = new Annotation[] {
+ null, null, new Annotation(1), new Annotation(2), new Annotation(3),
+ null, null, new Annotation(4), new Annotation(5), new Annotation(6),
+ new Annotation(7), new Annotation(8) };
+ ann = new AlignmentAnnotation("an", "some an", anns);
+ h.hideColumns(4, 7);
+ ann.makeVisibleAnnotation(1, 9, h);
+ assertEquals(5, ann.annotations.length);
+ assertNull(ann.annotations[0]);
+ assertEquals(1.0f, ann.annotations[1].value);
+ assertEquals(2.0f, ann.annotations[2].value);
+ assertEquals(5.0f, ann.annotations[3].value);
+ assertEquals(6.0f, ann.annotations[4].value);
+
+ anns = new Annotation[] {
+ null, null, new Annotation(1), new Annotation(2), new Annotation(3),
+ null, null, new Annotation(4), new Annotation(5), new Annotation(6),
+ new Annotation(7), new Annotation(8) };
+ ann = new AlignmentAnnotation("an", "some an", anns);
+ h.hideColumns(1, 2);
+ ann.makeVisibleAnnotation(1, 9, h);
+ assertEquals(3, ann.annotations.length);
+ assertEquals(2.0f, ann.annotations[0].value);
+ assertEquals(5.0f, ann.annotations[1].value);
+ assertEquals(6.0f, ann.annotations[2].value);
+
+ anns = new Annotation[] {
+ null, null, new Annotation(1), new Annotation(2), new Annotation(3),
+ null, null, new Annotation(4), new Annotation(5), new Annotation(6),
+ new Annotation(7), new Annotation(8), new Annotation(9),
+ new Annotation(10), new Annotation(11), new Annotation(12),
+ new Annotation(13), new Annotation(14), new Annotation(15) };
+ ann = new AlignmentAnnotation("an", "some an", anns);
+ h = new HiddenColumns();
+ h.hideColumns(5, 18);
+ h.hideColumns(20, 21);
+ ann.makeVisibleAnnotation(1, 21, h);
+ assertEquals(5, ann.annotations.length);
+ assertEquals(1.0f, ann.annotations[1].value);
+ assertEquals(2.0f, ann.annotations[2].value);
+ assertEquals(3.0f, ann.annotations[3].value);
+ assertNull(ann.annotations[0]);
+ assertNull(ann.annotations[4]);
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_NullAnnotationsAndNoColsHidden()
+ {
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", null);
+ HiddenColumns hc = new HiddenColumns();
+ ann.makeVisibleAnnotation(hc);
+ assertThat(ann.annotations, is(nullValue()));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_NullAnnotationsAndTrim()
+ {
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", null);
+ HiddenColumns hc = new HiddenColumns();
+ ann.makeVisibleAnnotation(3, 5, hc);
+ assertThat(ann.annotations, is(nullValue()));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_NoColsHidden()
+ {
+ Annotation[] annots = new Annotation[] {
+ EMPTY_ANNOTATION, EMPTY_ANNOTATION, new Annotation(1),
+ new Annotation(2), new Annotation(3), EMPTY_ANNOTATION,
+ EMPTY_ANNOTATION, new Annotation(4), new Annotation(5),
+ EMPTY_ANNOTATION, new Annotation(6), new Annotation(7),
+ new Annotation(8) };
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ ann.makeVisibleAnnotation(hc);
+ assertThat(ann.annotations, matchesAnnotations(annots));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_HideCols()
+ {
+ Annotation[] annots = new Annotation[] {
+ new Annotation(0), new Annotation(1), new Annotation(2),
+ new Annotation(3), new Annotation(4), new Annotation(5),
+ new Annotation(6), new Annotation(7), new Annotation(8) };
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ hc.hideColumns(2, 6);
+ ann.makeVisibleAnnotation(hc);
+ var expected = new Annotation[] {
+ new Annotation(0), new Annotation(1), new Annotation(7),
+ new Annotation(8) };
+ assertThat(ann.annotations, matchesAnnotations(expected));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_ExplicitFullWidthAndHideCols()
+ {
+ Annotation[] annots = new Annotation[] {
+ new Annotation(0), new Annotation(1), new Annotation(2),
+ new Annotation(3), new Annotation(4), new Annotation(5),
+ new Annotation(6), new Annotation(7), new Annotation(8),
+ new Annotation(9), new Annotation(10), new Annotation(11) };
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ hc.hideColumns(4, 7);
+ ann.makeVisibleAnnotation(0, 11, hc);
+ assertThat(ann.annotations,
+ matchesAnnotations(new Annotation(0), new Annotation(1),
+ new Annotation(2), new Annotation(3), new Annotation(8),
+ new Annotation(9), new Annotation(10), new Annotation(11)));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_ExplicitFullWidthAndHideCols2()
+ {
+ Annotation[] annots = new Annotation[] {
+ new Annotation(0), new Annotation(1), new Annotation(2),
+ new Annotation(3), new Annotation(4), new Annotation(5),
+ new Annotation(6), new Annotation(7), new Annotation(8), };
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ hc.hideColumns(4, 7);
+ ann.makeVisibleAnnotation(0, 8, hc);
+ assertThat(ann.annotations,
+ matchesAnnotations(new Annotation(0), new Annotation(1),
+ new Annotation(2), new Annotation(3), new Annotation(8)));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_HideColsWithEmptyAnnots()
+ {
+ Annotation[] annots = new Annotation[] {
+ EMPTY_ANNOTATION, EMPTY_ANNOTATION, new Annotation(1),
+ new Annotation(2), new Annotation(3), EMPTY_ANNOTATION,
+ EMPTY_ANNOTATION, new Annotation(4), new Annotation(5),
+ EMPTY_ANNOTATION, new Annotation(6), new Annotation(7),
+ new Annotation(8) };
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ hc.hideColumns(1, 3);
+ hc.hideColumns(8, 9);
+ ann.makeVisibleAnnotation(hc);
+ var expected = new Annotation[] {
+ EMPTY_ANNOTATION, new Annotation(3), EMPTY_ANNOTATION, EMPTY_ANNOTATION,
+ new Annotation(4), new Annotation(6), new Annotation(7),
+ new Annotation(8) };
+ assertThat(ann.annotations, matchesAnnotations(expected));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_HideColsWithNullAnnots()
+ {
+ Annotation[] annots = new Annotation[] {
+ null, null, new Annotation(2), null, new Annotation(4),
+ new Annotation(5), null, null };
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ hc.hideColumns(2, 4);
+ ann.makeVisibleAnnotation(hc);
+ var expected = new Annotation[] {
+ null, null, new Annotation(5), null, null };
+ assertThat(ann.annotations, matchesAnnotations(expected));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_Truncate()
+ {
+ Annotation[] annots = new Annotation[] {
+ new Annotation(0), new Annotation(1), new Annotation(2),
+ new Annotation(3), new Annotation(4), new Annotation(5),
+ new Annotation(6), new Annotation(7) };
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ ann.makeVisibleAnnotation(3, 6, new HiddenColumns());
+ assertThat(ann.annotations, matchesAnnotations(new Annotation(3),
+ new Annotation(4), new Annotation(5), new Annotation(6)));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_TruncateAndHideColumns()
+ {
+ Annotation[] annots = new Annotation[] {
+ new Annotation(0), new Annotation(1), new Annotation(2),
+ new Annotation(3), new Annotation(4), new Annotation(5),
+ new Annotation(6), new Annotation(7), new Annotation(8),
+ new Annotation(9), new Annotation(10), new Annotation(11) };
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ hc.hideColumns(4, 7);
+ ann.makeVisibleAnnotation(1, 9, hc);
+ assertThat(ann.annotations,
+ matchesAnnotations(new Annotation(1), new Annotation(2),
+ new Annotation(3), new Annotation(8), new Annotation(9)));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_TruncateNegativeStart()
+ {
+ Annotation[] annots = annotsRange(8);
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ ann.makeVisibleAnnotation(-5, 1, hc);
+ assertThat(ann.annotations,
+ matchesAnnotations(new Annotation(0), new Annotation(1)));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_TruncateNegativeStartAndEnd()
+ {
+ Annotation[] annots = annotsRange(8);
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ ann.makeVisibleAnnotation(-5, -2, hc);
+ assertThat(ann.annotations, is(emptyArray()));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_TruncateEndBeyondSize()
+ {
+ Annotation[] annots = annotsRange(8);
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ ann.makeVisibleAnnotation(6, 10, hc);
+ assertThat(ann.annotations, matchesAnnotations(new Annotation(6), new Annotation(7)));
+ }
+
+ @Test(groups = "Functional")
+ public void testMakeVisibleAnnotation_TruncateStartAndEndBeyondSize()
+ {
+ Annotation[] annots = annotsRange(4);
+ AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots);
+ HiddenColumns hc = new HiddenColumns();
+ ann.makeVisibleAnnotation(6, 10, hc);
+ assertThat(ann.annotations, is(emptyArray()));
+ }
+
+ static Annotation[] annotsRange(int stop)
+ {
+ Annotation[] annotations = new Annotation[stop];
+ for (int i = 0; i < stop; i++)
+ annotations[i] = new Annotation(i);
+ return annotations;
+ }