X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fws%2Fseqfetcher%2FDbRefFetcherTest.java;h=914520f8a87634ebb0cde4dd7c42fc06836f87e7;hb=c49fa6aa001663914b33fc53a1d002bfc6a291ba;hp=abaa7ecc085c7f711093e215fab6d83129d00aaa;hpb=ab22918ab8fc67d30dad1fb1ae0f37e51f49df95;p=jalview.git diff --git a/test/jalview/ws/seqfetcher/DbRefFetcherTest.java b/test/jalview/ws/seqfetcher/DbRefFetcherTest.java index abaa7ec..914520f 100644 --- a/test/jalview/ws/seqfetcher/DbRefFetcherTest.java +++ b/test/jalview/ws/seqfetcher/DbRefFetcherTest.java @@ -21,6 +21,7 @@ package jalview.ws.seqfetcher; import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertTrue; @@ -28,10 +29,19 @@ import jalview.analysis.CrossRef; import jalview.datamodel.AlignmentI; import jalview.datamodel.DBRefEntry; import jalview.datamodel.DBRefSource; +import jalview.datamodel.FeatureProperties; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceI; +import jalview.gui.JvOptionPane; import jalview.util.DBRefUtils; +import jalview.ws.DBRefFetcher; import jalview.ws.SequenceFetcher; +import jalview.ws.dbsources.Pdb; +import jalview.ws.dbsources.Uniprot; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.testng.annotations.AfterClass; @@ -45,10 +55,17 @@ import org.testng.annotations.Test; public class DbRefFetcherTest { + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + /** * @throws java.lang.Exception */ - @BeforeClass + @BeforeClass(alwaysRun = true) public static void setUpBeforeClass() throws Exception { jalview.bin.Cache.initLogger(); @@ -57,60 +74,102 @@ public class DbRefFetcherTest /** * @throws java.lang.Exception */ - @AfterClass + @AfterClass(alwaysRun = true) public static void tearDownAfterClass() throws Exception { } - @Test(groups ={ "Functional" }) + @Test(groups= {"Network"}) + public void checkUniprotCanonicalFlagSet() + { + // TODO - mock this - for moment it is a live request. + SequenceI uniprotSeq = new Sequence("FER1_SPIOL", + "MAATTTTMMGMATTFVPKPQAPPMMAALPSNTGRSLFGLKTGSRGGRMTMAAYKVTLVTPTGNVEFQCPDDV" + + "YILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLDDDQIDEGWVLTCAAYPVSDVTIETHKEEE" + + "LTA"); + DBRefFetcher dbr = new DBRefFetcher(new SequenceI[] { uniprotSeq }); + dbr.fetchDBRefs(true); + List primRefs = uniprotSeq.getPrimaryDBRefs(); + assertNotNull(primRefs); + assertTrue(primRefs.size()>0); + boolean canonicalUp=false; + for (DBRefEntry ref:primRefs) { + assertEquals(DBRefSource.UNIPROT, ref.getCanonicalSourceName()); + canonicalUp |= ref.isCanonical(); + } + assertTrue("No Canonical Uniprot reference detected", canonicalUp); + } + /** + * Tests that standard protein database sources include Uniprot (as the first) + * and also PDB. (Additional sources are dependent on availability of DAS + * services.) + */ + @Test(groups = { "Functional" }) public void testStandardProtDbs() { - String[] defdb = DBRefSource.PROTEINDBS; + List defdb = new ArrayList(); + defdb.addAll(Arrays.asList(DBRefSource.PROTEINDBS)); + defdb.add(DBRefSource.PDB); List srces = new ArrayList(); + SequenceFetcher sfetcher = new SequenceFetcher(); + boolean pdbFound = false; + for (String ddb : defdb) { - SequenceFetcher sfetcher = new SequenceFetcher(); List srcesfordb = sfetcher.getSourceProxy(ddb); if (srcesfordb != null) { + // TODO is this right? get duplicate entries srces.addAll(srcesfordb); } } - DbSourceProxy uniprot = null; + int i = 0; - // append the selected sequence sources to the default dbs + int uniprotPos = -1; for (DbSourceProxy s : srces) { - if (s.getDbSource().equalsIgnoreCase(DBRefSource.UNIPROT)) + if (s instanceof Uniprot && uniprotPos == -1) { - i++; + uniprotPos = i; } - - if (s instanceof jalview.ws.dbsources.Uniprot) + if (s instanceof Pdb) { - uniprot = s; - break; + pdbFound = true; } + i++; } assertTrue("Failed to find Uniprot source as first source amongst " - + srces.size() + " sources (source was at position " + i + ")", - uniprot != null && i < 2); + + srces.size() + " sources (source was at position " + + uniprotPos + ")", uniprotPos == 0); + assertTrue("Failed to find PDB source amongst " + srces.size() + + " sources", pdbFound); } - @Test(groups = - { "External" }) + /** + * Tests retrieval of one entry from EMBL. Test is dependent on availability + * of network and the EMBL service. + * + * @throws Exception + */ + @Test(groups = { "External" }) public void testEmblUniprotProductRecovery() throws Exception { - String retrievalId = "CAA23748"; // "V00488"; - DbSourceProxy embl = new SequenceFetcher().getSourceProxy(DBRefSource.EMBL).get(0); + String retrievalId = "V00488"; + DbSourceProxy embl = new SequenceFetcher().getSourceProxy( + DBRefSource.EMBL).get(0); assertNotNull("Couldn't find the EMBL retrieval client", embl); verifyProteinNucleotideXref(retrievalId, embl); } - @Test(groups = - { "External" }) + /** + * Tests retrieval of one entry from EMBLCDS. Test is dependent on + * availability of network and the EMBLCDS service. + * + * @throws Exception + */ + @Test(groups = { "External" }) public void testEmblCDSUniprotProductRecovery() throws Exception { String retrievalId = "AAH29712"; @@ -120,24 +179,49 @@ public class DbRefFetcherTest verifyProteinNucleotideXref(retrievalId, embl); } + /** + * Helper method to perform database retrieval and verification of results. + * + * @param retrievalId + * @param embl + * @throws Exception + */ private void verifyProteinNucleotideXref(String retrievalId, DbSourceProxy embl) throws Exception { AlignmentI alsq = embl.getSequenceRecords(retrievalId); assertNotNull("Couldn't find the EMBL record " + retrievalId, alsq); - assertEquals("Didn't retrieve right number of records", 1, alsq.getHeight()); - DBRefEntry[] dr = DBRefUtils.selectRefs(alsq.getSequenceAt(0).getDBRef(), DBRefSource.PROTEINSEQ); + assertEquals("Didn't retrieve right number of records", 1, + alsq.getHeight()); + SequenceI seq = alsq.getSequenceAt(0); + assertEquals("Wrong sequence name", embl.getDbSource() + "|" + + retrievalId, seq.getName()); + List sfs = seq.getSequenceFeatures(); + assertFalse("Sequence features missing", sfs.isEmpty()); + assertTrue( + "Feature not CDS", + FeatureProperties.isCodingFeature(embl.getDbSource(), + sfs.get(0).getType())); + assertEquals(embl.getDbSource(), sfs.get(0).getFeatureGroup()); + List dr = DBRefUtils.selectRefs(seq.getDBRefs(), + new String[] { DBRefSource.UNIPROT }); assertNotNull(dr); - assertEquals("Expected a single Uniprot cross reference", 1, dr.length); - assertEquals("Expected cross refernce map to be one amino acid", dr[0] + assertEquals("Expected a single Uniprot cross reference", 1, dr.size()); + assertEquals("Expected cross reference map to be one amino acid", dr.get(0) .getMap().getMappedWidth(), 1); - assertEquals("Expected local refernce map to be 3 nucleotides", dr[0] + assertEquals("Expected local reference map to be 3 nucleotides", dr.get(0) .getMap().getWidth(), 3); - AlignmentI sprods = CrossRef.findXrefSequences(alsq.getSequencesArray(), true, dr[0].getSource(), alsq.getDataset()); + AlignmentI sprods = new CrossRef(alsq.getSequencesArray(), alsq) + .findXrefSequences(dr.get(0).getSource(), true); assertNotNull( "Couldn't recover cross reference sequence from dataset. Was it ever added ?", sprods); - - + assertEquals("Didn't xref right number of records", 1, + sprods.getHeight()); + SequenceI proteinSeq = sprods.getSequenceAt(0); + assertEquals(proteinSeq.getSequenceAsString(), dr.get(0).getMap().getTo() + .getSequenceAsString()); + assertEquals(dr.get(0).getSource() + "|" + dr.get(0).getAccessionId(), + proteinSeq.getName()); } }