+
+ /**
+ * Verify that setting the selection group has the side-effect of setting the
+ * context on the group, unless it already has one, but does not change
+ * whether the group is defined or not.
+ */
+ @Test(groups = { "Functional" })
+ public void testSetSelectionGroup()
+ {
+ AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
+ "examples/uniref50.fa", DataSourceType.FILE);
+ AlignViewport av = af.getViewport();
+ SequenceGroup sg1 = new SequenceGroup();
+ SequenceGroup sg2 = new SequenceGroup();
+ SequenceGroup sg3 = new SequenceGroup();
+
+ av.setSelectionGroup(sg1);
+ assertSame(sg1.getContext(), av.getAlignment()); // context set
+ assertFalse(sg1.isDefined()); // group not defined
+
+ sg2.setContext(sg1, false);
+ av.setSelectionGroup(sg2);
+ assertFalse(sg2.isDefined()); // unchanged
+ assertSame(sg2.getContext(), sg1); // unchanged
+
+ // create a defined group
+ sg3.setContext(av.getAlignment(), true);
+ av.setSelectionGroup(sg3);
+ assertTrue(sg3.isDefined()); // unchanged
+ }
+
+ /**
+ * Verify that setting/clearing SHOW_OCCUPANCY preference adds or omits
+ * occupancy row from viewport
+ */
+ @Test(groups = { "Functional" })
+ public void testShowOrDontShowOccupancy()
+ {
+ // disable occupancy
+ jalview.bin.Cache.setProperty("SHOW_OCCUPANCY",
+ Boolean.FALSE.toString());
+ AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
+ "examples/uniref50.fa", DataSourceType.FILE);
+ AlignViewport av = af.getViewport();
+ Assert.assertNull(av.getAlignmentGapAnnotation(),
+ "Preference did not disable occupancy row.");
+ int c = 0;
+ for (AlignmentAnnotation aa : av.getAlignment().findAnnotations(null,
+ null, "Occupancy"))
+ {
+ c++;
+ }
+ Assert.assertEquals(c, 0, "Expected zero occupancy rows.");
+
+ // enable occupancy
+ jalview.bin.Cache.setProperty("SHOW_OCCUPANCY",
+ Boolean.TRUE.toString());
+ af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
+ DataSourceType.FILE);
+ av = af.getViewport();
+ Assert.assertNotNull(av.getAlignmentGapAnnotation(),
+ "Preference did not enable occupancy row.");
+ c = 0;
+ for (AlignmentAnnotation aa : av.getAlignment().findAnnotations(null,
+ null, av.getAlignmentGapAnnotation().label))
+ {
+ c++;
+ }
+ ;
+ Assert.assertEquals(c, 1, "Expected to find one occupancy row.");
+ }
+
+ @Test(groups = { "Functional" })
+ public void testGetConsensusSeq()
+ {
+ /*
+ * A-C
+ * A-C
+ * A-D
+ * --D
+ * consensus expected to be A-C
+ */
+ String fasta = ">s1\nA-C\n>s2\nA-C\n>s3\nA-D\n>s4\n--D\n";
+ AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(fasta,
+ DataSourceType.PASTE);
+ AlignViewport testme = af.getViewport();
+ waitForCalculations(testme);
+ SequenceI cons = testme.getConsensusSeq();
+ assertEquals("A-C", cons.getSequenceAsString());
+ }
+
+ @Test(groups = { "Functional" })
+ public void testHideRevealSequences()
+ {
+ ViewportRanges ranges = testee.getRanges();
+ assertEquals(3, al.getHeight());
+ assertEquals(0, ranges.getStartSeq());
+ assertEquals(2, ranges.getEndSeq());
+
+ /*
+ * hide first sequence
+ */
+ testee.hideSequence(new SequenceI[] { al.getSequenceAt(0) });
+ assertEquals(2, al.getHeight());
+ assertEquals(0, ranges.getStartSeq());
+ assertEquals(1, ranges.getEndSeq());
+
+ /*
+ * reveal hidden sequences above the first
+ */
+ testee.showSequence(0);
+ assertEquals(3, al.getHeight());
+ assertEquals(0, ranges.getStartSeq());
+ assertEquals(2, ranges.getEndSeq());
+
+ /*
+ * hide first and third sequences
+ */
+ testee.hideSequence(
+ new SequenceI[]
+ { al.getSequenceAt(0), al.getSequenceAt(2) });
+ assertEquals(1, al.getHeight());
+ assertEquals(0, ranges.getStartSeq());
+ assertEquals(0, ranges.getEndSeq());
+
+ /*
+ * reveal all hidden sequences
+ */
+ testee.showAllHiddenSeqs();
+ assertEquals(3, al.getHeight());
+ assertEquals(0, ranges.getStartSeq());
+ assertEquals(2, ranges.getEndSeq());
+ }
+
+ @Test(groups = { "Functional" })
+ public void testGetSelectionAsNewSequences_withContactMatrices()
+ {
+ SequenceI seq = new Sequence("seq", "ACADA");
+ ContactMatrixI cmat = new SeqDistanceContactMatrix(5);
+ seq.addContactList(cmat);
+ Alignment al = new Alignment(new SequenceI[] { seq.deriveSequence() });
+ al.addAnnotation(al.getSequenceAt(0).getAnnotation()[0]);
+ AlignFrame af = new AlignFrame(al, 500, 500);
+
+ SequenceI selseqs[] = af.getViewport().getSelectionAsNewSequence();
+ assertNotNull(selseqs[0].getAnnotation());
+ assertNotNull(selseqs[0].getAnnotation()[0]);
+ assertEquals(cmat,
+ selseqs[0].getContactMatrixFor(selseqs[0].getAnnotation()[0]));
+
+ assertNotNull(
+ selseqs[0].getContactListFor(selseqs[0].getAnnotation()[0], 2));
+
+ // now select everything and test again
+ af.selectAllSequenceMenuItem_actionPerformed(null);
+ selseqs = af.getViewport().getSelectionAsNewSequence();
+ assertNotNull(selseqs[0].getAnnotation());
+ assertNotNull(selseqs[0].getAnnotation()[0]);
+ assertEquals(cmat,
+ selseqs[0].getContactMatrixFor(selseqs[0].getAnnotation()[0]));
+ assertNotNull(
+ selseqs[0].getContactListFor(selseqs[0].getAnnotation()[0], 2));
+ }