JAL-3120 preserve feature colour/mincolour/maxcolour while modifying,
[jalview.git] / test / jalview / datamodel / features / NCNodeTest.java
index 73f957e..4713084 100644 (file)
@@ -4,11 +4,14 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
+import jalview.datamodel.Range;
 import jalview.datamodel.SequenceFeature;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import junit.extensions.PA;
+
 import org.testng.annotations.Test;
 
 public class NCNodeTest
@@ -18,7 +21,7 @@ public class NCNodeTest
   {
     Range r1 = new Range(10, 20);
     NCNode<Range> node = new NCNode<Range>(r1);
-    assertEquals(node.getStart(), 10);
+    assertEquals(node.getBegin(), 10);
     Range r2 = new Range(10, 15);
     node.add(r2);
 
@@ -36,7 +39,7 @@ public class NCNodeTest
   {
     Range r1 = new Range(10, 20);
     NCNode<Range> node = new NCNode<Range>(r1);
-    assertEquals(node.getStart(), 10);
+    assertEquals(node.getBegin(), 10);
     Range r2 = new Range(9, 15);
     node.add(r2);
   }
@@ -48,7 +51,7 @@ public class NCNodeTest
   {
     Range r1 = new Range(10, 20);
     NCNode<Range> node = new NCNode<Range>(r1);
-    assertEquals(node.getStart(), 10);
+    assertEquals(node.getBegin(), 10);
     Range r2 = new Range(12, 21);
     node.add(r2);
   }
@@ -99,4 +102,35 @@ public class NCNodeTest
     assertFalse(node.contains(sf3)); // !sf1.equals(sf3)
   }
 
+  /**
+   * Test method that checks for valid structure. Valid means that all
+   * subregions (if any) lie within the root range, and that all subregions have
+   * valid structure.
+   */
+  @Test(groups = "Functional")
+  public void testIsValid()
+  {
+    Range r1 = new Range(10, 20);
+    Range r2 = new Range(14, 15);
+    Range r3 = new Range(16, 17);
+    NCNode<Range> node = new NCNode<Range>(r1);
+    node.add(r2);
+    node.add(r3);
+
+    /*
+     * node has root range [10-20] and contains an
+     * NCList of [14-15, 16-17]
+     */
+    assertTrue(node.isValid());
+    PA.setValue(r1, "start", 15);
+    assertFalse(node.isValid()); // r2 not within r1
+    PA.setValue(r1, "start", 10);
+    assertTrue(node.isValid());
+    PA.setValue(r1, "end", 16);
+    assertFalse(node.isValid()); // r3 not within r1
+    PA.setValue(r1, "end", 20);
+    assertTrue(node.isValid());
+    PA.setValue(r3, "start", 12);
+    assertFalse(node.isValid()); // r3 should precede r2
+  }
 }