X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fio%2FCrossRef2xmlTests.java;h=838aa7a09a12ff0e25f08063ab089758d55b4769;hb=ec58d7c6a3ceadb413a2e11247adef2eaee3382b;hp=cc26d7eac17abb96acfda198aadff376193897d6;hpb=e2c039f9c1d5f08af9bebbab26cd0ae4dbcb7ace;p=jalview.git diff --git a/test/jalview/io/CrossRef2xmlTests.java b/test/jalview/io/CrossRef2xmlTests.java index cc26d7e..838aa7a 100644 --- a/test/jalview/io/CrossRef2xmlTests.java +++ b/test/jalview/io/CrossRef2xmlTests.java @@ -20,8 +20,6 @@ */ package jalview.io; -import static org.testng.AssertJUnit.assertTrue; - import jalview.analysis.CrossRef; import jalview.api.AlignmentViewPanel; import jalview.datamodel.AlignedCodonFrame; @@ -54,6 +52,11 @@ public class CrossRef2xmlTests extends Jalview2xmlBase @Test(groups = { "Operational" }, enabled = true) public void testRetrieveAndShowCrossref() throws Exception { + + List failedDBRetr = new ArrayList(); + List failedXrefMenuItems = new ArrayList(); + List failedProjectRecoveries = new ArrayList(); + // for every set of db queries // retrieve db query // verify presence of expected xrefs @@ -87,23 +90,34 @@ public class CrossRef2xmlTests extends Jalview2xmlBase { String first = did[0] + " " + did[1]; AlignFrame af = null; + boolean dna; + AlignmentI retral; + AlignmentI dataset; + SequenceI[] seqs; + List ptypes = null; if (pass1 == 0) { // retrieve dbref + List afs = jalview.gui.SequenceFetcher.fetchAndShow( + did[0], did[1]); + if (afs.size() == 0) + { + failedDBRetr.add("Didn't retrieve " + first); + break; + } keyseq.add(first); - - af = jalview.gui.SequenceFetcher.fetchAndShow(did[0], did[1]) - .get(0); - assertTrue("Didn't retrieve " + first, af != null); + af = afs.get(0); // verify references for retrieved data AlignmentTest.assertAlignmentDatasetRefs(af.getViewport() .getAlignment(), "Pass (" + pass1 + "," + pass2 + "," + pass3 + "): Fetch " + first + ":"); + dna = af.getViewport().getAlignment().isNucleotide(); + retral = af.getViewport().getAlignment(); + dataset = retral.getDataset(); + seqs = retral.getSequencesArray(); - // store project to recover on next pass - stringify(dbtoviewBit, savedProjects, first, af.alignPanel); } else { @@ -111,6 +125,12 @@ public class CrossRef2xmlTests extends Jalview2xmlBase // recover stored project af = new FileLoader(false).LoadFileWaitTillLoaded(savedProjects .get(first).toString(), FormatAdapter.FILE); + System.out.println("Recovered view for '" + first + "' from '" + + savedProjects.get(first).toString() + "'"); + dna = af.getViewport().getAlignment().isNucleotide(); + retral = af.getViewport().getAlignment(); + dataset = retral.getDataset(); + seqs = retral.getSequencesArray(); // verify references for recovered data AlignmentTest.assertAlignmentDatasetRefs(af.getViewport() @@ -119,41 +139,65 @@ public class CrossRef2xmlTests extends Jalview2xmlBase } - boolean dna = af.getViewport().getAlignment().isNucleotide(); - AlignmentI retral = af.getViewport().getAlignment(); - AlignmentI dataset = retral.getDataset(); - SequenceI[] seqs = retral.getSequencesArray(); - List ptypes = (seqs == null || seqs.length == 0) ? null - : new CrossRef(seqs, dataset) - .findXrefSourcesForSequences(dna); + // store project on first pass, compare next pass + stringify(dbtoviewBit, savedProjects, first, af.alignPanel); - pass2 = 0; - do // second cross ref and recover crossref loop - { - for (String db : ptypes) + ptypes = (seqs == null || seqs.length == 0) ? null : new CrossRef( + seqs, dataset).findXrefSourcesForSequences(dna); + + // start of pass2: retrieve each cross-ref for fetched or restored + // project. + do // first cross ref and recover crossref loop { + + for (String db : ptypes) + { // counter for splitframe views retrieved via crossref - int p = 0; + int firstcr_ap = 0; // build next key so we an retrieve all views - String nextxref = first + " -> " + db + "{" + p + "}"; + String nextxref = first + " -> " + db + "{" + firstcr_ap + "}"; // perform crossref action, or retrieve stored project List cra_views = new ArrayList(); CrossRefAction cra = null; + if (pass2 == 0) { // retrieve and show cross-refs in this thread cra = new CrossRefAction(af, seqs, dna, db); cra.run(); - Assert.assertTrue(cra.getXrefViews().size() > 0, - "No crossrefs retrieved for " + db); + if (cra.getXrefViews().size() == 0) + { + failedXrefMenuItems.add("No crossrefs retrieved for " + + first + " -> " + db); + continue; + } cra_views = cra.getXrefViews(); + assertNucleotide(cra_views.get(0), + "Nucleotide panel included proteins for " + first + + " -> " + db); + assertProtein(cra_views.get(1), + "Protein panel included nucleotides for " + first + + " -> " + db); } else { Desktop.instance.closeAll_actionPerformed(null); + pass3 = 0; + // recover stored project + File storedProject = savedProjects.get(nextxref); + if (storedProject == null) + { + failedProjectRecoveries.add("Failed to store a view for '" + + nextxref + "'"); + continue; + } + // recover stored project AlignFrame af2 = new FileLoader(false) .LoadFileWaitTillLoaded(savedProjects.get(nextxref) .toString(), FormatAdapter.FILE); + System.out.println("Recovered view for '" + nextxref + + "' from '" + savedProjects.get(nextxref).toString() + + "'"); // gymnastics to recover the alignPanel/Complementary alignPanel if (af2.getViewport().isNucleotide()) { @@ -174,57 +218,94 @@ public class CrossRef2xmlTests extends Jalview2xmlBase } } + HashMap> xrptypes = new HashMap>(); + // first save/verify views. for (AlignmentViewPanel avp : cra_views) { - nextxref = first + " -> " + db + "{" + p++ + "}"; - + nextxref = first + " -> " + db + "{" + firstcr_ap++ + "}"; // verify references for this panel AlignmentTest.assertAlignmentDatasetRefs(avp.getAlignment(), - "" + "Pass (" + pass1 + "," + pass2 + "): For " - + nextxref + ":"); + "Pass (" + pass1 + "," + pass2 + "," + pass3 + + "): before start of pass3: " + nextxref + + ":"); SequenceI[] xrseqs = avp.getAlignment().getSequencesArray(); - stringify(dbtoviewBit, savedProjects, nextxref, avp); - keyseq.add(nextxref); - - List xrptypes = (seqs == null || seqs.length == 0) ? null + List _xrptypes = (seqs == null || seqs.length == 0) ? null : new CrossRef(xrseqs, dataset) .findXrefSourcesForSequences(avp .getAlignViewport().isNucleotide()); - pass3 = 0; - do // 3rd cross ref and recover crossref loop + + stringify(dbtoviewBit, savedProjects, nextxref, avp); + xrptypes.put(nextxref, _xrptypes); + + } + + // now do the second xref pass starting from either saved or just + // recovered split pane, in sequence + do // retrieve second set of cross refs or recover and verify + { + firstcr_ap = 0; + for (AlignmentViewPanel avp : cra_views) { - for (String xrefdb : xrptypes) + nextxref = first + " -> " + db + "{" + firstcr_ap++ + "}"; + for (String xrefdb : xrptypes.get(nextxref)) { List cra_views2 = new ArrayList(); int q = 0; - String nextnextxref = "{" + p + "}" + nextxref + " -> " - + xrefdb + "{" + q + "}"; + String nextnextxref = nextxref + + " -> " + xrefdb + "{" + q + "}"; if (pass3 == 0) { + SequenceI[] xrseqs = avp.getAlignment() + .getSequencesArray(); AlignFrame nextaf = Desktop.getAlignFrameFor(avp .getAlignViewport()); cra = new CrossRefAction(nextaf, xrseqs, avp .getAlignViewport().isNucleotide(), xrefdb); cra.run(); - Assert.assertTrue(cra.getXrefViews().size() > 0, - "No crossrefs found for '" + nextxref + "' to " - + xrefdb + " via '" + nextaf.getTitle() - + "'"); + if (cra.getXrefViews().size() == 0) + { + failedXrefMenuItems + .add("No crossrefs retrieved for '" + + nextxref + "' to " + xrefdb + " via '" + + nextaf.getTitle() + "'"); + continue; + } cra_views2 = cra.getXrefViews(); + assertNucleotide(cra_views2.get(0), + "Nucleotide panel included proteins for '" + + nextxref + "' to " + xrefdb + + " via '" + nextaf.getTitle() + "'"); + assertProtein(cra_views2.get(1), + "Protein panel included nucleotides for '" + + nextxref + "' to " + xrefdb + + " via '" + nextaf.getTitle() + "'"); + } else { Desktop.instance.closeAll_actionPerformed(null); // recover stored project + File storedProject = savedProjects.get(nextnextxref); + if (storedProject == null) + { + failedProjectRecoveries + .add("Failed to store a view for '" + + nextnextxref + "'"); + continue; + } AlignFrame af2 = new FileLoader(false) .LoadFileWaitTillLoaded( savedProjects.get(nextnextxref) .toString(), FormatAdapter.FILE); + System.out.println("Recovered view for '" + + nextnextxref + "' from '" + + savedProjects.get(nextnextxref).toString() + + "'"); // gymnastics to recover the alignPanel/Complementary // alignPanel if (af2.getViewport().isNucleotide()) @@ -251,8 +332,8 @@ public class CrossRef2xmlTests extends Jalview2xmlBase for (AlignmentViewPanel nextavp : cra_views2) { - nextnextxref = "{" + p + "}" + nextxref + " -> " - + xrefdb + "{" + q++ + "}"; + nextnextxref = nextxref + + " -> " + xrefdb + "{" + q++ + "}"; // verify references for this panel AlignmentTest.assertAlignmentDatasetRefs( @@ -265,20 +346,107 @@ public class CrossRef2xmlTests extends Jalview2xmlBase keyseq.add(nextnextxref); } } // end of loop around showing all xrefdb for crossrf2 - // fetchdb->crossref1->crossref-2->verify for xrefs we - // either loop twice when pass2=0, or just once when pass2=1 - // (recovered project from previous crossref) - } while (pass3++ < 2 && pass2 < 1); - } - } + + } // end of loop around all viewpanels from crossrf1 + } while (pass2 == 2 && pass3++ < 2); + // fetchdb->crossref1->crossref-2->verify for xrefs we + // either loop twice when pass2=0, or just once when pass2=1 + // (recovered project from previous crossref) + + } // end of loop over db-xrefs for crossref-2 + // fetchdb-->crossref1 // for each xref we try to retrieve xref, store and verify when // pass1=0, or just retrieve and verify when pass1=1 - } while (pass2++ < 2 && pass1 < 1); + } while (pass1 == 1 && pass2++ < 2); // fetchdb // for each ref we // loop twice: first, do the retrieve, second recover from saved project - } while (++pass1 < 2); + + // increment pass counters, so we repeat traversal starting from the + // oldest saved project first. + if (pass1 == 0) + { + // verify stored projects for first set of cross references + pass1 = 1; + // and verify cross-references retrieved from stored projects + pass2 = 0; + pass3 = 0; + } + else + { + pass1++; + if (pass1 < 2) + { + // verify stored projects for second set of cross references + pass2 = 1; + // and verify cross-references retrievable from those stored projects. + pass3 = 0; + } + } + } while (pass3 < 2); + } + if (failedXrefMenuItems.size() > 0) + { + for (String s : failedXrefMenuItems) + { + System.err.println(s); + } + Assert.fail("Faulty xref menu (" + failedXrefMenuItems.size() + + " counts)"); + } + if (failedProjectRecoveries.size() > 0) + { + + for (String s : failedProjectRecoveries) + { + System.err.println(s); + } + Assert.fail("Didn't recover projects for some retrievals (did they retrieve ?) (" + + failedProjectRecoveries.size() + " counts)"); + } + if (failedDBRetr.size() > 0) + { + for (String s : failedProjectRecoveries) + { + System.err.println(s); + } + Assert.fail("Didn't retrieve some db refs for checking cross-refs (" + + failedDBRetr.size() + " counts)"); + } + } + + private void assertProtein(AlignmentViewPanel alignmentViewPanel, + String message) + { + assertType(true, alignmentViewPanel, message); + } + + private void assertNucleotide(AlignmentViewPanel alignmentViewPanel, + String message) + { + assertType(false, alignmentViewPanel, message); + } + + private void assertType(boolean expectProtein, + AlignmentViewPanel alignmentViewPanel, String message) + { + List nonType = new ArrayList(); + for (SequenceI sq : alignmentViewPanel.getAlignViewport() + .getAlignment() + .getSequences()) + { + if (sq.isProtein() != expectProtein) + { + nonType.add(sq); + } + } + if (nonType.size() > 0) + { + Assert.fail(message + " [ " + + (expectProtein ? "nucleotides were " : "proteins were ") + + nonType.toString() + + " ]"); } }