+
+ @Test(groups = "Functional")
+ public void testToString()
+ {
+ Locale.setDefault(Locale.ENGLISH);
+
+ MatcherI m = new Matcher(Condition.LT, 1.2e-6f);
+ assertEquals(m.toString(), "< 1.2E-6");
+
+ m = new Matcher(Condition.GE, "20200413");
+ assertEquals(m.toString(), ">= 20200413");
+
+ m = new Matcher(Condition.NotMatches, "ABC");
+ assertEquals(m.toString(), "Does not match 'ABC'");
+
+ m = new Matcher(Condition.Contains, -1.2f);
+ assertEquals(m.toString(), "Contains '-1.2'");
+ }
+
+ @Test(groups = "Functional")
+ public void testEquals()
+ {
+ /*
+ * string condition
+ */
+ MatcherI m = new Matcher(Condition.NotMatches, "ABC");
+ assertFalse(m.equals(null));
+ assertFalse(m.equals("foo"));
+ assertTrue(m.equals(m));
+ assertTrue(m.equals(new Matcher(Condition.NotMatches, "ABC")));
+ // not case-sensitive:
+ assertTrue(m.equals(new Matcher(Condition.NotMatches, "abc")));
+ assertFalse(m.equals(new Matcher(Condition.Matches, "ABC")));
+ assertFalse(m.equals(new Matcher(Condition.NotMatches, "def")));
+
+ /*
+ * numeric conditions - float values
+ */
+ m = new Matcher(Condition.LT, -1f);
+ assertFalse(m.equals(null));
+ assertFalse(m.equals("foo"));
+ assertTrue(m.equals(m));
+ assertTrue(m.equals(new Matcher(Condition.LT, -1f)));
+ assertTrue(m.equals(new Matcher(Condition.LT, "-1f")));
+ assertTrue(m.equals(new Matcher(Condition.LT, "-1.00f")));
+ assertFalse(m.equals(new Matcher(Condition.LE, -1f)));
+ assertFalse(m.equals(new Matcher(Condition.GE, -1f)));
+ assertFalse(m.equals(new Matcher(Condition.NE, -1f)));
+ assertFalse(m.equals(new Matcher(Condition.LT, 1f)));
+ assertFalse(m.equals(new Matcher(Condition.LT, -1.1f)));
+
+ /*
+ * numeric conditions - integer values
+ */
+ m = new Matcher(Condition.LT, -123456);
+ assertFalse(m.equals(null));
+ assertFalse(m.equals("foo"));
+ assertTrue(m.equals(m));
+ assertTrue(m.equals(new Matcher(Condition.LT, -123456)));
+ assertFalse(m.equals(new Matcher(Condition.LT, +123456)));
+ assertTrue(m.equals(new Matcher(Condition.LT, "-123456")));
+ assertFalse(m.equals(new Matcher(Condition.LT, -123456f)));
+ assertFalse(m.equals(new Matcher(Condition.LT, "-123456f")));
+ }
+
+ @Test(groups = "Functional")
+ public void testHashCode()
+ {
+ MatcherI m1 = new Matcher(Condition.NotMatches, "ABC");
+ MatcherI m2 = new Matcher(Condition.NotMatches, "ABC");
+ MatcherI m3 = new Matcher(Condition.NotMatches, "AB");
+ MatcherI m4 = new Matcher(Condition.Matches, "ABC");
+ assertEquals(m1.hashCode(), m2.hashCode());
+ assertNotEquals(m1.hashCode(), m3.hashCode());
+ assertNotEquals(m1.hashCode(), m4.hashCode());
+ assertNotEquals(m3.hashCode(), m4.hashCode());
+ }
+
+ /**
+ * Tests for integer comparison conditions
+ */
+ @Test(groups = "Functional")
+ public void testMatches_long()
+ {
+ /*
+ * EQUALS test
+ */
+ MatcherI m = new Matcher(Condition.EQ, 2);
+ assertTrue(m.matches("2"));
+ assertTrue(m.matches("+2"));
+ assertFalse(m.matches("3"));
+ // a float value may be passed to an integer matcher
+ assertTrue(m.matches("2.0"));
+ assertTrue(m.matches("2.000000f"));
+ assertFalse(m.matches("2.01"));
+
+ /*
+ * NOT EQUALS test
+ */
+ m = new Matcher(Condition.NE, 123);
+ assertFalse(m.matches("123"));
+ assertFalse(m.matches("123.0"));
+ assertTrue(m.matches("-123"));
+
+ /*
+ * >= test
+ */
+ m = new Matcher(Condition.GE, "113890813");
+ assertTrue(m.matches("113890813"));
+ assertTrue(m.matches("113890814"));
+ assertFalse(m.matches("-113890813"));
+
+ /*
+ * > test
+ */
+ m = new Matcher(Condition.GT, 113890813);
+ assertFalse(m.matches("113890813"));
+ assertTrue(m.matches("113890814"));
+
+ /*
+ * <= test
+ */
+ m = new Matcher(Condition.LE, "113890813");
+ assertTrue(m.matches("113890813"));
+ assertFalse(m.matches("113890814"));
+ assertTrue(m.matches("113890812"));
+
+ /*
+ * < test
+ */
+ m = new Matcher(Condition.LT, 113890813);
+ assertFalse(m.matches("113890813"));
+ assertFalse(m.matches("113890814"));
+ assertTrue(m.matches("113890812"));
+ }
+
+ /**
+ * Tests comparing a float value with an integer condition
+ */
+ @Test(groups = "Functional")
+ public void testMatches_floatValueIntegerCondition()
+ {
+ MatcherI m = new Matcher(Condition.GT, 1234);
+ assertEquals(PA.getValue(m, "longValue"), 1234L);
+ assertSame(PA.getValue(m, "patternType"), PatternType.Integer);
+ assertTrue(m.matches("1235"));
+ assertTrue(m.matches("9867.345"));
+ assertTrue(m.matches("9867.345f"));
+ }