/* * 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.controller; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import java.util.BitSet; import org.testng.annotations.Test; public class AlignViewControllerTest { @Test(groups = "Functional") public void testFindColumnsWithFeature() { SequenceI seq1 = new Sequence("seq1", "aMMMaaaaaaaaaaaaaaaa"); SequenceI seq2 = new Sequence("seq2", "aaaMMMMMMMaaaaaaaaaa"); SequenceI seq3 = new Sequence("seq3", "aaaaaaaaaaMMMMMaaaaa"); SequenceI seq4 = new Sequence("seq3", "aaaaaaaaaaaaaaaaaaaa"); /* * features start/end are base 1 */ seq1.addSequenceFeature(new SequenceFeature("Metal", "desc", 2, 4, 0f, null)); seq1.addSequenceFeature(new SequenceFeature("Helix", "desc", 1, 15, 0f, null)); seq2.addSequenceFeature(new SequenceFeature("Metal", "desc", 4, 10, 0f, null)); seq3.addSequenceFeature(new SequenceFeature("Metal", "desc", 11, 15, 0f, null)); // disulfide bond is a 'contact feature' - only select its 'start' and 'end' seq3.addSequenceFeature(new SequenceFeature("disulfide bond", "desc", 8, 12, 0f, null)); /* * select the first three columns --> Metal in seq1 2-3 */ SequenceGroup sg = new SequenceGroup(); sg.setStartRes(0); // base 0 sg.setEndRes(2); sg.addSequence(seq1, false); sg.addSequence(seq2, false); sg.addSequence(seq3, false); sg.addSequence(seq4, false); BitSet bs = new BitSet(); int seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs); assertEquals(1, seqCount); assertEquals(2, bs.cardinality()); assertTrue(bs.get(1)); assertTrue(bs.get(2)); /* * select the first four columns: Metal in seq1 2:4, seq2 4:4 */ sg.setEndRes(3); bs.clear(); seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs); assertEquals(2, seqCount); assertEquals(3, bs.cardinality()); assertTrue(bs.get(1)); assertTrue(bs.get(2)); assertTrue(bs.get(3)); /* * select column 11: Metal in seq3 only */ sg.setStartRes(10); sg.setEndRes(10); bs.clear(); seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs); assertEquals(1, seqCount); assertEquals(1, bs.cardinality()); assertTrue(bs.get(10)); /* * select columns 16-20: no Metal feature */ sg.setStartRes(15); sg.setEndRes(19); bs.clear(); seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs); assertEquals(0, seqCount); assertEquals(0, bs.cardinality()); /* * columns 9-11 should not match disulfide bond at 8/12 */ sg.setStartRes(8); sg.setEndRes(10); bs.clear(); seqCount = AlignViewController.findColumnsWithFeature("disulfide bond", sg, bs); assertEquals(0, seqCount); assertEquals(0, bs.cardinality()); /* * columns 6-14 should match disulfide bond at 8/12 */ sg.setStartRes(5); sg.setEndRes(13); bs.clear(); seqCount = AlignViewController.findColumnsWithFeature("disulfide bond", sg, bs); assertEquals(1, seqCount); assertEquals(2, bs.cardinality()); assertTrue(bs.get(7)); assertTrue(bs.get(11)); /* * look for a feature that isn't there */ sg.setStartRes(0); sg.setEndRes(19); bs.clear(); seqCount = AlignViewController.findColumnsWithFeature("Pfam", sg, bs); assertEquals(0, seqCount); assertEquals(0, bs.cardinality()); } }