X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fio%2FStockholmFileTest.java;fp=test%2Fjalview%2Fio%2FStockholmFileTest.java;h=e86c8ad79f8852be2aa0ecb0a2a4208eaf546928;hb=483abbfd34bb2e47698f4cb04e21531c2b11924a;hp=a6ae6307b005e0a16ee18943d9364771c95ec152;hpb=96f0a99a5fac43f4288d37486d9d13d8e12f1a1f;p=jalview.git diff --git a/test/jalview/io/StockholmFileTest.java b/test/jalview/io/StockholmFileTest.java index a6ae630..e86c8ad 100644 --- a/test/jalview/io/StockholmFileTest.java +++ b/test/jalview/io/StockholmFileTest.java @@ -38,6 +38,8 @@ import java.util.BitSet; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.testng.Assert; import org.testng.annotations.BeforeClass; @@ -658,7 +660,7 @@ public class StockholmFileTest // this is the single sequence alignment and the SS annotations equivalent to // the ones in file RnaSSTestFile - String aliFileRnaSSAlphaChars = ">Test.sequence/1-14\n" + String aliFileRnaSS = ">Test.sequence/1-14\n" + "GUACAAAAAAAAAA"; String annFileRnaSSAlphaChars = "JALVIEW_ANNOTATION\n" + "# Created: Thu Aug 02 14:54:57 BST 2018\n" + "\n" @@ -700,7 +702,7 @@ public class StockholmFileTest // this should result in the same RNA SS Annotations AlignmentI newAl = new AppletFormatAdapter().readFile( - aliFileRnaSSAlphaChars, + aliFileRnaSS, DataSourceType.PASTE, jalview.io.FileFormat.Fasta); AnnotationFile aaf = new AnnotationFile(); aaf.readAnnotationFile(newAl, annFileRnaSSAlphaChars, @@ -708,11 +710,14 @@ public class StockholmFileTest Assert.assertTrue( testRnaSSAnnotationsEquivalent(al.getAlignmentAnnotation()[0], - newAl.getAlignmentAnnotation()[0])); + newAl.getAlignmentAnnotation()[0]), + "RNA SS Annotations SHOULD be pair-wise equivalent (but apparently aren't): \n" + + "RNA SS A 1:" + al.getAlignmentAnnotation()[0] + "\n" + + "RNA SS A 2:" + newAl.getAlignmentAnnotation()[0]); // this should NOT result in the same RNA SS Annotations newAl = new AppletFormatAdapter().readFile( - aliFileRnaSSAlphaChars, DataSourceType.PASTE, + aliFileRnaSS, DataSourceType.PASTE, jalview.io.FileFormat.Fasta); aaf = new AnnotationFile(); aaf.readAnnotationFile(newAl, wrongAnnFileRnaSSAlphaChars, @@ -720,7 +725,10 @@ public class StockholmFileTest boolean mismatch = testRnaSSAnnotationsEquivalent(al.getAlignmentAnnotation()[0], newAl.getAlignmentAnnotation()[0]); - Assert.assertFalse( mismatch ); + Assert.assertFalse(mismatch, + "RNA SS Annotations SHOULD NOT be pair-wise equivalent (but apparently are): \n" + + "RNA SS A 1:" + al.getAlignmentAnnotation()[0] + "\n" + + "RNA SS A 2:" + newAl.getAlignmentAnnotation()[0]); } private static boolean testRnaSSAnnotationsEquivalent( @@ -730,4 +738,110 @@ public class StockholmFileTest return a1.rnaSecondaryStructureEquivalent(a2); } + String annFileRnaSSWithSpaceChars = "JALVIEW_ANNOTATION\n" + + "# Created: Thu Aug 02 14:54:57 BST 2018\n" + "\n" + + "NO_GRAPH\tSecondary Structure\tSecondary Structure\t<,<|.,.|H,H| , |B,B|h,h| , |b,b|(,(|E,E|.,.|e,e|),)|>,>|\t2.0\n" + + "\n" + + "ROWPROPERTIES\tSecondary Structure\tscaletofit=true\tshowalllabs=true\tcentrelabs=false\n" + + "\n" + "\n" + "ALIGNMENT\tID=RNA.SS.TEST\tTP=RNA;"; + String annFileRnaSSWithoutSpaceChars = "JALVIEW_ANNOTATION\n" + + "# Created: Thu Aug 02 14:54:57 BST 2018\n" + "\n" + + "NO_GRAPH\tSecondary Structure\tSecondary Structure\t<,<|.,.|H,H|.,.|B,B|h,h|.,.|b,b|(,(|E,E|.,.|e,e|),)|>,>|\t2.0\n" + + "\n" + + "ROWPROPERTIES\tSecondary Structure\tscaletofit=true\tshowalllabs=true\tcentrelabs=false\n" + + "\n" + "\n" + "ALIGNMENT\tID=RNA.SS.TEST\tTP=RNA;"; + + String wrongAnnFileRnaSSWithoutSpaceChars = "JALVIEW_ANNOTATION\n" + + "# Created: Thu Aug 02 14:54:57 BST 2018\n" + "\n" + + "NO_GRAPH\tSecondary Structure\tSecondary Structure\t<,<|.,.|H,H|Z,Z|B,B|h,h|z,z|b,b|(,(|E,E|.,.|e,e|),)|>,>|\t2.0\n" + + "\n" + + "ROWPROPERTIES\tSecondary Structure\tscaletofit=true\tshowalllabs=true\tcentrelabs=false\n" + + "\n" + "\n" + "ALIGNMENT\tID=RNA.SS.TEST\tTP=RNA;"; + + @Test(groups = { "Functional" }) + public void stockholmFileRnaSSSpaceChars() throws Exception + { + AlignmentI alWithSpaces = new AppletFormatAdapter().readFile( + aliFileRnaSS, DataSourceType.PASTE, + jalview.io.FileFormat.Fasta); + AnnotationFile afWithSpaces = new AnnotationFile(); + afWithSpaces.readAnnotationFile(alWithSpaces, + annFileRnaSSWithSpaceChars, DataSourceType.PASTE); + + Iterable aaiWithSpaces = alWithSpaces + .findAnnotations(null, null, "Secondary Structure"); + AlignmentAnnotation aaWithSpaces = aaiWithSpaces.iterator().next(); + Assert.assertTrue(aaWithSpaces.isRNA(), + "'" + aaWithSpaces + "' not recognised as RNA SS"); + Assert.assertTrue(aaWithSpaces.isValidStruc(), + "'" + aaWithSpaces + "' not recognised as valid structure"); + Annotation[] annWithSpaces = aaWithSpaces.annotations; + char[] As = new char[annWithSpaces.length]; + for (int i = 0; i < annWithSpaces.length; i++) + { + As[i] = annWithSpaces[i].secondaryStructure; + } + // check all spaces and dots are spaces in the internal representation + char[] shouldBe = { '<', ' ', 'H', ' ', 'B', 'h', ' ', 'b', '(', 'E', + ' ', 'e', ')', '>' }; + Assert.assertTrue(Arrays.equals(As, shouldBe), "Annotation is " + + new String(As) + " but should be " + new String(shouldBe)); + + // this should result in the same RNA SS Annotations + AlignmentI alWithoutSpaces = new AppletFormatAdapter().readFile( + aliFileRnaSS, DataSourceType.PASTE, + jalview.io.FileFormat.Fasta); + AnnotationFile afWithoutSpaces = new AnnotationFile(); + afWithoutSpaces.readAnnotationFile(alWithoutSpaces, + annFileRnaSSWithoutSpaceChars, + DataSourceType.PASTE); + + Assert.assertTrue( + testRnaSSAnnotationsEquivalent( + alWithSpaces.getAlignmentAnnotation()[0], + alWithoutSpaces.getAlignmentAnnotation()[0]), + "RNA SS Annotations SHOULD be pair-wise equivalent (but apparently aren't): \n" + + "RNA SS A 1:" + + alWithSpaces.getAlignmentAnnotation()[0] + .getRnaSecondaryStructure() + + "\n" + "RNA SS A 2:" + + alWithoutSpaces.getAlignmentAnnotation()[0] + .getRnaSecondaryStructure()); + + // this should NOT result in the same RNA SS Annotations + AlignmentI wrongAlWithoutSpaces = new AppletFormatAdapter().readFile( + aliFileRnaSS, DataSourceType.PASTE, + jalview.io.FileFormat.Fasta); + AnnotationFile wrongAfWithoutSpaces = new AnnotationFile(); + wrongAfWithoutSpaces.readAnnotationFile(wrongAlWithoutSpaces, + wrongAnnFileRnaSSWithoutSpaceChars, + DataSourceType.PASTE); + + Assert.assertFalse( + testRnaSSAnnotationsEquivalent( + alWithSpaces.getAlignmentAnnotation()[0], + wrongAlWithoutSpaces.getAlignmentAnnotation()[0]), + "RNA SS Annotations SHOULD NOT be pair-wise equivalent (but apparently are): \n" + + "RNA SS A 1:" + + alWithSpaces.getAlignmentAnnotation()[0] + .getRnaSecondaryStructure() + + "\n" + "RNA SS A 2:" + + wrongAlWithoutSpaces.getAlignmentAnnotation()[0] + .getRnaSecondaryStructure()); + + // check no spaces in the output + // TODO: create a better 'save as ' pattern + alWithSpaces.getAlignmentAnnotation()[0].visible = true; + StockholmFile sf = new StockholmFile(alWithSpaces); + + String stockholmFile = sf.print(alWithSpaces.getSequencesArray(), true); + Pattern noSpacesInRnaSSAnnotation = Pattern + .compile("\\n#=GC SS_cons\\s+\\S{14}\\n"); + Matcher m = noSpacesInRnaSSAnnotation.matcher(stockholmFile); + boolean matches = m.find(); + Assert.assertTrue(matches, + "StockholmFile output does not contain expected output (may contain spaces):\n" + + stockholmFile); + + } }