package jalview.util.matcher; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import java.util.function.Function; import org.testng.annotations.Test; public class KeyedMatcherSetTest { @Test public void testMatches() { /* * a numeric matcher - MatcherTest covers more conditions */ KeyedMatcherI km = new KeyedMatcher("AF", Condition.GE, -2F); assertTrue(km.matches(key -> "-2")); assertTrue(km.matches(key -> "-1")); assertFalse(km.matches(key -> "-3")); assertFalse(km.matches(key -> "")); assertFalse(km.matches(key -> "junk")); assertFalse(km.matches(key -> null)); /* * a string pattern matcher */ km = new KeyedMatcher("AF", Condition.Contains, "Cat"); assertTrue(km.matches(key -> "AF".equals(key) ? "raining cats and dogs" : "showers")); } @Test public void testAnd() { // condition1: AF value contains "dog" (matches) KeyedMatcherI km1 = new KeyedMatcher("AF", Condition.Contains, "dog"); // condition 2: CSQ value does not contain "how" (does not match) KeyedMatcherI km2 = new KeyedMatcher("CSQ", Condition.NotContains, "how"); Function vp = key -> "AF".equals(key) ? "raining cats and dogs" : "showers"; assertTrue(km1.matches(vp)); assertFalse(km2.matches(vp)); KeyedMatcherSetI kms = new KeyedMatcherSet(); assertTrue(kms.matches(vp)); // if no conditions, then 'all' pass kms.and(km1); assertTrue(kms.matches(vp)); kms.and(km2); assertFalse(kms.matches(vp)); } @Test public void testToString() { KeyedMatcherI km1 = new KeyedMatcher("AF", Condition.LT, 1.2f); assertEquals(km1.toString(), "AF LT 1.2"); KeyedMatcher km2 = new KeyedMatcher("CLIN_SIG", Condition.NotContains, "path"); assertEquals(km2.toString(), "CLIN_SIG NotContains PATH"); /* * AND them */ KeyedMatcherSetI kms = new KeyedMatcherSet(); assertEquals(kms.toString(), ""); kms.and(km1); assertEquals(kms.toString(), "(AF LT 1.2)"); kms.and(km2); assertEquals(kms.toString(), "(AF LT 1.2) AND (CLIN_SIG NotContains PATH)"); /* * OR them */ kms = new KeyedMatcherSet(); assertEquals(kms.toString(), ""); kms.or(km1); assertEquals(kms.toString(), "(AF LT 1.2)"); kms.or(km2); assertEquals(kms.toString(), "(AF LT 1.2) OR (CLIN_SIG NotContains PATH)"); } /** * @return */ protected KeyedMatcher km3() { return new KeyedMatcher("CSQ", Condition.Contains, "benign"); } @Test public void testOr() { // condition1: AF value contains "dog" (matches) KeyedMatcherI km1 = new KeyedMatcher("AF", Condition.Contains, "dog"); // condition 2: CSQ value does not contain "how" (does not match) KeyedMatcherI km2 = new KeyedMatcher("CSQ", Condition.NotContains, "how"); Function vp = key -> "AF".equals(key) ? "raining cats and dogs" : "showers"; assertTrue(km1.matches(vp)); assertFalse(km2.matches(vp)); KeyedMatcherSetI kms = new KeyedMatcherSet(); kms.or(km2); assertFalse(kms.matches(vp)); kms.or(km1); assertTrue(kms.matches(vp)); } }