JAL-3120 preserve feature colour/mincolour/maxcolour while modifying,
[jalview.git] / test / jalview / datamodel / features / NCNodeTest.java
index da0aa4e..4713084 100644 (file)
@@ -1,11 +1,17 @@
 package jalview.datamodel.features;
 
 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
@@ -15,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);
 
@@ -33,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);
   }
@@ -45,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);
   }
@@ -75,4 +81,56 @@ public class NCNodeTest
     assertTrue(entries.contains(r1));
     assertTrue(entries.contains(r2));
   }
+
+  /**
+   * Tests for the contains method (uses entry.equals() test)
+   */
+  @Test(groups = "Functional")
+  public void testContains()
+  {
+    SequenceFeature sf1 = new SequenceFeature("type", "desc", 1, 10, 2f,
+            "group");
+    SequenceFeature sf2 = new SequenceFeature("type", "desc", 1, 10, 2f,
+            "group");
+    SequenceFeature sf3 = new SequenceFeature("type", "desc", 1, 10, 2f,
+            "anothergroup");
+    NCNode<SequenceFeature> node = new NCNode<SequenceFeature>(sf1);
+
+    assertFalse(node.contains(null));
+    assertTrue(node.contains(sf1));
+    assertTrue(node.contains(sf2)); // sf1.equals(sf2)
+    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
+  }
 }