X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fio%2FAnnotatedPDBFileInputTest.java;h=e14a4782a8ba51f04dc6fffc698a52f292fc5986;hb=136c0793b90b72b928c4d77dc109dd5c644e00d3;hp=a6d09cae4921e4d82c800716c3035d6ca707610f;hpb=7cd611e67a32d433b1cccf5ba61a7b67975bd79f;p=jalview.git diff --git a/test/jalview/io/AnnotatedPDBFileInputTest.java b/test/jalview/io/AnnotatedPDBFileInputTest.java index a6d09cae..e14a478 100644 --- a/test/jalview/io/AnnotatedPDBFileInputTest.java +++ b/test/jalview/io/AnnotatedPDBFileInputTest.java @@ -1,29 +1,166 @@ +/* + * 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.io; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertTrue; + +import jalview.bin.Cache; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceI; +import jalview.datamodel.features.SequenceFeatures; import jalview.gui.AlignFrame; +import jalview.gui.JvOptionPane; +import jalview.structure.StructureImportSettings; +import jalview.structure.StructureImportSettings.StructureParser; + +import java.io.File; +import java.util.List; -import org.junit.Before; -import org.junit.Test; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; public class AnnotatedPDBFileInputTest { + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + AlignmentI al; - @Before + String pdbId; + + /** + * Ensure 'process secondary structure from PDB and add annotations' are set + * in preferences, and load PDB example file 1gaq + * + * @throws Exception + */ + @BeforeMethod(alwaysRun = true) public void setup() throws Exception { + Cache.applicationProperties.setProperty("STRUCT_FROM_PDB", + Boolean.TRUE.toString()); + Cache.applicationProperties.setProperty("ADD_SS_ANN", + Boolean.TRUE.toString()); FileLoader loader = new FileLoader(false); AlignFrame af = loader.LoadFileWaitTillLoaded("examples/1gaq.txt", - FormatAdapter.FILE); + DataSourceType.FILE); al = af.getViewport().getAlignment(); + pdbId = al.getSequenceAt(0).getDatasetSequence().getAllPDBEntries() + .get(0).getId(); + StructureImportSettings.setDefaultStructureFileFormat("PDB"); + // StructureImportSettings + // .setDefaultPDBFileParser(StructureParser.JALVIEW_PARSER); + } + + @Test(groups = { "Functional" }) + public void checkNoDuplicates() + { + // not strictly a requirement, but strange things may happen if multiple + // instances of the same annotation are placed in the alignment annotation + // vector + assertNotNull(al.getAlignmentAnnotation()); + // verify that all sequence annotation is doubly referenced + AlignmentAnnotation[] avec = al.getAlignmentAnnotation(); + for (int p = 0; p < avec.length; p++) + { + for (int q = p + 1; q < avec.length; q++) + { + assertTrue("Found a duplicate annotation row " + avec[p].label, + avec[p] != avec[q]); + } + } } - @Test + @Test(groups = { "Functional" }) + public void checkPDBannotationSource() + { + + for (SequenceI asq : al.getSequences()) + { + for (AlignmentAnnotation aa : asq.getAnnotation()) + { + + System.out.println("CalcId: " + aa.getCalcId()); + if (StructureImportSettings.getDefaultPDBFileParser().equals( + StructureParser.JALVIEW_PARSER)) + { + assertTrue(MCview.PDBfile.isCalcIdForFile(aa, pdbId)); + } + } + } + } + + /** + * Check sequence features have been added + */ + @Test(groups = { "Functional" }) + public void checkPDBSequenceFeatures() + { + /* + * 1GAQ/A + */ + List sf = al.getSequenceAt(0).getSequenceFeatures(); + SequenceFeatures.sortFeatures(sf, true); + assertEquals(296, sf.size()); + assertEquals("RESNUM", sf.get(0).getType()); + assertEquals("GLU: 19 1gaqA", sf.get(0).getDescription()); + assertEquals("RESNUM", sf.get(295).getType()); + assertEquals("TYR: 314 1gaqA", sf.get(295).getDescription()); + + /* + * 1GAQ/B + */ + sf = al.getSequenceAt(1).getSequenceFeatures(); + SequenceFeatures.sortFeatures(sf, true); + assertEquals(98, sf.size()); + assertEquals("RESNUM", sf.get(0).getType()); + assertEquals("ALA: 1 1gaqB", sf.get(0).getDescription()); + assertEquals("RESNUM", sf.get(97).getType()); + assertEquals("ALA: 98 1gaqB", sf.get(97).getDescription()); + + /* + * 1GAQ/C + */ + sf = al.getSequenceAt(2).getSequenceFeatures(); + SequenceFeatures.sortFeatures(sf, true); + assertEquals(296, sf.size()); + assertEquals("RESNUM", sf.get(0).getType()); + assertEquals("GLU: 19 1gaqC", sf.get(0).getDescription()); + assertEquals("RESNUM", sf.get(295).getType()); + assertEquals("TYR: 314 1gaqC", sf.get(295).getDescription()); + } + + @Test(groups = { "Functional" }) public void checkAnnotationWiring() { assertTrue(al.getAlignmentAnnotation() != null); @@ -51,4 +188,78 @@ public class AnnotatedPDBFileInputTest } } } + + /** + * @throws java.lang.Exception + */ + @BeforeClass(alwaysRun = true) + public static void setUpBeforeClass() throws Exception + { + jalview.bin.Jalview.main(new String[] { "-props", + "test/jalview/io/testProps.jvprops" }); + } + + /** + * @throws java.lang.Exception + */ + @AfterClass(alwaysRun = true) + public static void tearDownAfterClass() throws Exception + { + jalview.gui.Desktop.instance.closeAll_actionPerformed(null); + + } + + @Test(groups = { "Functional" }) + public void testJalviewProjectRelocationAnnotation() throws Exception + { + + String inFile = "examples/1gaq.txt"; + String tfile = File.createTempFile("JalviewTest", ".jvp") + .getAbsolutePath(); + AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded( + inFile, DataSourceType.FILE); + assertTrue("Didn't read input file " + inFile, af != null); + assertTrue("Failed to store as a project.", + af.saveAlignment(tfile, FileFormat.Jalview)); + af.closeMenuItem_actionPerformed(true); + af = null; + af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(tfile, + DataSourceType.FILE); + assertTrue("Failed to import new project", af != null); + for (SequenceI asq : af.getViewport().getAlignment().getSequences()) + { + SequenceI sq = asq; + while (sq.getDatasetSequence() != null) + { + sq = sq.getDatasetSequence(); + } + assertNotNull(sq.getAllPDBEntries()); + assertEquals("Expected only one PDB ID", 1, sq.getAllPDBEntries() + .size()); + for (PDBEntry pdbentry : sq.getAllPDBEntries()) + { + System.err.println("PDB Entry " + pdbentry.getId() + " " + + pdbentry.getFile()); + boolean exists = false, found = false; + for (AlignmentAnnotation ana : sq.getAnnotation()) + { + System.err.println("CalcId " + ana.getCalcId()); + if (ana.getCalcId() != null + && MCview.PDBfile.isCalcIdHandled(ana.getCalcId())) + { + exists = true; + if (MCview.PDBfile.isCalcIdForFile(ana, pdbentry.getId())) + { + found = true; + } + } + } + if (exists) + { + assertTrue("Couldn't find any annotation for " + pdbentry.getId() + + " (file handle " + pdbentry.getFile() + ")", found); + } + } + } + } }