JAL-4386 - Implementation of substitution matrix and test cases.
[jalview.git] / test / jalview / analysis / scoremodels / SecondaryStructureDistanceModelTest.java
index 68c740c..f250525 100644 (file)
@@ -42,183 +42,12 @@ import jalview.math.MatrixI;
 
 import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
 // This class tests methods in Class SecondaryStructureDistanceModel 
 public class SecondaryStructureDistanceModelTest
 {
-
-  @BeforeClass(alwaysRun = true)
-  public void setUpJvOptionPane()
-  {
-    JvOptionPane.setInteractiveMode(false);
-    JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
-  }
-
-  public static String alntestFile = "FER1_MESCR/72-76 DVYIL\nFER1_SPIOL/71-75 DVYIL\nFER3_RAPSA/21-25 DVYVL\nFER1_MAIZE/73-77 DVYIL\n";
-
-  int[] sf1 = new int[] { 74, 74, 73, 73, 23, 23, -1, -1 };
-
-  int[] sf2 = new int[] { -1, -1, 74, 75, -1, -1, 76, 77 };
-
-  int[] sf3 = new int[] { -1, -1, -1, -1, -1, -1, 76, 77 };
-
-  /**
-   * <pre>
-   * Load test alignment and add features to sequences: 
-   *      FER1_MESCR FER1_SPIOL FER3_RAPSA FER1_MAIZE 
-   *  sf1     X          X          X  
-   *  sf2                X                     X 
-   *  sf3                                      X
-   * </pre>
-   * 
-   * @return
-   */
-  public AlignFrame getTestAlignmentFrame()
-  {
-    AlignFrame alf = new FileLoader(false)
-            .LoadFileWaitTillLoaded(alntestFile, DataSourceType.PASTE);
-    AlignmentI al = alf.getViewport().getAlignment();
-    Assert.assertEquals(al.getHeight(), 4);
-    Assert.assertEquals(al.getWidth(), 5);
-    for (int i = 0; i < 4; i++)
-    {
-      SequenceI ds = al.getSequenceAt(i).getDatasetSequence();
-      if (sf1[i * 2] > 0)
-      {
-        ds.addSequenceFeature(new SequenceFeature("sf1", "sf1", sf1[i * 2],
-                sf1[i * 2 + 1], "sf1"));
-      }
-      if (sf2[i * 2] > 0)
-      {
-        ds.addSequenceFeature(new SequenceFeature("sf2", "sf2", sf2[i * 2],
-                sf2[i * 2 + 1], "sf2"));
-      }
-      if (sf3[i * 2] > 0)
-      {
-        ds.addSequenceFeature(new SequenceFeature("sf3", "sf3", sf3[i * 2],
-                sf3[i * 2 + 1], "sf3"));
-      }
-    }
-    alf.setShowSeqFeatures(true);
-    alf.getFeatureRenderer().setVisible("sf1");
-    alf.getFeatureRenderer().setVisible("sf2");
-    alf.getFeatureRenderer().setVisible("sf3");
-    alf.getFeatureRenderer().findAllFeatures(true);
-    Assert.assertEquals(
-            alf.getFeatureRenderer().getDisplayedFeatureTypes().size(), 3,
-            "Number of feature types");
-    assertTrue(alf.getCurrentView().areFeaturesDisplayed());
-    return alf;
-  }
-
-
-
-  /**
-   * Verify computed distances of sequences with similar secondary structures
-   */
-  @Test(groups = "Functional")
-  public void testFindDistances_AllSimilar()
-  {
-    AlignFrame af = setupAlignmentView("All Similar");
-    AlignViewport viewport = af.getViewport();
-    AlignmentView view = viewport.getAlignmentView(false);
-
-    ScoreModelI sm = new SecondaryStructureDistanceModel();
-    sm = ScoreModels.getInstance().getScoreModel(sm.getName(),
-            af.alignPanel);
-
-    /*
-     * feature distance model always normalises by region width
-     */
-
-    SimilarityParamsI params = new SimilarityParams(false, true, true, true);
-    params.setSecondaryStructureSource("3D Structures");
-    MatrixI distances = sm.findDistances(view, params);
-    assertEquals(distances.getValue(0, 0), 0d);
-    assertEquals(distances.getValue(1, 1), 0d);
-    assertEquals(distances.getValue(0, 1), 0d / 4); 
-    assertEquals(distances.getValue(1, 0), 0d / 4);
-  }
-  
-  /**
-   * Verify computed distances of sequences with partially similar secondary structures
-   */
-  @Test(groups = "Functional")
-  public void testFindDistances_PartiallySimilar()
-  {
-    AlignFrame af = setupAlignmentView("Partially Similar");
-    AlignViewport viewport = af.getViewport();
-    AlignmentView view = viewport.getAlignmentView(false);
-
-    ScoreModelI sm = new SecondaryStructureDistanceModel();
-    sm = ScoreModels.getInstance().getScoreModel(sm.getName(),
-            af.alignPanel);
-
-    /*
-     * score = 0 + 0 + 2 + 2 = 4/4
-     */
-    SimilarityParamsI params = new SimilarityParams(false, true, true, true);
-    params.setSecondaryStructureSource("3D Structures");
-    MatrixI distances = sm.findDistances(view, params);
-    assertEquals(distances.getValue(0, 0), 0d);
-    assertEquals(distances.getValue(1, 1), 0d);
-    assertEquals(distances.getValue(0, 1), 1d); 
-    assertEquals(distances.getValue(1, 0), 1d);
-  }
-  
-  /**
-   * Verify computed distances of sequences with dissimilar secondary structures
-   */
-  @Test(groups = "Functional")
-  public void testFindDistances_notSimilar()
-  {
-    AlignFrame af = setupAlignmentView("Not Similar");
-    AlignViewport viewport = af.getViewport();
-    AlignmentView view = viewport.getAlignmentView(false);
-
-    ScoreModelI sm = new SecondaryStructureDistanceModel();
-    sm = ScoreModels.getInstance().getScoreModel(sm.getName(),
-            af.alignPanel);
-
-    /*
-     * score = 2 + 2 + 2 + 2 = 8/4
-     */
-    SimilarityParamsI params = new SimilarityParams(false, true, true, true);
-    params.setSecondaryStructureSource("3D Structures");
-    MatrixI distances = sm.findDistances(view, params);
-    assertEquals(distances.getValue(0, 0), 0d);
-    assertEquals(distances.getValue(1, 1), 0d);
-    assertEquals(distances.getValue(0, 1), 2d); 
-    assertEquals(distances.getValue(1, 0), 2d);
-  }
-  
-  /**
-   * Verify computed distances of sequences with dissimilar secondary structures
-   * with coil structure represented as null
-   */
-  @Test(groups = "Functional")
-  public void testFindDistances_withCoil()
-  {
-    AlignFrame af = setupAlignmentView("With Coil");
-    AlignViewport viewport = af.getViewport();
-    AlignmentView view = viewport.getAlignmentView(false);
-
-    ScoreModelI sm = new SecondaryStructureDistanceModel();
-    sm = ScoreModels.getInstance().getScoreModel(sm.getName(),
-            af.alignPanel);
-
-    /*
-     * score = 2 + 2 + 2 + 2 = 8/4
-     */
-    SimilarityParamsI params = new SimilarityParams(false, true, true, true);
-    params.setSecondaryStructureSource("3D Structures");
-    MatrixI distances = sm.findDistances(view, params);
-    assertEquals(distances.getValue(0, 0), 0d);
-    assertEquals(distances.getValue(1, 1), 0d);
-    assertEquals(distances.getValue(0, 1), 2d); 
-    assertEquals(distances.getValue(1, 0), 2d);
-  }
   
   /**
    * Verify computed distances of sequences with gap
@@ -569,5 +398,38 @@ public class SecondaryStructureDistanceModelTest
     af.getFeatureRenderer().findAllFeatures(true);
     return af;
   }
+  
+  
+  @DataProvider(name = "testData")
+  public Object[][] testData() {
+      return new Object[][] {
+              {"All Similar", 0d, 0d, 0d, 0d / 4},
+              {"Partially Similar", 0d, 0d, 1d, 1d},
+              {"Not Similar", 0d, 0d, 2d, 2d},
+              {"With Coil", 0d, 0d, 2d, 2d},
+      };
+  }
 
+  @Test(dataProvider = "testData")
+  public void testFindDistances(String scenario, double expectedValue00, double expectedValue11,
+                                 double expectedValue01, double expectedValue10) {
+      AlignFrame af = setupAlignmentView(scenario);
+      AlignViewport viewport = af.getViewport();
+      AlignmentView view = viewport.getAlignmentView(false);
+
+      ScoreModelI sm = new SecondaryStructureDistanceModel();
+      sm = ScoreModels.getInstance().getScoreModel(sm.getName(),
+              af.alignPanel);
+
+      SimilarityParamsI params = new SimilarityParams(false, true, true, true);
+      params.setSecondaryStructureSource("3D Structures");
+      MatrixI distances = sm.findDistances(view, params);
+
+      assertEquals(distances.getValue(0, 0), expectedValue00);
+      assertEquals(distances.getValue(1, 1), expectedValue11);
+      assertEquals(distances.getValue(0, 1), expectedValue01);
+      assertEquals(distances.getValue(1, 0), expectedValue10);
+  }
+
+  
 }