import jalview.datamodel.PDBEntry.Type;
import jalview.gui.JvOptionPane;
import jalview.util.MapList;
+import jalview.ws.params.InvalidArgumentException;
import java.io.File;
import java.util.ArrayList;
public class SequenceTest
{
-
@BeforeClass(alwaysRun = true)
public void setUpJvOptionPane()
{
assertEquals(0, sq.findIndex(2));
}
+ @Test(groups = { "Functional" })
+ public void testFindPositions()
+ {
+ SequenceI sq = new Sequence("test/8-13", "-ABC---DE-F--");
+
+ /*
+ * invalid inputs
+ */
+ assertNull(sq.findPositions(6, 5));
+ assertNull(sq.findPositions(0, 5));
+ assertNull(sq.findPositions(-1, 5));
+
+ /*
+ * all gapped ranges
+ */
+ assertNull(sq.findPositions(1, 1)); // 1-based columns
+ assertNull(sq.findPositions(5, 5));
+ assertNull(sq.findPositions(5, 6));
+ assertNull(sq.findPositions(5, 7));
+
+ /*
+ * all ungapped ranges
+ */
+ assertEquals(new Range(8, 8), sq.findPositions(2, 2)); // A
+ assertEquals(new Range(8, 9), sq.findPositions(2, 3)); // AB
+ assertEquals(new Range(8, 10), sq.findPositions(2, 4)); // ABC
+ assertEquals(new Range(9, 10), sq.findPositions(3, 4)); // BC
+
+ /*
+ * gap to ungapped range
+ */
+ assertEquals(new Range(8, 10), sq.findPositions(1, 4)); // ABC
+ assertEquals(new Range(11, 12), sq.findPositions(6, 9)); // DE
+
+ /*
+ * ungapped to gapped range
+ */
+ assertEquals(new Range(10, 10), sq.findPositions(4, 5)); // C
+ assertEquals(new Range(9, 13), sq.findPositions(3, 11)); // BCDEF
+
+ /*
+ * ungapped to ungapped enclosing gaps
+ */
+ assertEquals(new Range(10, 11), sq.findPositions(4, 8)); // CD
+ assertEquals(new Range(8, 13), sq.findPositions(2, 11)); // ABCDEF
+
+ /*
+ * gapped to gapped enclosing ungapped
+ */
+ assertEquals(new Range(8, 10), sq.findPositions(1, 5)); // ABC
+ assertEquals(new Range(11, 12), sq.findPositions(5, 10)); // DE
+ assertEquals(new Range(8, 13), sq.findPositions(1, 13)); // the lot
+ assertEquals(new Range(8, 13), sq.findPositions(1, 99));
+ }
+
/**
* Tests for the method that returns a dataset sequence position (start..) for
* an aligned column position (base 0).
assertEquals("test:Pos13:Col10:startCol3:endCol10:tok0",
PA.getValue(sq, "cursor").toString());
sq.sequenceChanged();
- assertEquals(12, sq.findPosition(8));
- cursor = (SequenceCursor) PA.getValue(sq, "cursor");
+ assertEquals(12, sq.findPosition(8)); // E12
// sequenceChanged() invalidates cursor.lastResidueColumn
cursor = (SequenceCursor) PA.getValue(sq, "cursor");
assertEquals("test:Pos12:Col9:startCol3:endCol0:tok1",
assertEquals(6, sq.getEnd());
assertNull(PA.getValue(sq, "datasetSequence"));
+ sq = new Sequence("test", "ABCDE");
+ sq.deleteChars(0, 3);
+ assertEquals("DE", sq.getSequenceAsString());
+ assertEquals(4, sq.getStart());
+ assertEquals(5, sq.getEnd());
+ assertNull(PA.getValue(sq, "datasetSequence"));
+
/*
* delete at end
*/
assertEquals(1, sq.getStart());
assertEquals(4, sq.getEnd());
assertNull(PA.getValue(sq, "datasetSequence"));
+
+ /*
+ * delete more positions than there are
+ */
+ sq = new Sequence("test/8-11", "ABCD");
+ sq.deleteChars(0, 99);
+ assertEquals("", sq.getSequenceAsString());
+ assertEquals(12, sq.getStart()); // = findPosition(99) ?!?
+ assertEquals(11, sq.getEnd());
+
+ sq = new Sequence("test/8-11", "----");
+ sq.deleteChars(0, 99); // ArrayIndexOutOfBoundsException <= 2.10.2
+ assertEquals("", sq.getSequenceAsString());
+ assertEquals(8, sq.getStart());
+ assertEquals(11, sq.getEnd());
}
@Test(groups = { "Functional" })
assertNotNull(newDs);
assertNotSame(ds, newDs);
assertNotNull(sq.getDBRefs());
- assertEquals(1, sq.getDBRefs().length);
- assertNotSame(dbr1, sq.getDBRefs()[0]);
- assertEquals(dbr1, sq.getDBRefs()[0]);
+ assertEquals(1, sq.getDBRefs().size());
+ assertNotSame(dbr1, sq.getDBRefs().get(0));
+ assertEquals(dbr1, sq.getDBRefs().get(0));
/*
* internal delete with sequence features
assertEquals(4, sq.getEnd());
assertSame(ds, PA.getValue(sq, "datasetSequence"));
assertNotNull(sq.getDBRefs());
- assertEquals(1, sq.getDBRefs().length);
- assertSame(dbr1, sq.getDBRefs()[0]);
+ assertEquals(1, sq.getDBRefs().size());
+ assertSame(dbr1, sq.getDBRefs().get(0));
}
@Test(groups = { "Functional" })
new AlignmentAnnotation("Test annot", "Test annot description",
annots));
Assert.assertEquals(sq.getDescription(), "Test sequence description..");
- Assert.assertEquals(sq.getDBRefs().length, 5); // DBRefs are on dataset
+ Assert.assertEquals(sq.getDBRefs().size(), 5); // DBRefs are on dataset
// sequence
Assert.assertEquals(sq.getAllPDBEntries().size(), 4);
Assert.assertNotNull(sq.getAnnotation());
Assert.assertEquals(sq.getAnnotation()[0].annotations.length, 2);
- Assert.assertEquals(sq.getDatasetSequence().getDBRefs().length, 5); // same
+ Assert.assertEquals(sq.getDatasetSequence().getDBRefs().size(), 5); // same
// as
// sq.getDBRefs()
Assert.assertEquals(sq.getDatasetSequence().getAllPDBEntries().size(),
Assert.assertEquals(derived.getDescription(),
"Test sequence description..");
- Assert.assertEquals(derived.getDBRefs().length, 5); // come from dataset
+ Assert.assertEquals(derived.getDBRefs().size(), 5); // come from dataset
Assert.assertEquals(derived.getAllPDBEntries().size(), 4);
Assert.assertNotNull(derived.getAnnotation());
Assert.assertEquals(derived.getAnnotation()[0].annotations.length, 2);
- Assert.assertEquals(derived.getDatasetSequence().getDBRefs().length, 5);
+ Assert.assertEquals(derived.getDatasetSequence().getDBRefs().size(), 5);
Assert.assertEquals(derived.getDatasetSequence().getAllPDBEntries()
.size(), 4);
Assert.assertNotNull(derived.getDatasetSequence().getAnnotation());
// but that doesn't distinguish it from an aligned sequence
// which has not yet generated a dataset sequence
// NB getDBRef looks inside dataset sequence if not null
- DBRefEntry[] dbrefs = copy.getDBRefs();
- assertEquals(1, dbrefs.length);
- assertFalse(dbrefs[0] == seq1.getDBRefs()[0]);
- assertTrue(dbrefs[0].equals(seq1.getDBRefs()[0]));
+ List<DBRefEntry> dbrefs = copy.getDBRefs();
+ assertEquals(1, dbrefs.size());
+ assertFalse(dbrefs.get(0) == seq1.getDBRefs().get(0));
+ assertTrue(dbrefs.get(0).equals(seq1.getDBRefs().get(0)));
}
@Test(groups = { "Functional" })
// getDBRef looks inside dataset sequence and this is shared,
// so holds the same dbref objects
- DBRefEntry[] dbrefs = copy.getDBRefs();
- assertEquals(1, dbrefs.length);
- assertSame(dbrefs[0], seq1.getDBRefs()[0]);
+ List<DBRefEntry> dbrefs = copy.getDBRefs();
+ assertEquals(1, dbrefs.size());
+ assertSame(dbrefs.get(0), seq1.getDBRefs().get(0));
}
/**
assertNull(sq.getDBRefs());
DBRefEntry dbref = new DBRefEntry("Uniprot", "1", "P00340");
sq.addDBRef(dbref);
- assertEquals(1, sq.getDBRefs().length);
- assertSame(dbref, sq.getDBRefs()[0]);
+ assertEquals(1, sq.getDBRefs().size());
+ assertSame(dbref, sq.getDBRefs().get(0));
/*
* change of version - new entry
*/
DBRefEntry dbref2 = new DBRefEntry("Uniprot", "2", "P00340");
sq.addDBRef(dbref2);
- assertEquals(2, sq.getDBRefs().length);
- assertSame(dbref, sq.getDBRefs()[0]);
- assertSame(dbref2, sq.getDBRefs()[1]);
+ assertEquals(2, sq.getDBRefs().size());
+ assertSame(dbref, sq.getDBRefs().get(0));
+ assertSame(dbref2, sq.getDBRefs().get(1));
/*
* matches existing entry - not added
*/
sq.addDBRef(new DBRefEntry("UNIPROT", "1", "p00340"));
- assertEquals(2, sq.getDBRefs().length);
+ assertEquals(2, sq.getDBRefs().size());
/*
* different source = new entry
*/
DBRefEntry dbref3 = new DBRefEntry("UniRef", "1", "p00340");
sq.addDBRef(dbref3);
- assertEquals(3, sq.getDBRefs().length);
- assertSame(dbref3, sq.getDBRefs()[2]);
+ assertEquals(3, sq.getDBRefs().size());
+ assertSame(dbref3, sq.getDBRefs().get(2));
/*
* different ref = new entry
*/
DBRefEntry dbref4 = new DBRefEntry("UniRef", "1", "p00341");
sq.addDBRef(dbref4);
- assertEquals(4, sq.getDBRefs().length);
- assertSame(dbref4, sq.getDBRefs()[3]);
+ assertEquals(4, sq.getDBRefs().size());
+ assertSame(dbref4, sq.getDBRefs().get(3));
/*
* matching ref with a mapping - map updated
1, 1 }, 3, 1));
dbref5.setMap(map);
sq.addDBRef(dbref5);
- assertEquals(4, sq.getDBRefs().length);
- assertSame(dbref4, sq.getDBRefs()[3]);
+ assertEquals(4, sq.getDBRefs().size());
+ assertSame(dbref4, sq.getDBRefs().get(3));
assertSame(map, dbref4.getMap());
/*
DBRefEntry dbref6 = new DBRefEntry(dbref2.getSource(), "3",
dbref2.getAccessionId());
sq.addDBRef(dbref6);
- assertEquals(4, sq.getDBRefs().length);
- assertSame(dbref2, sq.getDBRefs()[1]);
+ assertEquals(4, sq.getDBRefs().size());
+ assertSame(dbref2, sq.getDBRefs().get(1));
assertEquals("3", dbref2.getVersion());
/*
DBRefEntry dbref7 = new DBRefEntry(dbref3.getSource(), "3",
dbref3.getAccessionId());
sq.addDBRef(dbref7);
- assertEquals(4, sq.getDBRefs().length);
- assertSame(dbref3, sq.getDBRefs()[2]);
+ assertEquals(4, sq.getDBRefs().size());
+ assertSame(dbref3, sq.getDBRefs().get(2));
assertEquals("3", dbref2.getVersion());
}
assertTrue(primaryDBRefs.isEmpty());
// empty dbrefs
- sq.setDBRefs(new DBRefEntry[] {});
+ sq.setDBRefs(null);
primaryDBRefs = sq.getPrimaryDBRefs();
assertTrue(primaryDBRefs.isEmpty());
// cursor should now be at [D 6]
cursor = (SequenceCursor) PA.getValue(sq, "cursor");
assertEquals(new SequenceCursor(sq, 11, 6, ++token), cursor);
+ assertEquals(0, cursor.lastColumnPosition); // not yet found
+ assertEquals(13, sq.findPosition(8)); // E13
+ cursor = (SequenceCursor) PA.getValue(sq, "cursor");
+ assertEquals(9, cursor.lastColumnPosition); // found
/*
* deleteChars should invalidate the cached cursor
}
@Test(groups = { "Functional" })
- public void testFindPositions()
- {
- SequenceI sq = new Sequence("test/8-13", "-ABC---DE-F--");
-
- /*
- * invalid inputs
- */
- assertNull(sq.findPositions(6, 5));
- assertNull(sq.findPositions(0, 5));
- assertNull(sq.findPositions(-1, 5));
-
- /*
- * all gapped ranges
- */
- assertNull(sq.findPositions(1, 1)); // 1-based columns
- assertNull(sq.findPositions(5, 5));
- assertNull(sq.findPositions(5, 6));
- assertNull(sq.findPositions(5, 7));
-
- /*
- * all ungapped ranges
- */
- assertEquals(new Range(8, 8), sq.findPositions(2, 2)); // A
- assertEquals(new Range(8, 9), sq.findPositions(2, 3)); // AB
- assertEquals(new Range(8, 10), sq.findPositions(2, 4)); // ABC
- assertEquals(new Range(9, 10), sq.findPositions(3, 4)); // BC
-
- /*
- * gap to ungapped range
- */
- assertEquals(new Range(8, 10), sq.findPositions(1, 4)); // ABC
- assertEquals(new Range(11, 12), sq.findPositions(6, 9)); // DE
-
- /*
- * ungapped to gapped range
- */
- assertEquals(new Range(10, 10), sq.findPositions(4, 5)); // C
- assertEquals(new Range(9, 13), sq.findPositions(3, 11)); // BCDEF
-
- /*
- * ungapped to ungapped enclosing gaps
- */
- assertEquals(new Range(10, 11), sq.findPositions(4, 8)); // CD
- assertEquals(new Range(8, 13), sq.findPositions(2, 11)); // ABCDEF
-
- /*
- * gapped to gapped enclosing ungapped
- */
- assertEquals(new Range(8, 10), sq.findPositions(1, 5)); // ABC
- assertEquals(new Range(11, 12), sq.findPositions(5, 10)); // DE
- assertEquals(new Range(8, 13), sq.findPositions(1, 13)); // the lot
- assertEquals(new Range(8, 13), sq.findPositions(1, 99));
- }
-
- @Test(groups = { "Functional" })
public void testGapBitset()
{
SequenceI sq = new Sequence("test/8-13", "-ABC---DE-F--");