/* * 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.gui; import static org.junit.Assert.assertNotEquals; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNotSame; import static org.testng.Assert.assertSame; import static org.testng.Assert.assertTrue; import jalview.api.FeatureColourI; import jalview.bin.Cache; import jalview.bin.Jalview; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentView; import jalview.datamodel.HiddenColumns; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.io.DataSourceType; import jalview.io.FileLoader; import jalview.project.Jalview2xmlTests; import jalview.renderer.ResidueShaderI; import jalview.schemes.BuriedColourScheme; import jalview.schemes.FeatureColour; import jalview.schemes.HelixColourScheme; import jalview.schemes.JalviewColourScheme; import jalview.schemes.StrandColourScheme; import jalview.schemes.TurnColourScheme; import jalview.util.MessageManager; import java.awt.Color; import java.util.Arrays; import java.util.Iterator; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class SplitFrameTest { AlignFrame dnaAf, proteinAf; SplitFrame testSplitFrame; @BeforeClass(alwaysRun = true) public static void setUpBeforeClass() throws Exception { setUpJvOptionPane(); /* * use read-only test properties file */ Cache.loadProperties("test/jalview/io/testProps.jvprops"); Jalview.main(new String[] { "-nonews" }); } @AfterMethod(alwaysRun = true) public void tearDown() { Desktop.instance.closeAll_actionPerformed(null); } /** * configure (read-only) properties for test to ensure Consensus is computed * for colour Above PID testing */ @BeforeMethod(alwaysRun = true) public void setUp() { Cache.loadProperties("test/jalview/io/testProps.jvprops"); Cache.applicationProperties.setProperty("SHOW_IDENTITY", Boolean.TRUE.toString()); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( "examples/testdata/MN908947.jvp", DataSourceType.FILE); /* * wait for Consensus thread to complete */ synchronized (this) { while (af.getViewport().getConsensusSeq() == null) { try { wait(50); } catch (InterruptedException e) { } } } testSplitFrame = (SplitFrame) af.getSplitViewContainer(); proteinAf=af.getViewport().getAlignment().isNucleotide() ? testSplitFrame.getComplementAlignFrame(af) : af; dnaAf=testSplitFrame.getComplementAlignFrame(proteinAf); } public static void setUpJvOptionPane() { JvOptionPane.setInteractiveMode(false); JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); } @Test(groups= {"Functional"}) public void testAlignAsSplitFrame() { /* * If alignment was requested from one half of a SplitFrame, show in a * SplitFrame with the other pane similarly aligned. */ AlignFrame requestedBy = proteinAf; AlignmentI wholeProteinAl = proteinAf.getViewport().getAlignment(); SequenceI[] sel = wholeProteinAl.getSequencesArray(); // Select 3 sequences, from columns 3-7 inclusive SequenceGroup selRegion = new SequenceGroup( Arrays.asList(sel[0], sel[1], sel[3])); selRegion.setStartRes(3); selRegion.setEndRes(7); proteinAf.getViewport().setSelectionGroup(selRegion); proteinAf.getViewport().sendSelection(); assertNotNull(dnaAf.getViewport().getSelectionGroup()); AlignmentView inputView = proteinAf.gatherSequencesForAlignment(); assertEquals(inputView.getSequences().length, 3); assertEquals(inputView.getWidth(), 5); assertNotNull(inputView.getComplementView()); Object alAndHidden[] = inputView.getAlignmentAndHiddenColumns( proteinAf.getViewport().getGapCharacter()); AlignmentI result = new Alignment((SequenceI[]) alAndHidden[0]); result.setHiddenColumns((HiddenColumns) alAndHidden[1]); // check we are referring to the expected alignment assertEquals( requestedBy.getSplitViewContainer().getComplement(requestedBy), dnaAf.getCurrentView().getAlignment()); // and that datasets are consistent (if not, there's a problem elsewhere in // splitframe construction AlignmentI complementDs = requestedBy.getSplitViewContainer() .getComplement(requestedBy).getDataset(); assertTrue(dnaAf.getViewport().getAlignment().getDataset() == dnaAf .getViewport().getAlignment().getDataset()); assertTrue(complementDs == proteinAf.getViewport().getAlignment() .getDataset()); char gc = requestedBy.getSplitViewContainer().getComplement(requestedBy) .getGapCharacter(); AlignmentI complement = inputView.getComplementView() .getVisibleAlignment(gc); String complementTitle = requestedBy.getSplitViewContainer() .getComplementTitle(requestedBy); // becomes null if the alignment window was closed before the alignment // job finished. AlignmentI copyComplement = new Alignment(complement); // todo should this be done by copy constructor? copyComplement.setGapCharacter(complement.getGapCharacter()); // share the same dataset (and the mappings it holds) copyComplement.setDataset(complementDs); copyComplement.alignAs(result); // check shape is as expected assertEquals(copyComplement.getWidth(), result.getWidth() * 3); assertEquals(copyComplement.getHeight(), result.getHeight()); } }