/* * 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.ws.seqfetcher; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertTrue; import jalview.analysis.CrossRef; import jalview.datamodel.AlignmentI; import jalview.datamodel.DBRefEntry; import jalview.datamodel.DBRefSource; import jalview.util.DBRefUtils; import jalview.ws.SequenceFetcher; import java.util.ArrayList; import java.util.List; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** * @author jimp * */ public class DbRefFetcherTest { /** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { jalview.bin.Cache.initLogger(); } /** * @throws java.lang.Exception */ @AfterClass public static void tearDownAfterClass() throws Exception { } @Test(groups ={ "Functional" }) public void testStandardProtDbs() { String[] defdb = DBRefSource.PROTEINDBS; List srces = new ArrayList(); for (String ddb : defdb) { SequenceFetcher sfetcher = new SequenceFetcher(); List srcesfordb = sfetcher.getSourceProxy(ddb); if (srcesfordb != null) { srces.addAll(srcesfordb); } } DbSourceProxy uniprot = null; int i = 0; // append the selected sequence sources to the default dbs for (DbSourceProxy s : srces) { if (s.getDbSource().equalsIgnoreCase(DBRefSource.UNIPROT)) { i++; } if (s instanceof jalview.ws.dbsources.Uniprot) { uniprot = s; break; } } assertTrue("Failed to find Uniprot source as first source amongst " + srces.size() + " sources (source was at position " + i + ")", uniprot != null && i < 2); } @Test(groups = { "External" }) public void testEmblUniprotProductRecovery() throws Exception { String retrievalId = "CAA23748"; // "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" }) public void testEmblCDSUniprotProductRecovery() throws Exception { String retrievalId = "AAH29712"; DbSourceProxy embl = new SequenceFetcher().getSourceProxy( DBRefSource.EMBLCDS).get(0); assertNotNull("Couldn't find the EMBL retrieval client", embl); verifyProteinNucleotideXref(retrievalId, embl); } 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); assertNotNull(dr); assertEquals("Expected a single Uniprot cross reference", 1, dr.length); assertEquals("Expected cross refernce map to be one amino acid", dr[0] .getMap().getMappedWidth(), 1); assertEquals("Expected local refernce map to be 3 nucleotides", dr[0] .getMap().getWidth(), 3); AlignmentI sprods = CrossRef.findXrefSequences(alsq.getSequencesArray(), true, dr[0].getSource(), alsq.getDataset()); assertNotNull( "Couldn't recover cross reference sequence from dataset. Was it ever added ?", sprods); } }