seqs.get(2).addSequenceFeature(
new SequenceFeature("Rfam", "Desc", 5, 9, Float.NaN,
"RfamGroup"));
+ // existing feature type with null group
seqs.get(3).addSequenceFeature(
new SequenceFeature("Rfam", "Desc", 5, 9, Float.NaN, null));
+ // new feature type with null group
+ seqs.get(3).addSequenceFeature(
+ new SequenceFeature("Scop", "Desc", 5, 9, Float.NaN, null));
// null value for type produces NullPointerException
fr.findAllFeatures(true);
types = fr.getRenderOrder();
groups = fr.getFeatureGroups();
- assertEquals(types.size(), 2);
+ assertEquals(types.size(), 3);
assertFalse(types.contains("Type"));
assertTrue(types.contains("Pfam"));
assertTrue(types.contains("Rfam"));
+ assertTrue(types.contains("Scop"));
assertEquals(groups.size(), 2);
assertFalse(groups.contains("Group"));
assertTrue(groups.contains("PfamGroup"));
* check render order (last is on top)
*/
List<String> renderOrder = fr.getRenderOrder();
- assertEquals(renderOrder, Arrays.asList("Rfam", "Pfam"));
+ assertEquals(renderOrder, Arrays.asList("Scop", "Rfam", "Pfam"));
/*
* change render order (todo: an easier way)
* nb here last comes first in the data array
*/
- Object[][] data = new Object[2][];
+ Object[][] data = new Object[3][];
FeatureColourI colour = new FeatureColour(Color.RED);
data[0] = new Object[] { "Rfam", colour, true };
data[1] = new Object[] { "Pfam", colour, false };
+ data[2] = new Object[] { "Scop", colour, false };
fr.setFeaturePriority(data);
- assertEquals(fr.getRenderOrder(), Arrays.asList("Pfam", "Rfam"));
+ assertEquals(fr.getRenderOrder(), Arrays.asList("Scop", "Pfam", "Rfam"));
assertEquals(fr.getDisplayedFeatureTypes(), Arrays.asList("Rfam"));
/*
new SequenceFeature("Metal", "Desc", 14, 22, 8f, "MetalGroup"));
fr.findAllFeatures(true);
assertEquals(fr.getRenderOrder(),
- Arrays.asList("Pfam", "Rfam", "Metal"));
+ Arrays.asList("Scop", "Pfam", "Rfam", "Metal"));
assertEquals(fr.getDisplayedFeatureTypes(),
Arrays.asList("Rfam", "Metal"));
}
+
+ @Test(groups = "Functional")
+ public void testFindFeaturesAtRes()
+ {
+ String seqData = ">s1\nabcdefghijklmnopqrstuvwxyz\n";
+ AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(seqData,
+ DataSourceType.PASTE);
+ AlignViewportI av = af.getViewport();
+ FeatureRenderer fr = new FeatureRenderer(av);
+ SequenceI seq = av.getAlignment().getSequenceAt(0);
+
+ /*
+ * with no features
+ */
+ List<SequenceFeature> features = fr.findFeaturesAtRes(seq, 3);
+ assertTrue(features.isEmpty());
+
+ /*
+ * add features
+ */
+ SequenceFeature sf1 = new SequenceFeature("Type1", "Desc", 0, 0, 1f,
+ "Group"); // non-positional
+ seq.addSequenceFeature(sf1);
+ SequenceFeature sf2 = new SequenceFeature("Type2", "Desc", 5, 15, 1f,
+ "Group1");
+ seq.addSequenceFeature(sf2);
+ SequenceFeature sf3 = new SequenceFeature("Type3", "Desc", 5, 15, 1f,
+ "Group2");
+ seq.addSequenceFeature(sf3);
+ SequenceFeature sf4 = new SequenceFeature("Type3", "Desc", 5, 15, 1f,
+ null); // null group is always treated as visible
+ seq.addSequenceFeature(sf4);
+
+ /*
+ * add contact features
+ */
+ SequenceFeature sf5 = new SequenceFeature("Disulphide Bond", "Desc", 4,
+ 12, 1f, "Group1");
+ seq.addSequenceFeature(sf5);
+ SequenceFeature sf6 = new SequenceFeature("Disulphide Bond", "Desc", 4,
+ 12, 1f, "Group2");
+ seq.addSequenceFeature(sf6);
+ SequenceFeature sf7 = new SequenceFeature("Disulphide Bond", "Desc", 4,
+ 12, 1f, null);
+ seq.addSequenceFeature(sf7);
+
+ /*
+ * let feature renderer discover features (and make visible)
+ */
+ fr.findAllFeatures(true);
+ features = fr.findFeaturesAtRes(seq, 12); // all positional
+ assertEquals(features.size(), 6);
+ assertTrue(features.contains(sf2));
+ assertTrue(features.contains(sf3));
+ assertTrue(features.contains(sf4));
+ assertTrue(features.contains(sf5));
+ assertTrue(features.contains(sf6));
+ assertTrue(features.contains(sf7));
+
+ /*
+ * at a non-contact position
+ */
+ features = fr.findFeaturesAtRes(seq, 11);
+ assertEquals(features.size(), 3);
+ assertTrue(features.contains(sf2));
+ assertTrue(features.contains(sf3));
+ assertTrue(features.contains(sf4));
+
+ /*
+ * make "Type2" not displayed
+ */
+ Object[][] data = new Object[4][];
+ FeatureColourI colour = new FeatureColour(Color.RED);
+ data[0] = new Object[] { "Type1", colour, true };
+ data[1] = new Object[] { "Type2", colour, false };
+ data[2] = new Object[] { "Type3", colour, true };
+ data[3] = new Object[] { "Disulphide Bond", colour, true };
+ fr.setFeaturePriority(data);
+ features = fr.findFeaturesAtRes(seq, 12);
+ assertEquals(features.size(), 5); // no sf2
+ assertTrue(features.contains(sf3));
+ assertTrue(features.contains(sf4));
+ assertTrue(features.contains(sf5));
+ assertTrue(features.contains(sf6));
+ assertTrue(features.contains(sf7));
+
+ /*
+ * make "Group2" not displayed
+ */
+ fr.setGroupVisibility("Group2", false);
+ features = fr.findFeaturesAtRes(seq, 12);
+ assertEquals(features.size(), 3); // no sf2, sf3, sf6
+ assertTrue(features.contains(sf4));
+ assertTrue(features.contains(sf5));
+ assertTrue(features.contains(sf7));
+ }
}