/*
* 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());
}
}