3eefadaab87d6e79af743752a6c03e061faa0ba8
[jalview.git] / test / jalview / controller / AlignViewControllerTest.java
1 package jalview.controller;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertTrue;
5
6 import jalview.datamodel.Sequence;
7 import jalview.datamodel.SequenceFeature;
8 import jalview.datamodel.SequenceGroup;
9 import jalview.datamodel.SequenceI;
10
11 import java.util.BitSet;
12
13 import org.testng.annotations.Test;
14
15 public class AlignViewControllerTest
16 {
17   @Test(groups = "Functional")
18   public void testFindColumnsWithFeature()
19   {
20     SequenceI seq1 = new Sequence("seq1", "aMMMaaaaaaaaaaaaaaaa");
21     SequenceI seq2 = new Sequence("seq2", "aaaMMMMMMMaaaaaaaaaa");
22     SequenceI seq3 = new Sequence("seq3", "aaaaaaaaaaMMMMMaaaaa");
23     SequenceI seq4 = new Sequence("seq3", "aaaaaaaaaaaaaaaaaaaa");
24
25     /*
26      * features start/end are base 1
27      */
28     seq1.addSequenceFeature(new SequenceFeature("Metal", "desc", 2, 4, 0f,
29             null));
30     seq1.addSequenceFeature(new SequenceFeature("Helix", "desc", 1, 15, 0f,
31             null));
32     seq2.addSequenceFeature(new SequenceFeature("Metal", "desc", 4, 10, 0f,
33             null));
34     seq3.addSequenceFeature(new SequenceFeature("Metal", "desc", 11, 15,
35             0f, null));
36
37     /*
38      * select the first three columns --> Metal in seq1 2-3
39      */
40     SequenceGroup sg = new SequenceGroup();
41     sg.setStartRes(0); // base 0
42     sg.setEndRes(2);
43     sg.addSequence(seq1, false);
44     sg.addSequence(seq2, false);
45     sg.addSequence(seq3, false);
46     sg.addSequence(seq4, false);
47
48     BitSet bs = new BitSet();
49     int seqCount = AlignViewController.findColumnsWithFeature("Metal", sg,
50             bs);
51     assertEquals(1, seqCount);
52     assertEquals(2, bs.cardinality());
53     assertTrue(bs.get(1));
54     assertTrue(bs.get(2));
55     
56     /*
57      * select the first four columns: Metal in seq1 2:4, seq2 4:4
58      */
59     sg.setEndRes(3);
60     bs.clear();
61     seqCount = AlignViewController.findColumnsWithFeature("Metal", sg,
62             bs);
63     assertEquals(2, seqCount);
64     assertEquals(3, bs.cardinality());
65     assertTrue(bs.get(1));
66     assertTrue(bs.get(2));
67     assertTrue(bs.get(3));
68
69     /*
70      * select column 11: Metal in seq3 only
71      */
72     sg.setStartRes(10);
73     sg.setEndRes(10);
74     bs.clear();
75     seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs);
76     assertEquals(1, seqCount);
77     assertEquals(1, bs.cardinality());
78     assertTrue(bs.get(10));
79
80     /*
81      * select columns 16-20: no Metal feature
82      */
83     sg.setStartRes(15);
84     sg.setEndRes(19);
85     bs.clear();
86     seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs);
87     assertEquals(0, seqCount);
88     assertEquals(0, bs.cardinality());
89
90     /*
91      * look for a feature that isn't there
92      */
93     sg.setStartRes(0);
94     sg.setEndRes(19);
95     bs.clear();
96     seqCount = AlignViewController.findColumnsWithFeature("Pfam", sg, bs);
97     assertEquals(0, seqCount);
98     assertEquals(0, bs.cardinality());
99   }
100 }