X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fws%2FPDBSequenceFetcherTest.java;h=e7f9ff1288b2332899d670f3c61d0f24a6da93ae;hb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;hp=fc23faadc41e0a505bf9708a6ae7c60ced42d357;hpb=47168f025aefdaa044802bd5f8f510ffe43a4808;p=jalview.git diff --git a/test/jalview/ws/PDBSequenceFetcherTest.java b/test/jalview/ws/PDBSequenceFetcherTest.java index fc23faa..e7f9ff1 100644 --- a/test/jalview/ws/PDBSequenceFetcherTest.java +++ b/test/jalview/ws/PDBSequenceFetcherTest.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,49 +20,163 @@ */ package jalview.ws; -import static org.junit.Assert.*; +import static org.testng.Assert.assertEquals; +import static org.testng.AssertJUnit.assertTrue; + +import jalview.bin.Cache; import jalview.datamodel.AlignmentI; +import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; +import jalview.gui.JvOptionPane; +import jalview.structure.StructureImportSettings; +import jalview.structure.StructureImportSettings.StructureParser; import jalview.ws.seqfetcher.DbSourceProxy; +import java.util.Arrays; import java.util.List; -import org.junit.Before; -import org.junit.Test; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; public class PDBSequenceFetcherTest { - SequenceFetcher sf; - @Before - public void setUp() throws Exception + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() { - sf = new SequenceFetcher(false); + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); } - @Test - public void testPdbPerChainRetrieve() throws Exception + SequenceFetcher sf; + + @BeforeMethod(alwaysRun = true) + public void setUp() throws Exception { - List sps = sf - .getSourceProxy("PDB"); - AlignmentI response = sps.get(0).getSequenceRecords("1QIPA"); - assertTrue(response!=null); - assertTrue(response.getHeight()==1); + Cache.loadProperties("test/jalview/io/testProps.jvprops"); + // ensure 'add annotation from structure' is selected + Cache.applicationProperties.setProperty("STRUCT_FROM_PDB", + Boolean.TRUE.toString()); + Cache.applicationProperties.setProperty("ADD_SS_ANN", + Boolean.TRUE.toString()); + + sf = new SequenceFetcher(); } - @Test + + /** + * Test that RNA structure can be added by a call to the RNAML service. + * + * Note this test depends on http://arn-ibmc.in2p3.fr/api/compute/2d which is + * not always reliable. + * + * @throws Exception + */ + @Test(groups = { "Network" }, enabled = true) public void testRnaSeqRetrieve() throws Exception { - List sps = sf - .getSourceProxy("PDB"); + Cache.applicationProperties.setProperty("PDB_DOWNLOAD_FORMAT", "PDB"); + List sps = sf.getSourceProxy("PDB"); AlignmentI response = sps.get(0).getSequenceRecords("2GIS"); - assertTrue(response!=null); - assertTrue(response.getHeight()==1); - for (SequenceI sq:response.getSequences()) + assertTrue(response != null); + assertTrue(response.getHeight() == 1); + for (SequenceI sq : response.getSequences()) + { + assertTrue("No annotation transfered to sequence.", + sq.getAnnotation().length > 0); + assertTrue("No PDBEntry on sequence.", + sq.getAllPDBEntries().size() > 0); + assertTrue( + "No RNA annotation on sequence, possibly http://arn-ibmc.in2p3.fr/api/compute/2d not available?", + sq.getRNA() != null); + } + } + + @Test(groups = { "Network" }, enabled = true) + public void testPdbSeqRetrieve() throws Exception + { + StructureImportSettings.setDefaultStructureFileFormat("PDB"); + StructureImportSettings + .setDefaultPDBFileParser(StructureParser.JALVIEW_PARSER); + + testRetrieveProteinSeqFromPDB(); + } + + @Test(groups = { "Network" }, enabled = true) + public void testmmCifSeqRetrieve() throws Exception + { + StructureImportSettings.setDefaultStructureFileFormat("mmCIF"); + testRetrieveProteinSeqFromPDB(); + } + + private class TestRetrieveObject + { + String id; + + int expectedHeight; + + public TestRetrieveObject(String id, int expectedHeight) { - assertTrue("No annotation transfered to sequence.",sq.getAnnotation().length>0); - assertTrue("No PDBEntry on sequence.",sq.getPDBId().size()>0); - assertTrue("No RNA annotation on sequence.", sq.getRNA()!=null); + super(); + this.id = id; + this.expectedHeight = expectedHeight; } + } + private List toRetrieve = Arrays.asList( + new TestRetrieveObject("1QIP", 4), + new TestRetrieveObject("4IM2", 1)); + + private void testRetrieveProteinSeqFromPDB() throws Exception + { + List sps = sf.getSourceProxy("PDB"); + StringBuilder errors = new StringBuilder(); + for (TestRetrieveObject str : toRetrieve) + { + AlignmentI response = sps.get(0).getSequenceRecords(str.id); + assertTrue("No aligment for " + str.id, response != null); + assertEquals(response.getHeight(), str.expectedHeight, + "Number of chains for " + str.id); + for (SequenceI sq : response.getSequences()) + { + assertTrue("No annotation transfered to sequence " + sq.getName(), + sq.getAnnotation().length > 0); + assertTrue("No PDBEntry on sequence " + sq.getName(), + sq.getAllPDBEntries().size() > 0); + // FIXME: should test that all residues extracted as sequences from + // chains in structure have a mapping to data in the structure + List prev = null; + int lastp = -1; + for (int col = 1; col <= sq.getLength(); col++) + { + List sf = sq.findFeatures(col, col, "RESNUM"); + if (sf.size() != 1) + { + errors.append(str.id + ": " + + "Expected one feature at column (position): " + + (col - 1) + " (" + sq.findPosition(col - 1) + ")" + + ": saw " + sf.size()); + errors.append("\n"); + if (prev != null) + { + errors.append("Last Feature was at position " + lastp + ": " + + prev.get(0).toString()); + errors.append("\n"); + } + } + else + { + prev = sf; + lastp = sq.findPosition(col - 1); + } + } + } + } + if (errors.length() > 0) + { + Assert.fail(errors.toString()); + } + } }