Merge branch 'develop' into feature/JAL-3390hideUnmappedStructure
[jalview.git] / test / jalview / ext / jmol / JmolCommandsTest.java
index 21f7e19..c0bb629 100644 (file)
@@ -55,7 +55,10 @@ public class JmolCommandsTest
     testee = new JmolCommands();
   }
 
-  @Test(groups = { "Functional" })
+  /**
+   * Test for the now deprecated version of getColourBySequenceCommand
+   */
+  @Test(groups = { "Functional" }, enabled = false)
   public void testGetColourBySequenceCommands_hiddenColumns()
   {
     /*
@@ -93,16 +96,15 @@ public class JmolCommandsTest
             "B", map, null);
     ssm.addStructureMapping(sm2);
 
-    String[] commands = testee.colourBySequence(ssm,
-            files,
-            seqs, sr, af.alignPanel);
+    String[] commands = testee.colourBySequence(ssm, files, seqs,
+            sr,
+            af.alignPanel);
     assertEquals(commands.length, 2);
 
     String chainACommand = commands[0];
     // M colour is #82827d == (130, 130, 125) (see strand.html help page)
     assertTrue(
-            chainACommand.contains("select 21:A/1.1;color[130,130,125]")); // first
-                                                                           // one
+            chainACommand.contains("select 21:A/1.1;color[130,130,125]")); // first one
     // H colour is #60609f == (96, 96, 159)
     assertTrue(chainACommand.contains(";select 22:A/1.1;color[96,96,159]"));
     // hidden columns are Gray (128, 128, 128)
@@ -126,40 +128,65 @@ public class JmolCommandsTest
             chainBCommand.contains(";select 26-30:B/2.1;color[73,73,182]"));
   }
 
-  @Test(groups = "Functional")
+  @Test(groups = { "Functional" })
   public void testGetAtomSpec()
   {
     AtomSpecModel model = new AtomSpecModel();
     assertEquals(testee.getAtomSpec(model, false), "");
-    model.addRange("1", 2, 4, "A");
-    assertEquals(testee.getAtomSpec(model, false), "2-4:A/1.1");
-    model.addRange("1", 8, 8, "A");
-    assertEquals(testee.getAtomSpec(model, false), "2-4:A/1.1|8:A/1.1");
-    model.addRange("1", 5, 7, "B");
-    assertEquals(testee.getAtomSpec(model, false),
-            "2-4:A/1.1|8:A/1.1|5-7:B/1.1");
-    model.addRange("1", 3, 5, "A");
-    assertEquals(testee.getAtomSpec(model, false),
-            "2-5:A/1.1|8:A/1.1|5-7:B/1.1");
-    model.addRange("2", 1, 4, "B");
-    assertEquals(testee.getAtomSpec(model, false),
-            "2-5:A/1.1|8:A/1.1|5-7:B/1.1|1-4:B/2.1");
-    model.addRange("2", 5, 9, "C");
-    assertEquals(testee.getAtomSpec(model, false),
-            "2-5:A/1.1|8:A/1.1|5-7:B/1.1|1-4:B/2.1|5-9:C/2.1");
-    model.addRange("1", 8, 10, "B");
-    assertEquals(testee.getAtomSpec(model, false),
-            "2-5:A/1.1|8:A/1.1|5-10:B/1.1|1-4:B/2.1|5-9:C/2.1");
-    model.addRange("1", 8, 9, "B");
-    assertEquals(testee.getAtomSpec(model, false),
-            "2-5:A/1.1|8:A/1.1|5-10:B/1.1|1-4:B/2.1|5-9:C/2.1");
-    model.addRange("2", 3, 10, "C"); // subsumes 5-9
-    assertEquals(testee.getAtomSpec(model, false),
-            "2-5:A/1.1|8:A/1.1|5-10:B/1.1|1-4:B/2.1|3-10:C/2.1");
-    model.addRange("5", 25, 35, " ");
-    assertEquals(testee.getAtomSpec(model, false),
-            "2-5:A/1.1|8:A/1.1|5-10:B/1.1|1-4:B/2.1|3-10:C/2.1|25-35:/5.1");
 
+    /*
+     * Jalview numbers models from 0, Jmol from 1
+     */
+    model.addRange("2", 2, 4, "A");
+    assertEquals(testee.getAtomSpec(model, false), "2-4:A/2.1");
+
+    model.addRange("2", 8, 8, "A");
+    assertEquals(testee.getAtomSpec(model, false), "(2-4,8)&:A/2.1");
+
+    model.addRange("2", 5, 7, "B");
+    assertEquals(testee.getAtomSpec(model,
+            false),
+            "(2-4,8)&:A/2.1,5-7:B/2.1");
+
+    model.addRange("2", 3, 5, "A");
+    // 3-5 merges with 2-4 to make 2-5:
+    assertEquals(testee.getAtomSpec(model,
+            false),
+            "(2-5,8)&:A/2.1,5-7:B/2.1");
+
+    model.addRange("1", 1, 4, "B");
+    assertEquals(testee.getAtomSpec(model,
+            false),
+            "1-4:B/1.1,(2-5,8)&:A/2.1,5-7:B/2.1");
+
+    model.addRange("1", 5, 9, "C");
+    assertEquals(testee.getAtomSpec(model,
+            false),
+            "1-4:B/1.1,5-9:C/1.1,(2-5,8)&:A/2.1,5-7:B/2.1");
+
+    model.addRange("2", 8, 10, "B");
+    // 8-10 extends 5-7 to make 5-10
+    assertEquals(testee.getAtomSpec(model,
+            false),
+            "1-4:B/1.1,5-9:C/1.1,(2-5,8)&:A/2.1,5-10:B/2.1");
+
+    model.addRange("2", 8, 9, "B");
+    // subsumed by 5-10 so makes no difference
+    assertEquals(testee.getAtomSpec(model,
+            false),
+            "1-4:B/1.1,5-9:C/1.1,(2-5,8)&:A/2.1,5-10:B/2.1");
+
+    model.addRange("1", 3, 10, "C");
+    // subsumes 5-9 so replaces it
+    assertEquals(testee.getAtomSpec(model,
+            false),
+            "1-4:B/1.1,3-10:C/1.1,(2-5,8)&:A/2.1,5-10:B/2.1");
+
+    // empty chain code - e.g. from homology modelling
+    model.addRange("6", 25, 35, " ");
+    assertEquals(testee.getAtomSpec(model,
+            false),
+            "1-4:B/1.1,3-10:C/1.1,(2-5,8)&:A/2.1,5-10:B/2.1,25-35:/6.1");
   }
 
   @Test(groups = { "Functional" })
@@ -180,8 +207,8 @@ public class JmolCommandsTest
     // they were added; within colour, by model, by chain, ranges in start order
     List<StructureCommandI> commands = testee.colourBySequence(map);
     assertEquals(commands.size(), 1);
-    String expected1 = "select 2-5:A/1.1|9-23:A/1.1|7:B/1.1|1:A/2.1|4-7:B/2.1;color[0,0,255]";
-    String expected2 = "select 3-5:A/2.1|8:A/2.1;color[255,255,0]";
+    String expected1 = "select (2-5,9-23)&:A/1.1,7:B/1.1,1:A/2.1,4-7:B/2.1;color[0,0,255]";
+    String expected2 = "select (3-5,8)&:A/2.1;color[255,255,0]";
     String expected3 = "select 3-9:A/1.1;color[255,0,0]";
     assertEquals(commands.get(0).getCommand(),
             expected1 + ";" + expected2 + ";" + expected3);
@@ -201,8 +228,8 @@ public class JmolCommandsTest
     List<StructureCommandI> command = testee.superposeStructures(ref,
             toAlign);
     assertEquals(command.size(), 1);
-    String refSpec = "12-14:A/1.1|18:B/1.1|22-23:B/1.1";
-    String toAlignSpec = "15-17:B/2.1|20-21:B/2.1|22:C/2.1";
+    String refSpec = "12-14:A/1.1,(18,22-23)&:B/1.1";
+    String toAlignSpec = "(15-17,20-21)&:B/2.1,22:C/2.1";
     String expected = String.format(
             "compare {2.1} {1.1} SUBSET {(*.CA | *.P) and conformation=1} ATOMS {%s}{%s} ROTATE TRANSLATE ;select %s|%s;cartoons",
             toAlignSpec, refSpec, toAlignSpec, refSpec);