X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fio%2FSequenceAnnotationReportTest.java;h=9e61bec5632803554dce391211eca358de59d6b7;hb=5950febf61a94e527963a1eb68b0c59dd3387163;hp=07ae0ab442f7ef4702a3789bccda926ac023e4c8;hpb=528c0f1815bc67b54618ad5b16c2162946974caf;p=jalview.git diff --git a/test/jalview/io/SequenceAnnotationReportTest.java b/test/jalview/io/SequenceAnnotationReportTest.java index 07ae0ab..9e61bec 100644 --- a/test/jalview/io/SequenceAnnotationReportTest.java +++ b/test/jalview/io/SequenceAnnotationReportTest.java @@ -1,21 +1,59 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ 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; public class SequenceAnnotationReportTest { + + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + @Test(groups = "Functional") public void testAppendFeature_disulfideBond() { SequenceAnnotationReport sar = new SequenceAnnotationReport(null); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("123456"); SequenceFeature sf = new SequenceFeature("disulfide bond", "desc", 1, 3, 1.2f, "group"); @@ -40,7 +78,7 @@ public class SequenceAnnotationReportTest public void testAppendFeature_status() { SequenceAnnotationReport sar = new SequenceAnnotationReport(null); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3, Float.NaN, "group"); sf.setStatus("Confirmed"); @@ -53,7 +91,7 @@ public class SequenceAnnotationReportTest public void testAppendFeature_withScore() { SequenceAnnotationReport sar = new SequenceAnnotationReport(null); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3, 1.3f, "group"); @@ -86,7 +124,7 @@ public class SequenceAnnotationReportTest public void testAppendFeature_noScore() { SequenceAnnotationReport sar = new SequenceAnnotationReport(null); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3, Float.NaN, "group"); @@ -98,7 +136,7 @@ public class SequenceAnnotationReportTest public void testAppendFeature_clinicalSignificance() { SequenceAnnotationReport sar = new SequenceAnnotationReport(null); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3, Float.NaN, "group"); sf.setValue("clinical_significance", "Benign"); @@ -111,7 +149,7 @@ public class SequenceAnnotationReportTest public void testAppendFeature_withScoreStatusClinicalSignificance() { SequenceAnnotationReport sar = new SequenceAnnotationReport(null); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); SequenceFeature sf = new SequenceFeature("METAL", "Fe2-S", 1, 3, 1.3f, "group"); sf.setStatus("Confirmed"); @@ -128,7 +166,7 @@ public class SequenceAnnotationReportTest public void testAppendFeature_DescEqualsType() { SequenceAnnotationReport sar = new SequenceAnnotationReport(null); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); SequenceFeature sf = new SequenceFeature("METAL", "METAL", 1, 3, Float.NaN, "group"); @@ -147,7 +185,7 @@ public class SequenceAnnotationReportTest public void testAppendFeature_stripHtml() { SequenceAnnotationReport sar = new SequenceAnnotationReport(null); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); SequenceFeature sf = new SequenceFeature("METAL", "helloworld", 1, 3, Float.NaN, "group"); @@ -162,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)
")); + } }