From ff873be7729f8a052830c43b4a9526ef850b5a93 Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Fri, 15 Feb 2013 15:40:12 +0000 Subject: [PATCH] JAL-1199 JAL-1272 refactored Natasha's test to a generic alignment data consistency test --- test/jalview/io/StockholmFileTest.java | 286 +++++++++++++++++++------------- 1 file changed, 175 insertions(+), 111 deletions(-) diff --git a/test/jalview/io/StockholmFileTest.java b/test/jalview/io/StockholmFileTest.java index 86ab0b2..a8e73bb 100644 --- a/test/jalview/io/StockholmFileTest.java +++ b/test/jalview/io/StockholmFileTest.java @@ -47,152 +47,213 @@ public class StockholmFileTest @Test public void rfamFileIO() throws Exception { - test(new File(RfamFile)); + testFileIOwithFormat(new File(RfamFile), "STH"); } - private void test(File f) + /** + * test alignment data in given file can be imported, exported and reimported + * with no dataloss + * + * @param f + * - source datafile (IdentifyFile.identify() should work with it) + * @param ioformat + * - label for IO class used to write and read back in the data from + * f + */ + public static void testFileIOwithFormat(File f, String ioformat) { System.out.println("Reading file: " + f); String ff = f.getPath(); try { - Alignment al = new AppletFormatAdapter().readFile(ff, AppletFormatAdapter.FILE, + AppletFormatAdapter rf = new AppletFormatAdapter(); + + Alignment al = rf.readFile(ff, AppletFormatAdapter.FILE, new IdentifyFile().Identify(ff, AppletFormatAdapter.FILE)); - + + assertNotNull("Couldn't read supplied alignment data.", al); + + // make sure dataset is initialised ? not sure about this for (int i = 0; i < al.getSequencesArray().length; ++i) { al.getSequenceAt(i).setDatasetSequence(al.getSequenceAt(i)); } - AlignFile stFile = new StockholmFile(al); - stFile.setSeqs(al.getSequencesArray()); + String outputfile = rf.formatSequences(ioformat, al, true); + System.out.println("Output file in '"+ioformat+"':\n"+outputfile+"\n<i) { + assertTrue("Different alignment annotation ordering", + equalss(aa_original[i], aa_new[i])); + } else { + System.err.println("No matching annotation row for "+aa_original[i].toString()); } + } + } + assertTrue( + "Generated and imported alignment have different annotation sets (" + + aa_new_size + " != " + aa_original_size + ")", + aa_new_size == aa_original_size); + + // check sequences, annotation and features + SequenceI[] seq_original = new SequenceI[al.getSequencesArray().length]; + seq_original = al.getSequencesArray(); + SequenceI[] seq_new = new SequenceI[al_input.getSequencesArray().length]; + seq_new = al_input.getSequencesArray(); + SequenceFeature[] sequenceFeatures_original, sequenceFeatures_new; + AlignmentAnnotation annot_original, annot_new; + // + for (int i = 0; i < al.getSequencesArray().length; i++) + { + String name = seq_original[i].getName(); + int start = seq_original[i].getStart(); + int end = seq_original[i].getEnd(); + System.out.println("Check sequence: " + name + "/" + start + "-" + + end); - // check sequences, annotation and features - SequenceI[] seq_original = new SequenceI[al.getSequencesArray().length]; - seq_original = al.getSequencesArray(); - SequenceI[] seq_new = new SequenceI[al_input.getSequencesArray().length]; - seq_new = al_input.getSequencesArray(); - SequenceFeature[] sequenceFeatures_original, sequenceFeatures_new; - AlignmentAnnotation annot_original, annot_new; - // - for (int i = 0; i < al.getSequencesArray().length; i++) + // search equal sequence + for (int in = 0; in < al_input.getSequencesArray().length; in++) + { + if (name.equals(seq_new[in].getName()) + && start == seq_new[in].getStart() + && end == seq_new[in].getEnd()) { - String name = seq_original[i].getName(); - int start = seq_original[i].getStart(); - int end = seq_original[i].getEnd(); - System.out.println("Check sequence: " + name + "/" + start + "-" - + end); - - // search equal sequence - for (int in = 0; in < al_input.getSequencesArray().length; in++) + String ss_original = seq_original[i].getSequenceAsString(); + String ss_new = seq_new[in].getSequenceAsString(); + assertTrue("The sequences " + name + "/" + start + "-" + end + + " are not equal", ss_original.equals(ss_new)); + + assertTrue( + "Sequence Features were not equivalent", + (seq_original[i].getSequenceFeatures() == null && seq_new[in] + .getSequenceFeatures() == null) + || (seq_original[i].getSequenceFeatures() != null && seq_new[in] + .getSequenceFeatures() != null)); + // compare sequence features + if (seq_original[i].getSequenceFeatures() != null + && seq_new[in].getSequenceFeatures() != null) { - if (name.equals(seq_new[in].getName()) - && start == seq_new[in].getStart() - && end == seq_new[in].getEnd()) + System.out.println("There are feature!!!"); + sequenceFeatures_original = new SequenceFeature[seq_original[i] + .getSequenceFeatures().length]; + sequenceFeatures_original = seq_original[i] + .getSequenceFeatures(); + sequenceFeatures_new = new SequenceFeature[seq_new[in] + .getSequenceFeatures().length]; + sequenceFeatures_new = seq_new[in].getSequenceFeatures(); + + assertTrue("different number of features", seq_original[i] + .getSequenceFeatures().length == seq_new[in] + .getSequenceFeatures().length); + + for (int feat = 0; feat < seq_original[i].getSequenceFeatures().length; feat++) { - String ss_original = seq_original[i].getSequenceAsString(); - String ss_new = seq_new[in].getSequenceAsString(); - assertTrue("The sequences " + name + "/" + start - + "-" + end + " are not equal", ss_original.equals(ss_new)); - - assertTrue("Sequence Features were not equivalent", (seq_original[i].getSequenceFeatures()==null && seq_new[in].getSequenceFeatures()==null) || (seq_original[i].getSequenceFeatures()!=null && seq_new[in].getSequenceFeatures()!=null)); - // compare sequence features - if (seq_original[i].getSequenceFeatures() != null - && seq_new[in].getSequenceFeatures() != null) - { - System.out.println("There are feature!!!"); - sequenceFeatures_original = new SequenceFeature[seq_original[i] - .getSequenceFeatures().length]; - sequenceFeatures_original = seq_original[i] - .getSequenceFeatures(); - sequenceFeatures_new = new SequenceFeature[seq_new[in] - .getSequenceFeatures().length]; - sequenceFeatures_new = seq_new[in].getSequenceFeatures(); - - assertTrue("different number of features", seq_original[i].getSequenceFeatures().length == seq_new[in] - .getSequenceFeatures().length); - - for (int feat = 0; feat < seq_original[i] - .getSequenceFeatures().length; feat++) - { - assertTrue("Different features",sequenceFeatures_original[feat] - .equals(sequenceFeatures_new[feat])); - } - } + assertTrue("Different features", + sequenceFeatures_original[feat] + .equals(sequenceFeatures_new[feat])); + } + } - // compare alignment annotation - if (al.getSequenceAt(i).getAnnotation() != null - && al_input.getSequenceAt(in).getAnnotation() != null) - { - for (int j = 0; j < al.getSequenceAt(i).getAnnotation().length; j++) - { - if (al.getSequenceAt(i).getAnnotation()[j] != null - && al_input.getSequenceAt(in).getAnnotation()[j] != null) - { - annot_original = al.getSequenceAt(i).getAnnotation()[j]; - annot_new = al_input.getSequenceAt(in).getAnnotation()[j]; - assertTrue("Different annotation", equalss(annot_original, annot_new)); - } - } - } - else if (al.getSequenceAt(i).getAnnotation() == null - && al_input.getSequenceAt(in).getAnnotation() == null) - { - System.out.println("No annotations"); - } - else if (al.getSequenceAt(i).getAnnotation() != null - && al_input.getSequenceAt(in).getAnnotation() == null) + // compare alignment annotation + if (al.getSequenceAt(i).getAnnotation() != null + && al_input.getSequenceAt(in).getAnnotation() != null) + { + for (int j = 0; j < al.getSequenceAt(i).getAnnotation().length; j++) + { + if (al.getSequenceAt(i).getAnnotation()[j] != null + && al_input.getSequenceAt(in).getAnnotation()[j] != null) { - assertTrue("Annotations differed between sequences ("+al.getSequenceAt(i).getName()+") and ("+al_input.getSequenceAt(i).getName()+")", false); + annot_original = al.getSequenceAt(i).getAnnotation()[j]; + annot_new = al_input.getSequenceAt(in).getAnnotation()[j]; + assertTrue("Different annotation", + equalss(annot_original, annot_new)); } - break; } } + else if (al.getSequenceAt(i).getAnnotation() == null + && al_input.getSequenceAt(in).getAnnotation() == null) + { + System.out.println("No annotations"); + } + else if (al.getSequenceAt(i).getAnnotation() != null + && al_input.getSequenceAt(in).getAnnotation() == null) + { + assertTrue("Annotations differed between sequences (" + + al.getSequenceAt(i).getName() + ") and (" + + al_input.getSequenceAt(i).getName() + ")", false); + } + break; } } - else - { - assertTrue("Couldn't read alignment", false); - } - } catch (Exception e) - { - e.printStackTrace(); - assertTrue("Couln't format the alignment for output file.", false); } } /* * compare annotations */ - private boolean equalss(AlignmentAnnotation annot_or, + private static boolean equalss(AlignmentAnnotation annot_or, AlignmentAnnotation annot_new) { if (annot_or.annotations.length != annot_new.annotations.length) { + System.err.println("Different lengths for annotation row elements: "+annot_or.annotations.length +"!="+ annot_new.annotations.length); return false; } for (int i = 0; i < annot_or.annotations.length; i++) @@ -200,13 +261,15 @@ public class StockholmFileTest if (annot_or.annotations[i] != null && annot_new.annotations[i] != null) { - // Jim's comment - shouldn't the conditional here be using || not && for all these clauses ? + // Jim's comment - shouldn't the conditional here be using || not && for + // all these clauses ? if (!annot_or.annotations[i].displayCharacter .equals(annot_new.annotations[i].displayCharacter) && annot_or.annotations[i].secondaryStructure != annot_new.annotations[i].secondaryStructure && !annot_or.annotations[i].description .equals(annot_new.annotations[i].description)) { + System.err.println("Annotation Element Mismatch\nElement "+i+" in original: "+annot_or.annotations[i].toString()+"\nElement "+i+" in new: "+annot_new.annotations[i].toString()); return false; } } @@ -217,6 +280,7 @@ public class StockholmFileTest } else { + System.err.println("Annotation Element Mismatch\nElement "+i+" in original: "+(annot_or.annotations[i]==null ? "is null" : annot_or.annotations[i].toString())+"\nElement "+i+" in new: "+(annot_new.annotations[i] == null ? "is null" : annot_new.annotations[i].toString())); return false; } } -- 1.7.10.2