X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2Ffeatures%2FSequenceFeaturesTest.java;h=39d6dce4e9f68618d4b94b3f6de59416a4546ffc;hb=1a34e43f7fb8e6d4f559026c6f0a207893124c6d;hp=e3d587ffd5010b6db9fea57491deea56fa7bc252;hpb=7ed8fecb051ef29c364a45ee6ae6244a7da7275b;p=jalview.git diff --git a/test/jalview/datamodel/features/SequenceFeaturesTest.java b/test/jalview/datamodel/features/SequenceFeaturesTest.java index e3d587f..39d6dce 100644 --- a/test/jalview/datamodel/features/SequenceFeaturesTest.java +++ b/test/jalview/datamodel/features/SequenceFeaturesTest.java @@ -10,13 +10,47 @@ import jalview.datamodel.SequenceFeature; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; +import junit.extensions.PA; + import org.testng.annotations.Test; public class SequenceFeaturesTest { @Test(groups = "Functional") + public void testConstructor() + { + SequenceFeaturesI store = new SequenceFeatures(); + assertFalse(store.hasFeatures()); + + store = new SequenceFeatures((List) null); + assertFalse(store.hasFeatures()); + + List features = new ArrayList<>(); + store = new SequenceFeatures(features); + assertFalse(store.hasFeatures()); + + SequenceFeature sf1 = new SequenceFeature("Metal", "desc", 10, 20, + Float.NaN, null); + features.add(sf1); + SequenceFeature sf2 = new SequenceFeature("Metal", "desc", 15, 18, + Float.NaN, null); + features.add(sf2); // nested + SequenceFeature sf3 = new SequenceFeature("Pfam", "desc2", 0, 0, + Float.NaN, null); // non-positional + features.add(sf3); + store = new SequenceFeatures(features); + assertTrue(store.hasFeatures()); + assertEquals(2, store.getFeatureCount(true)); // positional + assertEquals(1, store.getFeatureCount(false)); // non-positional + assertFalse(store.add(sf1)); // already contained + assertFalse(store.add(sf2)); // already contained + assertFalse(store.add(sf3)); // already contained + } + + @Test(groups = "Functional") public void testGetPositionalFeatures() { SequenceFeaturesI store = new SequenceFeatures(); @@ -334,6 +368,11 @@ public class SequenceFeaturesTest groups = sf.getFeatureGroups(false); // for non-positional assertEquals(groups.size(), 1); assertTrue(groups.contains("AGroup")); + groups = sf.getFeatureGroups(false, "AType"); + assertEquals(groups.size(), 1); + assertTrue(groups.contains("AGroup")); + groups = sf.getFeatureGroups(true, "AnotherType"); + assertTrue(groups.isEmpty()); /* * add, then delete, more non-positional features of different types @@ -730,6 +769,8 @@ public class SequenceFeaturesTest Float.NaN, null); assertTrue(store.add(sf1)); assertEquals(store.getTotalFeatureLength(), 11); + assertEquals(store.getTotalFeatureLength("Metal"), 11); + assertEquals(store.getTotalFeatureLength("Plastic"), 0); // re-add does nothing! assertFalse(store.add(sf1)); @@ -848,12 +889,15 @@ public class SequenceFeaturesTest * no type specified - get all types stored * they are returned in keyset (alphabetical) order */ - Iterable types = sf.varargToTypes(); - Iterator iterator = types.iterator(); + Map featureStores = (Map) PA + .getValue(sf, "featureStore"); + + Iterable types = sf.varargToTypes(); + Iterator iterator = types.iterator(); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Cath"); + assertSame(iterator.next(), featureStores.get("Cath")); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Metal"); + assertSame(iterator.next(), featureStores.get("Metal")); assertFalse(iterator.hasNext()); /* @@ -863,9 +907,9 @@ public class SequenceFeaturesTest types = sf.varargToTypes(new String[] {}); iterator = types.iterator(); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Cath"); + assertSame(iterator.next(), featureStores.get("Cath")); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Metal"); + assertSame(iterator.next(), featureStores.get("Metal")); assertFalse(iterator.hasNext()); /* @@ -881,9 +925,9 @@ public class SequenceFeaturesTest types = sf.varargToTypes((String[]) null); iterator = types.iterator(); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Cath"); + assertSame(iterator.next(), featureStores.get("Cath")); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Metal"); + assertSame(iterator.next(), featureStores.get("Metal")); assertFalse(iterator.hasNext()); /* @@ -892,29 +936,27 @@ public class SequenceFeaturesTest types = sf.varargToTypes("Metal"); iterator = types.iterator(); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Metal"); + assertSame(iterator.next(), featureStores.get("Metal")); assertFalse(iterator.hasNext()); /* * two types specified - get sorted alphabetically */ - types = sf.varargToTypes("Metal", "Helix"); + types = sf.varargToTypes("Metal", "Cath"); iterator = types.iterator(); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Helix"); + assertSame(iterator.next(), featureStores.get("Cath")); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Metal"); + assertSame(iterator.next(), featureStores.get("Metal")); assertFalse(iterator.hasNext()); /* - * null type included - should get removed + * null type included - should be ignored */ types = sf.varargToTypes("Metal", null, "Helix"); iterator = types.iterator(); assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Helix"); - assertTrue(iterator.hasNext()); - assertEquals(iterator.next(), "Metal"); + assertSame(iterator.next(), featureStores.get("Metal")); assertFalse(iterator.hasNext()); } @@ -990,6 +1032,9 @@ public class SequenceFeaturesTest assertEquals(features.size(), 2); assertTrue(features.contains(sf2)); assertTrue(features.contains(sf3)); + + features = store.getFeaturesByOntology("sequence_variant"); + assertTrue(features.isEmpty()); } @Test(groups = "Functional") @@ -1100,4 +1145,80 @@ public class SequenceFeaturesTest assertTrue(store.getFeaturesForGroup(false, "Rfam", "Cath", "Pfam") .isEmpty()); } + + @Test(groups = "Functional") + public void testShiftFeatures() + { + SequenceFeatures store = new SequenceFeatures(); + assertFalse(store.shiftFeatures(1)); + + SequenceFeature sf1 = new SequenceFeature("Cath", "", 2, 5, 0f, null); + store.add(sf1); + // nested feature: + SequenceFeature sf2 = new SequenceFeature("Metal", "", 8, 14, 0f, null); + store.add(sf2); + // contact feature: + SequenceFeature sf3 = new SequenceFeature("Disulfide bond", "", 23, 32, + 0f, null); + store.add(sf3); + // non-positional feature: + SequenceFeature sf4 = new SequenceFeature("Pfam", "", 0, 0, 0f, null); + store.add(sf4); + + /* + * shift features right by 5 + */ + assertTrue(store.shiftFeatures(5)); + + // non-positional features untouched: + List nonPos = store.getNonPositionalFeatures(); + assertEquals(nonPos.size(), 1); + assertTrue(nonPos.contains(sf4)); + + // positional features are replaced + List pos = store.getPositionalFeatures(); + assertEquals(pos.size(), 3); + assertFalse(pos.contains(sf1)); + assertFalse(pos.contains(sf2)); + assertFalse(pos.contains(sf3)); + SequenceFeatures.sortFeatures(pos, true); // ascending start pos + assertEquals(pos.get(0).getBegin(), 7); + assertEquals(pos.get(0).getEnd(), 10); + assertEquals(pos.get(0).getType(), "Cath"); + assertEquals(pos.get(1).getBegin(), 13); + assertEquals(pos.get(1).getEnd(), 19); + assertEquals(pos.get(1).getType(), "Metal"); + assertEquals(pos.get(2).getBegin(), 28); + assertEquals(pos.get(2).getEnd(), 37); + assertEquals(pos.get(2).getType(), "Disulfide bond"); + + /* + * now shift left by 15 + * feature at [7-10] should be removed + * feature at [13-19] should become [1-4] + */ + assertTrue(store.shiftFeatures(-15)); + pos = store.getPositionalFeatures(); + assertEquals(pos.size(), 2); + SequenceFeatures.sortFeatures(pos, true); + assertEquals(pos.get(0).getBegin(), 1); + assertEquals(pos.get(0).getEnd(), 4); + assertEquals(pos.get(0).getType(), "Metal"); + assertEquals(pos.get(1).getBegin(), 13); + assertEquals(pos.get(1).getEnd(), 22); + assertEquals(pos.get(1).getType(), "Disulfide bond"); + } + + @Test(groups = "Functional") + public void testIsOntologyTerm() + { + SequenceFeatures store = new SequenceFeatures(); + assertTrue(store.isOntologyTerm("gobbledygook")); + assertTrue(store.isOntologyTerm("transcript", "transcript")); + assertTrue(store.isOntologyTerm("mRNA", "transcript")); + assertFalse(store.isOntologyTerm("transcript", "mRNA")); + assertTrue(store.isOntologyTerm("junk", "transcript", "junk")); + assertTrue(store.isOntologyTerm("junk", new String[] {})); + assertTrue(store.isOntologyTerm("junk", (String[]) null)); + } }