+ assertSame(match.getSequence(), al.getSequenceAt(1));
+ assertEquals(match.getStart(), 8);
+ assertEquals(match.getEnd(), 8);
+ }
+
+ /**
+ * Test that find does not report hidden positions
+ */
+ @Test(groups = "Functional")
+ public void testFind_withHiddenColumns()
+ {
+ /*
+ * 0 5 9
+ * ABCD--EF-GHI
+ * A--BCDefHI
+ * --bcdEFH
+ * aa---aMMMMMaaa
+ */
+
+ /*
+ * hide 2-4 (CD- -BC bcd ---)
+ */
+ HiddenColumns hc = new HiddenColumns();
+ hc.hideColumns(2, 4);
+ al.setHiddenColumns(hc);
+
+ /*
+ * find all search for D should ignore hidden positions in seq1 and seq3,
+ * find the visible D in seq2
+ */
+ Finder f = new Finder(al, null);
+ f.setFindAll(true);
+ f.find("D");
+ SearchResultsI searchResults = f.getSearchResults();
+ assertEquals(searchResults.getSize(), 1);
+ SearchResultMatchI match = searchResults.getResults().get(0);
+ assertSame(match.getSequence(), al.getSequenceAt(1));
+ assertEquals(match.getStart(), 4);
+ assertEquals(match.getEnd(), 4);
+
+ /*
+ * hide columns 2-5:
+ * find all 'aaa' should find end of seq4 only
+ */
+ hc.hideColumns(2, 5);
+ f = new Finder(al, null);
+ f.find("aaa");
+ searchResults = f.getSearchResults();
+ assertEquals(searchResults.getSize(), 1);
+ match = searchResults.getResults().get(0);
+ assertSame(match.getSequence(), al.getSequenceAt(3));
+ assertEquals(match.getStart(), 9);
+ assertEquals(match.getEnd(), 11);
+
+ /*
+ * find all 'BE' should not match across hidden columns in seq1
+ */
+ f.find("BE");
+ assertTrue(f.getSearchResults().isEmpty());
+
+ /*
+ * boundary case: hide columns at end of alignment
+ * search for H should match seq3/6 only
+ */
+ hc.revealAllHiddenColumns(new ColumnSelection());
+ hc.hideColumns(8, 13);
+ f = new Finder(al, null);
+ f.find("H");
+ searchResults = f.getSearchResults();
+ assertEquals(searchResults.getSize(), 1);
+ match = searchResults.getResults().get(0);
+ assertSame(match.getSequence(), al.getSequenceAt(2));
+ assertEquals(match.getStart(), 6);
+ assertEquals(match.getEnd(), 6);