Merge branch 'bug/JAL-4313_cme_in_tests' into patch/JAL-4311_import_pLDDT_scores_from...
[jalview.git] / test / jalview / datamodel / features / FeatureMatcherTest.java
index fbbdbd5..117b6e9 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.datamodel.features;
 
 import static org.testng.Assert.assertEquals;
@@ -6,14 +26,17 @@ import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertSame;
 import static org.testng.Assert.assertTrue;
 
-import jalview.datamodel.SequenceFeature;
-import jalview.util.MessageManager;
-import jalview.util.matcher.Condition;
-
 import java.util.Locale;
 
 import org.testng.annotations.Test;
 
+import jalview.datamodel.SequenceFeature;
+import jalview.util.MessageManager;
+import jalview.util.matcher.Condition;
+import jalview.util.matcher.Matcher;
+import jalview.util.matcher.MatcherI;
+import junit.extensions.PA;
+
 public class FeatureMatcherTest
 {
   @Test(groups = "Functional")
@@ -95,8 +118,8 @@ public class FeatureMatcherTest
     /*
      * a numeric matcher - MatcherTest covers more conditions
      */
-    FeatureMatcherI fm = FeatureMatcher
-            .byAttribute(Condition.GE, "-2", "AF");
+    FeatureMatcherI fm = FeatureMatcher.byAttribute(Condition.GE, "-2",
+            "AF");
     SequenceFeature sf = new SequenceFeature("Cath", "desc", 11, 12, "grp");
     assertFalse(fm.matches(sf));
     sf.setValue("AF", "foobar");
@@ -187,6 +210,16 @@ public class FeatureMatcherTest
   }
 
   @Test(groups = "Functional")
+  public void testIsByAttribute()
+  {
+    assertFalse(FeatureMatcher.byLabel(Condition.NotContains, "foo")
+            .isByAttribute());
+    assertFalse(FeatureMatcher.byScore(Condition.LE, "-1").isByAttribute());
+    assertTrue(FeatureMatcher.byAttribute(Condition.LE, "-1", "AC")
+            .isByAttribute());
+  }
+
+  @Test(groups = "Functional")
   public void testIsByLabel()
   {
     assertTrue(FeatureMatcher.byLabel(Condition.NotContains, "foo")
@@ -212,7 +245,7 @@ public class FeatureMatcherTest
     FeatureMatcherI fm = FeatureMatcher.byAttribute(Condition.GE, "-2f",
             "AF");
     assertEquals(fm.getMatcher().getCondition(), Condition.GE);
-    assertEquals(fm.getMatcher().getFloatValue(), -2F);
+    assertEquals(PA.getValue(fm.getMatcher(), "floatValue"), -2F);
     assertEquals(fm.getMatcher().getPattern(), "-2.0");
   }
 
@@ -223,71 +256,88 @@ public class FeatureMatcherTest
     assertFalse(fm.isByLabel());
     assertFalse(fm.isByScore());
     assertEquals(fm.getAttribute(), new String[] { "AF" });
-    assertSame(Condition.LT, fm.getMatcher().getCondition());
-    assertEquals(fm.getMatcher().getFloatValue(), 1.2f);
-    assertEquals(fm.getMatcher().getPattern(), "1.2");
+    MatcherI matcher = fm.getMatcher();
+    assertSame(Condition.LT, matcher.getCondition());
+    assertEquals(PA.getValue(matcher, "floatValue"), 1.2f);
+    assertSame(PA.getValue(matcher, "patternType"),
+            Matcher.PatternType.Float);
+    assertEquals(matcher.getPattern(), "1.2");
 
     // quotes are optional, condition is not case sensitive
     fm = FeatureMatcher.fromString("AF lt '1.2'");
+    matcher = fm.getMatcher();
     assertFalse(fm.isByLabel());
     assertFalse(fm.isByScore());
     assertEquals(fm.getAttribute(), new String[] { "AF" });
-    assertSame(Condition.LT, fm.getMatcher().getCondition());
-    assertEquals(fm.getMatcher().getFloatValue(), 1.2f);
-    assertEquals(fm.getMatcher().getPattern(), "1.2");
+    assertSame(Condition.LT, matcher.getCondition());
+    assertEquals(PA.getValue(matcher, "floatValue"), 1.2F);
+    assertEquals(matcher.getPattern(), "1.2");
 
     fm = FeatureMatcher.fromString("'AF' Present");
+    matcher = fm.getMatcher();
     assertFalse(fm.isByLabel());
     assertFalse(fm.isByScore());
     assertEquals(fm.getAttribute(), new String[] { "AF" });
-    assertSame(Condition.Present, fm.getMatcher().getCondition());
+    assertSame(Condition.Present, matcher.getCondition());
+    assertSame(PA.getValue(matcher, "patternType"),
+            Matcher.PatternType.String);
 
     fm = FeatureMatcher.fromString("CSQ:Consequence contains damaging");
+    matcher = fm.getMatcher();
     assertFalse(fm.isByLabel());
     assertFalse(fm.isByScore());
     assertEquals(fm.getAttribute(), new String[] { "CSQ", "Consequence" });
-    assertSame(Condition.Contains, fm.getMatcher().getCondition());
-    assertEquals(fm.getMatcher().getPattern(), "damaging");
+    assertSame(Condition.Contains, matcher.getCondition());
+    assertEquals(matcher.getPattern(), "damaging");
 
     // keyword Label is not case sensitive
     fm = FeatureMatcher.fromString("LABEL Matches 'foobar'");
+    matcher = fm.getMatcher();
     assertTrue(fm.isByLabel());
     assertFalse(fm.isByScore());
     assertNull(fm.getAttribute());
-    assertSame(Condition.Matches, fm.getMatcher().getCondition());
-    assertEquals(fm.getMatcher().getPattern(), "foobar");
+    assertSame(Condition.Matches, matcher.getCondition());
+    assertEquals(matcher.getPattern(), "foobar");
 
     fm = FeatureMatcher.fromString("'Label' matches 'foo bar'");
+    matcher = fm.getMatcher();
     assertTrue(fm.isByLabel());
     assertFalse(fm.isByScore());
     assertNull(fm.getAttribute());
-    assertSame(Condition.Matches, fm.getMatcher().getCondition());
-    assertEquals(fm.getMatcher().getPattern(), "foo bar");
+    assertSame(Condition.Matches, matcher.getCondition());
+    assertEquals(matcher.getPattern(), "foo bar");
 
     // quotes optional on pattern
     fm = FeatureMatcher.fromString("'Label' matches foo bar");
+    matcher = fm.getMatcher();
     assertTrue(fm.isByLabel());
     assertFalse(fm.isByScore());
     assertNull(fm.getAttribute());
-    assertSame(Condition.Matches, fm.getMatcher().getCondition());
-    assertEquals(fm.getMatcher().getPattern(), "foo bar");
+    assertSame(Condition.Matches, matcher.getCondition());
+    assertEquals(matcher.getPattern(), "foo bar");
 
-    fm = FeatureMatcher.fromString("Score GE 12.2");
+    // integer condition
+    fm = FeatureMatcher.fromString("Score GE 12");
+    matcher = fm.getMatcher();
     assertFalse(fm.isByLabel());
     assertTrue(fm.isByScore());
     assertNull(fm.getAttribute());
-    assertSame(Condition.GE, fm.getMatcher().getCondition());
-    assertEquals(fm.getMatcher().getPattern(), "12.2");
-    assertEquals(fm.getMatcher().getFloatValue(), 12.2f);
+    assertSame(Condition.GE, matcher.getCondition());
+    assertEquals(matcher.getPattern(), "12");
+    assertEquals(PA.getValue(matcher, "floatValue"), 0f);
+    assertEquals(PA.getValue(matcher, "longValue"), 12L);
+    assertSame(PA.getValue(matcher, "patternType"),
+            Matcher.PatternType.Integer);
 
     // keyword Score is not case sensitive
     fm = FeatureMatcher.fromString("'SCORE' ge '12.2'");
+    matcher = fm.getMatcher();
     assertFalse(fm.isByLabel());
     assertTrue(fm.isByScore());
     assertNull(fm.getAttribute());
-    assertSame(Condition.GE, fm.getMatcher().getCondition());
-    assertEquals(fm.getMatcher().getPattern(), "12.2");
-    assertEquals(fm.getMatcher().getFloatValue(), 12.2f);
+    assertSame(Condition.GE, matcher.getCondition());
+    assertEquals(matcher.getPattern(), "12.2");
+    assertEquals(PA.getValue(matcher, "floatValue"), 12.2F);
 
     // invalid numeric pattern
     assertNull(FeatureMatcher.fromString("Score eq twelve"));