ebfb5d29423da80cc51b1426254c7498d922ba76
[jalview.git] / test / jalview / util / matcher / MatcherTest.java
1 package jalview.util.matcher;
2
3 import static org.testng.Assert.assertFalse;
4 import static org.testng.Assert.assertTrue;
5
6 import org.testng.annotations.Test;
7
8 public class MatcherTest
9 {
10   /**
11    * Tests for float comparison conditions
12    */
13   @Test
14   public void testMatches_float()
15   {
16     /*
17      * EQUALS test
18      */
19     MatcherI m = new Matcher(Condition.EQ, 2f);
20     assertTrue(m.matches("2"));
21     assertTrue(m.matches("2.0"));
22     assertFalse(m.matches("2.01"));
23
24     /*
25      * NOT EQUALS test
26      */
27     m = new Matcher(Condition.NE, 2f);
28     assertFalse(m.matches("2"));
29     assertFalse(m.matches("2.0"));
30     assertTrue(m.matches("2.01"));
31
32     /*
33      * >= test
34      */
35     m = new Matcher(Condition.GE, 2f);
36     assertTrue(m.matches("2"));
37     assertTrue(m.matches("2.1"));
38     assertFalse(m.matches("1.9"));
39
40     /*
41      * > test
42      */
43     m = new Matcher(Condition.GT, 2f);
44     assertFalse(m.matches("2"));
45     assertTrue(m.matches("2.1"));
46     assertFalse(m.matches("1.9"));
47
48     /*
49      * <= test
50      */
51     m = new Matcher(Condition.LE, 2f);
52     assertTrue(m.matches("2"));
53     assertFalse(m.matches("2.1"));
54     assertTrue(m.matches("1.9"));
55
56     /*
57      * < test
58      */
59     m = new Matcher(Condition.LT, 2f);
60     assertFalse(m.matches("2"));
61     assertFalse(m.matches("2.1"));
62     assertTrue(m.matches("1.9"));
63   }
64
65   @Test
66   public void testMatches_floatNullOrInvalid()
67   {
68     for (Condition cond : Condition.values())
69     {
70       if (cond.isNumeric())
71       {
72         MatcherI m = new Matcher(cond, 2f);
73         assertFalse(m.matches(null));
74         assertFalse(m.matches(""));
75         assertFalse(m.matches("two"));
76       }
77     }
78   }
79
80   /**
81    * Tests for string comparison conditions
82    */
83   @Test
84   public void testMatches_pattern()
85   {
86     /*
87      * Contains
88      */
89     MatcherI m = new Matcher(Condition.Contains, "benign");
90     assertTrue(m.matches("benign"));
91     assertTrue(m.matches("MOSTLY BENIGN OBSERVED")); // not case-sensitive
92     assertFalse(m.matches("pathogenic"));
93     assertFalse(m.matches(null));
94
95     /*
96      * does not contain
97      */
98     m = new Matcher(Condition.NotContains, "benign");
99     assertFalse(m.matches("benign"));
100     assertFalse(m.matches("MOSTLY BENIGN OBSERVED")); // not case-sensitive
101     assertTrue(m.matches("pathogenic"));
102     assertTrue(m.matches(null)); // null value passes this condition
103
104     /*
105      * matches
106      */
107     m = new Matcher(Condition.Matches, "benign");
108     assertTrue(m.matches("benign"));
109     assertTrue(m.matches(" Benign ")); // trim before testing
110     assertFalse(m.matches("MOSTLY BENIGN"));
111     assertFalse(m.matches("pathogenic"));
112     assertFalse(m.matches(null));
113
114     /*
115      * does not match
116      */
117     m = new Matcher(Condition.NotMatches, "benign");
118     assertFalse(m.matches("benign"));
119     assertFalse(m.matches(" Benign ")); // trim before testing
120     assertTrue(m.matches("MOSTLY BENIGN"));
121     assertTrue(m.matches("pathogenic"));
122     assertTrue(m.matches(null));
123   }
124
125   /**
126    * If a float is passed with a string condition it gets converted to a string
127    */
128   @Test
129   public void testMatches_floatWithStringCondition()
130   {
131     MatcherI m = new Matcher(Condition.Contains, 1.2e-6f);
132     assertTrue(m.matches("1.2e-6"));
133
134     m = new Matcher(Condition.Contains, 0.0000001f);
135     assertTrue(m.matches("1.0e-7"));
136     assertTrue(m.matches("1.0E-7"));
137     assertFalse(m.matches("0.0000001f"));
138   }
139 }