X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fio%2FSequenceAnnotationReportTest.java;fp=test%2Fjalview%2Fio%2FSequenceAnnotationReportTest.java;h=9e61bec5632803554dce391211eca358de59d6b7;hb=9f70ff4b6d193b340031997634c9e3602486bc8e;hp=28958748720c559c1623e70116ff6a0e3e624ea9;hpb=76844c43faeeeba369deaf42f1998ca0fb33d956;p=jalview.git diff --git a/test/jalview/io/SequenceAnnotationReportTest.java b/test/jalview/io/SequenceAnnotationReportTest.java index 2895874..9e61bec 100644 --- a/test/jalview/io/SequenceAnnotationReportTest.java +++ b/test/jalview/io/SequenceAnnotationReportTest.java @@ -21,13 +21,21 @@ package jalview.io; import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertTrue; +import jalview.datamodel.DBRefEntry; +import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceI; import jalview.gui.JvOptionPane; +import jalview.io.gff.GffConstants; +import java.util.HashMap; import java.util.Hashtable; import java.util.Map; +import junit.extensions.PA; + import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -192,4 +200,134 @@ public class SequenceAnnotationReportTest // if no tag, html-encodes > and < (only): assertEquals("METAL 1 3; <br>&kHD>6", sb.toString()); } + + @Test(groups = "Functional") + public void testCreateSequenceAnnotationReport() + { + SequenceAnnotationReport sar = new SequenceAnnotationReport(null); + StringBuilder sb = new StringBuilder(); + + SequenceI seq = new Sequence("s1", "MAKLKRFQSSTLL"); + seq.setDescription("SeqDesc"); + + sar.createSequenceAnnotationReport(sb, seq, true, true, null); + + /* + * positional features are ignored + */ + seq.addSequenceFeature(new SequenceFeature("Domain", "Ferredoxin", 5, + 10, 1f, null)); + assertEquals("
SeqDesc
", sb.toString()); + + /* + * non-positional feature + */ + seq.addSequenceFeature(new SequenceFeature("Type1", "Nonpos", 0, 0, 1f, + null)); + sb.setLength(0); + sar.createSequenceAnnotationReport(sb, seq, true, true, null); + String expected = "
SeqDesc
Type1 ; Nonpos
"; + assertEquals(expected, sb.toString()); + + /* + * non-positional features not wanted + */ + sb.setLength(0); + sar.createSequenceAnnotationReport(sb, seq, true, false, null); + assertEquals("
SeqDesc
", sb.toString()); + + /* + * add non-pos feature with score inside min-max range for feature type + * minmax holds { [positionalMin, positionalMax], [nonPosMin, nonPosMax] } + * score is only appended for positional features so ignored here! + * minMax are not recorded for non-positional features + */ + seq.addSequenceFeature(new SequenceFeature("Metal", "Desc", 0, 0, 5f, + null)); + Map minmax = new HashMap(); + minmax.put("Metal", new float[][] { null, new float[] { 2f, 5f } }); + sb.setLength(0); + sar.createSequenceAnnotationReport(sb, seq, true, true, minmax); + expected = "
SeqDesc
Metal ; Desc
Type1 ; Nonpos
"; + assertEquals(expected, sb.toString()); + + /* + * 'linkonly' features are ignored; this is obsolete, as linkonly + * is only set by DasSequenceFetcher, and DAS is history + */ + SequenceFeature sf = new SequenceFeature("Metal", "Desc", 0, 0, 5f, + null); + sf.setValue("linkonly", Boolean.TRUE); + seq.addSequenceFeature(sf); + sb.setLength(0); + sar.createSequenceAnnotationReport(sb, seq, true, true, minmax); + assertEquals(expected, sb.toString()); // unchanged! + + /* + * 'clinical_significance' currently being specially included + */ + SequenceFeature sf2 = new SequenceFeature("Variant", "Havana", 0, 0, + 5f, null); + sf2.setValue(GffConstants.CLINICAL_SIGNIFICANCE, "benign"); + seq.addSequenceFeature(sf2); + sb.setLength(0); + sar.createSequenceAnnotationReport(sb, seq, true, true, minmax); + expected = "
SeqDesc
Metal ; Desc
Type1 ; Nonpos
Variant ; Havana; benign
"; + assertEquals(expected, sb.toString()); + + /* + * add dbrefs + */ + seq.addDBRef(new DBRefEntry("PDB", "0", "3iu1")); + seq.addDBRef(new DBRefEntry("Uniprot", "1", "P30419")); + // with showDbRefs = false + sb.setLength(0); + sar.createSequenceAnnotationReport(sb, seq, false, true, minmax); + assertEquals(expected, sb.toString()); // unchanged + // with showDbRefs = true + sb.setLength(0); + sar.createSequenceAnnotationReport(sb, seq, true, true, minmax); + expected = "
SeqDesc
UNIPROT P30419
PDB 3iu1
Metal ; Desc
Type1 ; Nonpos
Variant ; Havana; benign
"; + assertEquals(expected, sb.toString()); + // with showNonPositionalFeatures = false + sb.setLength(0); + sar.createSequenceAnnotationReport(sb, seq, true, false, minmax); + expected = "
SeqDesc
UNIPROT P30419
PDB 3iu1
"; + assertEquals(expected, sb.toString()); + + // see other tests for treatment of status and html + } + + /** + * Test that exercises an abbreviated sequence details report, with ellipsis + * where there are more than 40 different sources, or more than 4 dbrefs for a + * single source + */ + @Test(groups = "Functional") + public void testCreateSequenceAnnotationReport_withEllipsis() + { + SequenceAnnotationReport sar = new SequenceAnnotationReport(null); + StringBuilder sb = new StringBuilder(); + + SequenceI seq = new Sequence("s1", "ABC"); + + int maxSources = (int) PA.getValue(sar, "MAX_SOURCES"); + for (int i = 0; i <= maxSources; i++) + { + seq.addDBRef(new DBRefEntry("PDB" + i, "0", "3iu1")); + } + + int maxRefs = (int) PA.getValue(sar, "MAX_REFS_PER_SOURCE"); + for (int i = 0; i <= maxRefs; i++) + { + seq.addDBRef(new DBRefEntry("Uniprot", "0", "P3041" + i)); + } + + sar.createSequenceAnnotationReport(sb, seq, true, true, null, true); + String report = sb.toString(); + assertTrue(report + .startsWith("
UNIPROT P30410, P30411, P30412, P30413,...
PDB0 3iu1")); + assertTrue(report + .endsWith("
PDB7 3iu1
PDB8,...
(Output Sequence Details to list all database references)
")); + } }