JAL-2292 squashed bug that breaks feature mapping for different cased residues
[jalview.git] / test / jalview / commands / TrimRegionCommandTest.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.commands;
22
23 import static org.testng.AssertJUnit.assertEquals;
24
25 import jalview.datamodel.Alignment;
26 import jalview.datamodel.AlignmentI;
27 import jalview.datamodel.Sequence;
28 import jalview.datamodel.SequenceI;
29
30 import org.testng.annotations.BeforeMethod;
31 import org.testng.annotations.Test;
32
33 /**
34  * Unit tests for TrimRegionCommand
35  * 
36  * @author gmcarstairs
37  *
38  */
39 public class TrimRegionCommandTest
40 {
41   private AlignmentI al;
42
43   @BeforeMethod(alwaysRun = true)
44   public void setUp()
45   {
46     SequenceI[] seqs = new SequenceI[2];
47     seqs[0] = new Sequence("seq0", "abcde-");
48     seqs[1] = new Sequence("seq1", "-ghjkl");
49     al = new Alignment(seqs);
50     al.setDataset(null);
51   }
52
53   /**
54    * Test performing, undoing and redoing a 'trim left'
55    */
56   @Test(groups = { "Functional" })
57   public void testTrimLeft_withUndoAndRedo()
58   {
59     TrimRegionCommand cmd = new TrimRegionCommand("Remove Left", true,
60             al.getSequencesArray(), 2, al);
61     assertEquals(2, cmd.getSize());
62     assertEquals("cde-", al.getSequenceAt(0).getSequenceAsString());
63     assertEquals("hjkl", al.getSequenceAt(1).getSequenceAsString());
64
65     /*
66      * undo and verify
67      */
68     cmd.undoCommand(new AlignmentI[] { al });
69     assertEquals("abcde-", al.getSequenceAt(0).getSequenceAsString());
70     assertEquals("-ghjkl", al.getSequenceAt(1).getSequenceAsString());
71
72     /*
73      * redo and verify
74      */
75     cmd.doCommand(new AlignmentI[] { al });
76     assertEquals("cde-", al.getSequenceAt(0).getSequenceAsString());
77     assertEquals("hjkl", al.getSequenceAt(1).getSequenceAsString());
78   }
79
80   /**
81    * Trim left of no columns - should do nothing. This is the case where the
82    * first column is selected and 'Remove Left' is selected.
83    */
84   @Test(groups = { "Functional" })
85   public void testTrimLeft_noColumns()
86   {
87     TrimRegionCommand cmd = new TrimRegionCommand("Remove Left", true,
88             al.getSequencesArray(), 0, al);
89     assertEquals(0, cmd.getSize());
90     assertEquals("abcde-", al.getSequenceAt(0).getSequenceAsString());
91     assertEquals("-ghjkl", al.getSequenceAt(1).getSequenceAsString());
92   }
93
94   /**
95    * Trim left of a single column
96    */
97   @Test(groups = { "Functional" })
98   public void testTrimLeft_oneColumn()
99   {
100     TrimRegionCommand cmd = new TrimRegionCommand("Remove Left", true,
101             al.getSequencesArray(), 1, al);
102     assertEquals(1, cmd.getSize());
103     assertEquals("bcde-", al.getSequenceAt(0).getSequenceAsString());
104     assertEquals("ghjkl", al.getSequenceAt(1).getSequenceAsString());
105   }
106
107   /**
108    * Trim right of no columns - should do nothing. This is the case where the
109    * last column is selected and 'Remove Right' is selected.
110    */
111   @Test(groups = { "Functional" })
112   public void testTrimRight_noColumns()
113   {
114     TrimRegionCommand cmd = new TrimRegionCommand("Remove Right", false,
115             al.getSequencesArray(), 5, al);
116     assertEquals(0, cmd.getSize());
117     assertEquals("abcde-", al.getSequenceAt(0).getSequenceAsString());
118     assertEquals("-ghjkl", al.getSequenceAt(1).getSequenceAsString());
119   }
120
121   /**
122    * Trim right of a single column
123    */
124   @Test(groups = { "Functional" })
125   public void testTrimRight_oneColumn()
126   {
127     TrimRegionCommand cmd = new TrimRegionCommand("Remove Right", false,
128             al.getSequencesArray(), 4, al);
129     assertEquals(1, cmd.getSize());
130     assertEquals("abcde", al.getSequenceAt(0).getSequenceAsString());
131     assertEquals("-ghjk", al.getSequenceAt(1).getSequenceAsString());
132   }
133
134   /**
135    * Test performing, undoing and redoing a 'trim right'
136    */
137   @Test(groups = { "Functional" })
138   public void testTrimRight_withUndoAndRedo()
139   {
140     TrimRegionCommand cmd = new TrimRegionCommand("Remove Right", false,
141             al.getSequencesArray(), 2, al);
142     assertEquals(3, cmd.getSize());
143     assertEquals("abc", al.getSequenceAt(0).getSequenceAsString());
144     assertEquals("-gh", al.getSequenceAt(1).getSequenceAsString());
145
146     /*
147      * undo and verify
148      */
149     cmd.undoCommand(new AlignmentI[] { al });
150     assertEquals("abcde-", al.getSequenceAt(0).getSequenceAsString());
151     assertEquals("-ghjkl", al.getSequenceAt(1).getSequenceAsString());
152
153     /*
154      * redo and verify
155      */
156     cmd.doCommand(new AlignmentI[] { al });
157     assertEquals("abc", al.getSequenceAt(0).getSequenceAsString());
158     assertEquals("-gh", al.getSequenceAt(1).getSequenceAsString());
159   }
160 }