9d1482299722c53d944c63ef5457ae1d94ef0213
[jalview.git] / test / jalview / datamodel / RangeElementsIteratorTest.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.datamodel;
22
23 import static org.testng.Assert.assertTrue;
24
25 import java.util.Iterator;
26 import java.util.NoSuchElementException;
27
28 import org.testng.annotations.BeforeClass;
29 import org.testng.annotations.Test;
30
31 public class RangeElementsIteratorTest
32 {
33   HiddenColumns hiddenCols;
34
35   HiddenColumns hiddenColsAtStart;
36
37   @BeforeClass(groups = { "Functional" })
38   public void setup()
39   {
40     hiddenCols = new HiddenColumns();
41     hiddenCols.hideColumns(2, 4);
42
43     hiddenColsAtStart = new HiddenColumns();
44     hiddenColsAtStart.hideColumns(0, 2);
45   }
46
47   /*
48    * Test iterator iterates correctly through the columns
49    * when alignment has hidden cols
50    */
51   @Test(groups = { "Functional" })
52   public void testHasNextAndNextWithHidden()
53   {
54     Iterator<Integer> it = hiddenCols.getVisibleColsIterator(0, 6);
55     int count = 0;
56     while (it.hasNext())
57     {
58       int result = it.next();
59       System.out.println(result);
60       count++;
61     }
62     assertTrue(count == 4, "hasNext() is false after 4 iterations");
63   }
64
65   /*
66    * Test iterator iterates correctly through the columns
67    * when alignment has no hidden cols
68    */
69   @Test(groups = { "Functional" })
70   public void testHasNextAndNextNoHidden()
71   {
72     HiddenColumns test = new HiddenColumns();
73     Iterator<Integer> it2 = test.getVisibleColsIterator(0, 3);
74     int count = 0;
75     while (it2.hasNext())
76     {
77       it2.next();
78       count++;
79     }
80     assertTrue(count == 4, "hasNext() is false after 4 iterations");
81   }
82
83   /*
84    * Test iterator iterates correctly through the columns
85    * when alignment has hidden cols at start
86    */
87   @Test(groups = { "Functional" })
88   public void testHasNextAndNextStartHidden()
89   {
90     Iterator<Integer> it3 = hiddenColsAtStart.getVisibleColsIterator(0, 6);
91     int count = 0;
92     while (it3.hasNext())
93     {
94       it3.next();
95       count++;
96     }
97     assertTrue(count == 4, "hasNext() is false after 4 iterations");
98   }
99
100   /*
101    * Test iterator iterates correctly through the columns
102    * when alignment has hidden cols at end
103    */
104   @Test(groups = { "Functional" })
105   public void testHasNextAndNextEndHidden()
106   {
107     Iterator<Integer> it4 = hiddenCols.getVisibleColsIterator(0, 4);
108     int count = 0;
109     while (it4.hasNext())
110     {
111       it4.next();
112       count++;
113     }
114     assertTrue(count == 2, "hasNext() is false after 2 iterations");
115
116   }
117
118   /*
119    * Test iterator always throws NoSuchElementException at end of iteration
120    * when alignment has hidden cols
121    */
122   @Test(
123     groups = { "Functional" },
124     expectedExceptions = { NoSuchElementException.class })
125   public void testLastNextWithHidden() throws NoSuchElementException
126   {
127     Iterator<Integer> it = hiddenCols.getVisibleColsIterator(0, 3);
128     while (it.hasNext())
129     {
130       it.next();
131     }
132     it.next();
133   }
134
135   /*
136    * Test iterator always throws NoSuchElementException at end of iteration
137    * when alignment has no hidden cols
138    */
139   @Test(
140     groups = { "Functional" },
141     expectedExceptions = { NoSuchElementException.class })
142   public void testLastNextNoHidden() throws NoSuchElementException
143   {
144     HiddenColumns test = new HiddenColumns();
145     Iterator<Integer> it2 = test.getVisibleColsIterator(0, 3);
146     while (it2.hasNext())
147     {
148       it2.next();
149     }
150     it2.next();
151   }
152
153   /*
154    * Test iterator always throws NoSuchElementException at end of iteration
155    * when alignment has hidden cols at start
156    */
157   @Test(
158     groups = { "Functional" },
159     expectedExceptions = { NoSuchElementException.class })
160   public void testLastNextStartHidden() throws NoSuchElementException
161   {
162     Iterator<Integer> it3 = hiddenColsAtStart.getVisibleColsIterator(0, 6);
163     while (it3.hasNext())
164     {
165       it3.next();
166     }
167     it3.next();
168   }
169
170   /*
171    * Test iterator always throws NoSuchElementException at end of iteration
172    * when alignment has hidden cols at end
173    */
174   @Test(
175     groups = { "Functional" },
176     expectedExceptions = { NoSuchElementException.class })
177   public void testLastNextEndHidden() throws NoSuchElementException
178   {
179     Iterator<Integer> it4 = hiddenCols.getVisibleColsIterator(0, 4);
180     while (it4.hasNext())
181     {
182       it4.next();
183     }
184     it4.next();
185   }
186
187   /*
188    * Test calls to remove throw UnsupportedOperationException
189    */
190   @Test(
191     groups = { "Functional" },
192     expectedExceptions = { UnsupportedOperationException.class })
193   public void testRemove() throws UnsupportedOperationException
194   {
195     Iterator<Integer> it = hiddenCols.getVisibleColsIterator(0, 3);
196     it.remove();
197   }
198 }