JAL-2049 separate protein variant per dna variant (combinations tbd)
[jalview.git] / test / jalview / analysis / AlignmentUtilsTests.java
index 7ccbf97..810ef5f 100644 (file)
@@ -1733,52 +1733,97 @@ public class AlignmentUtilsTests
     /*
      * first with no variants on dna
      */
-    LinkedHashMap<Integer, String[][]> variantsMap = AlignmentUtils
+    LinkedHashMap<Integer, List<String[][]>> variantsMap = AlignmentUtils
             .buildDnaVariantsMap(dna, map);
     assertTrue(variantsMap.isEmpty());
 
-    // single allele codon 1, on base 1
+    /*
+     * single allele codon 1, on base 1
+     */
     SequenceFeature sf = new SequenceFeature("sequence_variant", "", 1, 1,
             0f, null);
     sf.setValue("alleles", "T");
+    sf.setValue("ID", "sequence_variant:rs758803211");
     dna.addSequenceFeature(sf);
 
-    // two alleles codon 2, on bases 2 and 3
+    /*
+     * two alleles codon 2, on bases 2 and 3 (distinct variants)
+     */
     sf = new SequenceFeature("sequence_variant", "", 5, 5, 0f, null);
     sf.setValue("alleles", "T");
+    sf.setValue("ID", "sequence_variant:rs758803212");
     dna.addSequenceFeature(sf);
     sf = new SequenceFeature("sequence_variant", "", 6, 6, 0f, null);
     sf.setValue("alleles", "G");
+    sf.setValue("ID", "sequence_variant:rs758803213");
     dna.addSequenceFeature(sf);
 
-    // two alleles codon 3, both on base 2
+    /*
+     * two alleles codon 3, both on base 2 (one variant)
+     */
     sf = new SequenceFeature("sequence_variant", "", 8, 8, 0f, null);
     sf.setValue("alleles", "C, G");
+    sf.setValue("ID", "sequence_variant:rs758803214");
     dna.addSequenceFeature(sf);
 
     // no alleles on codon 4
-    // alleles on codon 5 on all 3 bases
+
+    /*
+     * alleles on codon 5 on all 3 bases (distinct variants)
+     */
     sf = new SequenceFeature("sequence_variant", "", 13, 13, 0f, null);
     sf.setValue("alleles", "C, G"); // (C duplicates given base value)
+    sf.setValue("ID", "sequence_variant:rs758803215");
     dna.addSequenceFeature(sf);
     sf = new SequenceFeature("sequence_variant", "", 14, 14, 0f, null);
     sf.setValue("alleles", "g, a"); // should force to upper-case
+    sf.setValue("ID", "sequence_variant:rs758803216");
     dna.addSequenceFeature(sf);
     sf = new SequenceFeature("sequence_variant", "", 15, 15, 0f, null);
     sf.setValue("alleles", "A, T");
+    sf.setValue("ID", "sequence_variant:rs758803217");
     dna.addSequenceFeature(sf);
 
+    /*
+     * build map - expect variants on positions 1, 2, 3, 5
+     */
     variantsMap = AlignmentUtils.buildDnaVariantsMap(dna, map);
     assertEquals(4, variantsMap.size());
+
+    /*
+     * one variant on protein position 1
+     */
+    assertEquals(1, variantsMap.get(1).size());
     assertTrue(Arrays.deepEquals(new String[][] { { "A", "T" }, { "T" },
-        { "G" } }, variantsMap.get(1)));
+        { "G" } }, variantsMap.get(1).get(0)));
+
+    /*
+     * two variants on protein position 2
+     */
+    assertEquals(2, variantsMap.get(2).size());
     assertTrue(Arrays.deepEquals(new String[][] { { "A" }, { "A", "T" },
-        { "A", "G" } }, variantsMap.get(2)));
+        { "A" } }, variantsMap.get(2).get(0)));
+    assertTrue(Arrays.deepEquals(new String[][] { { "A" }, { "A" },
+        { "A", "G" } }, variantsMap.get(2).get(1)));
+
+    /*
+     * one variant on protein position 3
+     */
+    assertEquals(1, variantsMap.get(3).size());
     assertTrue(Arrays.deepEquals(new String[][] { { "T" },
-        { "T", "C", "G" }, { "T" } }, variantsMap.get(3)));
-    // duplicated bases are not removed here, handled in computePeptideVariants
+        { "T", "C", "G" }, { "T" } }, variantsMap.get(3).get(0)));
+
+    /*
+     * three variants on protein position 5
+     * duplicated bases are not removed here, handled in computePeptideVariants
+     */
+    assertEquals(3, variantsMap.get(5).size());
     assertTrue(Arrays.deepEquals(new String[][] { { "C", "C", "G" },
-        { "C", "G", "A" }, { "C", "A", "T" } }, variantsMap.get(5)));
+        { "C" }, { "C" } }, variantsMap.get(5).get(0)));
+    assertTrue(Arrays.deepEquals(new String[][] { { "C" },
+        { "C", "G", "A" }, { "C" } }, variantsMap.get(5).get(1)));
+    assertTrue(Arrays.deepEquals(new String[][] { { "C" }, { "C" },
+        { "C", "A", "T" } }, variantsMap.get(5).get(2)));
   }
 
   /**