1 package jalview.util.matcher;
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertFalse;
5 import static org.testng.Assert.assertSame;
6 import static org.testng.Assert.assertTrue;
8 import java.util.Iterator;
9 import java.util.function.Function;
11 import org.testng.annotations.Test;
13 public class KeyedMatcherSetTest
16 public void testMatches()
19 * a numeric matcher - MatcherTest covers more conditions
21 KeyedMatcherI km = new KeyedMatcher("AF", Condition.GE, -2F);
22 KeyedMatcherSetI kms = new KeyedMatcherSet();
24 assertTrue(kms.matches(key -> "-2"));
25 assertTrue(kms.matches(key -> "-1"));
26 assertFalse(kms.matches(key -> "-3"));
27 assertFalse(kms.matches(key -> ""));
28 assertFalse(kms.matches(key -> "junk"));
29 assertFalse(kms.matches(key -> null));
32 * a string pattern matcher
34 km = new KeyedMatcher("AF", Condition.Contains, "Cat");
35 kms = new KeyedMatcherSet();
38 .matches(key -> "AF".equals(key) ? "raining cats and dogs"
45 // condition1: AF value contains "dog" (matches)
46 KeyedMatcherI km1 = new KeyedMatcher("AF", Condition.Contains, "dog");
47 // condition 2: CSQ value does not contain "how" (does not match)
48 KeyedMatcherI km2 = new KeyedMatcher("CSQ", Condition.NotContains,
51 Function<String, String> vp = key -> "AF".equals(key) ? "raining cats and dogs"
53 assertTrue(km1.matches(vp));
54 assertFalse(km2.matches(vp));
56 KeyedMatcherSetI kms = new KeyedMatcherSet();
57 assertTrue(kms.matches(vp)); // if no conditions, then 'all' pass
59 assertTrue(kms.matches(vp));
61 assertFalse(kms.matches(vp));
65 public void testToString()
67 KeyedMatcherI km1 = new KeyedMatcher("AF", Condition.LT, 1.2f);
68 assertEquals(km1.toString(), "AF < 1.2");
70 KeyedMatcher km2 = new KeyedMatcher("CLIN_SIG", Condition.NotContains, "path");
71 assertEquals(km2.toString(), "CLIN_SIG Does not contain 'PATH'");
76 KeyedMatcherSetI kms = new KeyedMatcherSet();
77 assertEquals(kms.toString(), "");
79 assertEquals(kms.toString(), "(AF < 1.2)");
81 assertEquals(kms.toString(),
82 "(AF < 1.2) AND (CLIN_SIG Does not contain 'PATH')");
87 kms = new KeyedMatcherSet();
88 assertEquals(kms.toString(), "");
90 assertEquals(kms.toString(), "(AF < 1.2)");
92 assertEquals(kms.toString(),
93 "(AF < 1.2) OR (CLIN_SIG Does not contain 'PATH')");
99 // condition1: AF value contains "dog" (matches)
100 KeyedMatcherI km1 = new KeyedMatcher("AF", Condition.Contains, "dog");
101 // condition 2: CSQ value does not contain "how" (does not match)
102 KeyedMatcherI km2 = new KeyedMatcher("CSQ", Condition.NotContains,
105 Function<String, String> vp = key -> "AF".equals(key) ? "raining cats and dogs"
107 assertTrue(km1.matches(vp));
108 assertFalse(km2.matches(vp));
110 KeyedMatcherSetI kms = new KeyedMatcherSet();
112 assertFalse(kms.matches(vp));
114 assertTrue(kms.matches(vp));
118 public void testIsEmpty()
120 KeyedMatcherI km = new KeyedMatcher("AF", Condition.GE, -2F);
121 KeyedMatcherSetI kms = new KeyedMatcherSet();
122 assertTrue(kms.isEmpty());
124 assertFalse(kms.isEmpty());
128 public void testGetMatchers()
130 KeyedMatcherSetI kms = new KeyedMatcherSet();
135 Iterator<KeyedMatcherI> iterator = kms.getMatchers().iterator();
136 assertFalse(iterator.hasNext());
141 KeyedMatcherI km1 = new KeyedMatcher("AF", Condition.GE, -2F);
143 iterator = kms.getMatchers().iterator();
144 assertSame(km1, iterator.next());
145 assertFalse(iterator.hasNext());
150 KeyedMatcherI km2 = new KeyedMatcher("AF", Condition.LT, 8F);
152 iterator = kms.getMatchers().iterator();
153 assertSame(km1, iterator.next());
154 assertSame(km2, iterator.next());
155 assertFalse(iterator.hasNext());