JAL-2256 Corrected AllCols/Rows iterator behaviour for single element bug/JAL-2256
authorkiramt <k.mourao@dundee.ac.uk>
Thu, 18 May 2017 13:09:21 +0000 (14:09 +0100)
committerkiramt <k.mourao@dundee.ac.uk>
Thu, 18 May 2017 13:09:21 +0000 (14:09 +0100)
src/jalview/datamodel/AllColsIterator.java
src/jalview/datamodel/AllRowsIterator.java
test/jalview/datamodel/AllColsIteratorTest.java
test/jalview/datamodel/AllRowsIteratorTest.java

index c7a0bb1..c1296d5 100644 (file)
@@ -48,13 +48,13 @@ public class AllColsIterator implements Iterator<Integer>
   @Override
   public boolean hasNext()
   {
-    return current + 1 <= last;
+    return next <= last;
   }
 
   @Override
   public Integer next()
   {
-    if (current + 1 > last)
+    if (next > last)
     {
       throw new NoSuchElementException();
     }
index aefed60..b6d45f8 100644 (file)
@@ -51,13 +51,13 @@ public class AllRowsIterator implements Iterator<Integer>
   @Override
   public boolean hasNext()
   {
-    return current + 1 <= last;
+    return next <= last;
   }
 
   @Override
   public Integer next()
   {
-    if (current + 1 > last)
+    if (next > last)
     {
       throw new NoSuchElementException();
     }
index fbb20be..3942f0b 100644 (file)
@@ -82,4 +82,21 @@ public class AllColsIteratorTest
     AllColsIterator it = new AllColsIterator(0, 3, hiddenCols);
     it.remove();
   }
+
+  /*
+   * Test iterator behaves correctly when there is only one element in the collection
+   */
+  @Test(groups = { "Functional" })
+  public void testOneElement()
+  {
+    HiddenColumns hidden = new HiddenColumns();
+    AllColsIterator it = new AllColsIterator(0, 0, hidden);
+    int count = 0;
+    while (it.hasNext())
+    {
+      it.next();
+      count++;
+    }
+    assertTrue(count == 1, "hasNext() is false after 1 iteration");
+  }
 }
index fd1d29d..aeff71d 100644 (file)
@@ -34,7 +34,7 @@ public class AllRowsIteratorTest
 {
   AlignmentI al;
 
-  Hashtable<SequenceI, SequenceCollectionI> hiddenRepSequences = new Hashtable<SequenceI, SequenceCollectionI>();
+  Hashtable<SequenceI, SequenceCollectionI> hiddenRepSequences = new Hashtable<>();
 
   @BeforeClass
   public void setup()
@@ -110,4 +110,21 @@ public class AllRowsIteratorTest
 
     hiddenRepSequences.put(allseqs[start], theseSeqs);
   }
+
+  /*
+   * Test iterator behaves correctly when there is only one element in the collection
+   */
+  @Test(groups = { "Functional" })
+  public void testOneElement()
+  {
+    AllRowsIterator it = new AllRowsIterator(0, 0, al);
+    int count = 0;
+    while (it.hasNext())
+    {
+      it.next();
+      count++;
+    }
+    assertTrue(count == 1, "hasNext() is false after 1 iteration");
+  }
+
 }