/* * 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.structure; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; import jalview.gui.JvOptionPane; import jalview.io.DataSourceType; import jalview.io.StructureFile; import jalview.util.MapList; import java.util.ArrayList; import java.util.List; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class StructureSelectionManagerTest { @BeforeClass(alwaysRun = true) public void setUpJvOptionPane() { JvOptionPane.setInteractiveMode(false); JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); } private StructureSelectionManager ssm; @BeforeMethod(alwaysRun = true) public void setUp() { StructureImportSettings.setShowSeqFeatures(true); ssm = new StructureSelectionManager(); } @Test(groups = { "Functional" }) public void testRegisterMapping() { AlignedCodonFrame acf1 = new AlignedCodonFrame(); acf1.addMap(new Sequence("s1", "ttt"), new Sequence("p1", "p"), new MapList(new int[] { 1, 3 }, new int[] { 1, 1 }, 1, 1)); AlignedCodonFrame acf2 = new AlignedCodonFrame(); acf2.addMap(new Sequence("s2", "ttt"), new Sequence("p2", "p"), new MapList(new int[] { 1, 3 }, new int[] { 1, 1 }, 1, 1)); ssm.registerMapping(acf1); assertEquals(1, ssm.getSequenceMappings().size()); assertTrue(ssm.getSequenceMappings().contains(acf1)); ssm.registerMapping(acf2); assertEquals(2, ssm.getSequenceMappings().size()); assertTrue(ssm.getSequenceMappings().contains(acf1)); assertTrue(ssm.getSequenceMappings().contains(acf2)); /* * Re-adding the first mapping does nothing */ ssm.registerMapping(acf1); assertEquals(2, ssm.getSequenceMappings().size()); assertTrue(ssm.getSequenceMappings().contains(acf1)); assertTrue(ssm.getSequenceMappings().contains(acf2)); } @Test(groups = { "Functional" }) public void testRegisterMappings() { AlignedCodonFrame acf1 = new AlignedCodonFrame(); acf1.addMap(new Sequence("s1", "ttt"), new Sequence("p1", "p"), new MapList(new int[] { 1, 3 }, new int[] { 1, 1 }, 1, 1)); AlignedCodonFrame acf2 = new AlignedCodonFrame(); acf2.addMap(new Sequence("s2", "ttt"), new Sequence("p2", "p"), new MapList(new int[] { 1, 3 }, new int[] { 1, 1 }, 1, 1)); AlignedCodonFrame acf3 = new AlignedCodonFrame(); acf3.addMap(new Sequence("s3", "ttt"), new Sequence("p3", "p"), new MapList(new int[] { 1, 3 }, new int[] { 1, 1 }, 1, 1)); List set1 = new ArrayList(); set1.add(acf1); set1.add(acf2); List set2 = new ArrayList(); set2.add(acf2); set2.add(acf3); /* * Add both sets twice; each mapping should be added once only */ ssm.registerMappings(set1); ssm.registerMappings(set1); ssm.registerMappings(set2); ssm.registerMappings(set2); assertEquals(3, ssm.getSequenceMappings().size()); assertTrue(ssm.getSequenceMappings().contains(acf1)); assertTrue(ssm.getSequenceMappings().contains(acf2)); assertTrue(ssm.getSequenceMappings().contains(acf3)); } /** * Verify that RESNUM sequence features are present after creating a PDB * mapping */ @Test(groups = { "Functional" }) public void testSetMapping_seqFeatures() { SequenceI seq = new Sequence( "1GAQ|B", "ATYNVKLITPEGEVELQVPDDVYILDQAEEDGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSYLDDGQIADGWVLTCHAYPTSDVVIETHKEEELTGA"); StructureSelectionManager sm = new StructureSelectionManager(); sm.setProcessSecondaryStructure(true); sm.setAddTempFacAnnot(true); StructureFile pmap = sm.setMapping(true, new SequenceI[] { seq }, new String[] { null }, "examples/1gaq.txt", DataSourceType.FILE); assertTrue(pmap != null); assertEquals(3, pmap.getSeqs().size()); assertEquals("1GAQ|A", pmap.getSeqs().get(0).getName()); assertEquals("1GAQ|B", pmap.getSeqs().get(1).getName()); assertEquals("1GAQ|C", pmap.getSeqs().get(2).getName()); /* * Verify a RESNUM sequence feature in the PDBfile sequence */ SequenceFeature sf = pmap.getSeqs().get(0).getSequenceFeatures()[0]; assertEquals("RESNUM", sf.getType()); assertEquals("1gaq", sf.getFeatureGroup()); assertEquals("GLU: 19 1gaqA", sf.getDescription()); /* * Verify a RESNUM sequence feature in the StructureSelectionManager mapped * sequence */ StructureMapping map = sm.getMapping("examples/1gaq.txt")[0]; sf = map.sequence.getSequenceFeatures()[0]; assertEquals("RESNUM", sf.getType()); assertEquals("1gaq", sf.getFeatureGroup()); assertEquals("ALA: 1 1gaqB", sf.getDescription()); } }