private void checkFalsey(String falseyExpr) { VariableResolver resolver = new MapVariableResolver(new HashMap<>()); Assert.assertTrue(runPredicate(String.format(" %s || true", falseyExpr), resolver)); Assert.assertFalse(runPredicate(String.format("%s && EXCEPTION('blah')", falseyExpr), resolver)); Assert.assertTrue(runPredicate(String.format("NOT(%s)", falseyExpr), resolver)); Assert.assertFalse(runPredicate(String.format("if %s then true else false", falseyExpr), resolver)); Assert.assertFalse(runPredicate(String.format("if %s then true || %s else false", falseyExpr, falseyExpr), resolver)); Assert.assertFalse(runPredicate(String.format("if %s then true || %s else false && %s", falseyExpr, falseyExpr, falseyExpr), resolver)); Assert.assertFalse(runPredicate(String.format("if %s then true || %s else false && (%s || true)", falseyExpr, falseyExpr, falseyExpr), resolver)); //make sure that nulls aren't replaced by false everywhere, only in boolean expressions. Assert.assertNull(run(String.format("MAP_GET(%s, {false : 'blah'})", falseyExpr), resolver)); }
@Test(expected = ParseException.class) public void testNoArgs() throws Exception { runPredicate("0 == FUZZY_SCORE()", new DefaultVariableResolver(v -> variableMap.get(v), v -> variableMap.containsKey(v))); }
@Test(expected = ParseException.class) public void differentTypesShouldThrowErrorWhenUsingGT() throws Exception { final Map<String, Object> variableMap = new HashMap<>(); runPredicate("1 > '1'", new DefaultVariableResolver(variableMap::get,variableMap::containsKey)); }
@Test() public void testEmptyFirstTwoArgs() throws Exception { Assert.assertTrue(runPredicate("0 == FUZZY_SCORE(empty,empty,english)", new DefaultVariableResolver(v -> variableMap.get(v), v -> variableMap.containsKey(v)))); }
@Test() public void testNoMatchStrings() throws Exception { Assert.assertTrue(runPredicate("0 == FUZZY_SCORE(metron,'z',english)", new DefaultVariableResolver(v -> variableMap.get(v), v -> variableMap.containsKey(v)))); }
@Test public void negativeTest_single() throws IOException { Assert.assertFalse(execute(validWithSingleField, ImmutableMap.of("field1", "me@foo"))); Assert.assertFalse(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "me@foo"))); Assert.assertFalse(execute(validWithSingleField, ImmutableMap.of("field1", "caseystella.turtle"))); Assert.assertFalse(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "caseystella.turtle"))); Assert.assertFalse(execute(validWithSingleField, ImmutableMap.of("field1", "caseystella.com"))); Assert.assertFalse(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "caseystella.com"))); Assert.assertFalse(execute(validWithSingleField, ImmutableMap.of("field1", 2.7f))); Assert.assertFalse(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", 2.7f))); } @Test
@Test public void negativeTest_single() throws IOException { Assert.assertFalse(execute(validWithSingleField, ImmutableMap.of("field1", "foo"))); Assert.assertFalse(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "foo"))); Assert.assertFalse(execute(validWithSingleField, ImmutableMap.of("field1", "caseystella.turtle"))); Assert.assertFalse(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "caseystella.turtle"))); Assert.assertFalse(execute(validWithSingleField, ImmutableMap.of("field1", 2.7f))); Assert.assertFalse(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", 2.7f))); } @Test
@Test public void compareNumberAndStringWithSameValueShouldBeFalse() throws Exception { Map<String,String> variableMap = new HashMap<>(); assertFalse(runPredicate("1 == '1'", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); assertFalse(runPredicate("'1' == 1", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); }
@Test public void negativeTest_multiple() throws IOException { Assert.assertTrue(execute(validWithMultipleFields, ImmutableMap.of("field2", "hotmail.edu"))); Assert.assertFalse(runPredicate(validWithMultipleFields_MQL, ImmutableMap.of("field2", "hotmail.edu"))); Assert.assertFalse(execute(validWithMultipleFields, ImmutableMap.of("field1", "", "field2", "gmail.com"))); Assert.assertFalse(runPredicate(validWithMultipleFields_MQL, ImmutableMap.of("field1", "", "field2", "gmail.com"))); } }
@Test public void negativeTest_multiple() throws IOException { Assert.assertTrue(execute(validWithMultipleFields, ImmutableMap.of("field2", "me@hotmail.edu"))); Assert.assertFalse(runPredicate(validWithMultipleFields_MQL, ImmutableMap.of("field2", "me@hotmail.edu"))); Assert.assertFalse(execute(validWithMultipleFields, ImmutableMap.of("field1", "", "field2", "me@gmail.com"))); Assert.assertFalse(runPredicate(validWithMultipleFields_MQL, ImmutableMap.of("field1", "", "field2", "me@gmail.com"))); } }
@Test public void positiveTest_single() throws IOException { Assert.assertTrue(execute(validWithSingleField, ImmutableMap.of("field1", 1))); Assert.assertTrue(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", 1))); Assert.assertTrue(execute(validWithSingleField, ImmutableMap.of("field1", "1"))); Assert.assertTrue(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "1"))); } @Test
@Test public void positiveTest_single() throws IOException { Assert.assertTrue(execute(validWithSingleField, ImmutableMap.of("field1", "http://caseystella.com/foo"))); Assert.assertTrue(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "http://caseystella.com/foo"))); Assert.assertTrue(execute(validWithSingleField, ImmutableMap.of("field1", "https://www.hotmail.co.uk"))); Assert.assertTrue(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "https://www.hotmail.co.uk"))); }
@Test public void negativeTest_single() throws IOException { Assert.assertFalse(execute(validWithSingleField, ImmutableMap.of("field1", "2014/05/01"))); Assert.assertFalse(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "2014/05/01"))); Assert.assertFalse(execute(validWithSingleField, ImmutableMap.of("field1", 2.3f))); Assert.assertFalse(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", 2.3f))); } @Test
@Test public void negativeTest_multiple() throws IOException { Assert.assertTrue(execute(validWithMultipleFields, ImmutableMap.of("field2", "http://hotmail.edu"))); Assert.assertFalse(runPredicate(validWithMultipleFields_MQL, ImmutableMap.of("field2", "http://hotmail.edu"))); Assert.assertFalse(execute(validWithMultipleFields, ImmutableMap.of("field1", "", "field2", "http://gmail.com"))); Assert.assertFalse(runPredicate(validWithMultipleFields_MQL, ImmutableMap.of("field1", "", "field2", "http://gmail.com"))); } }
@Test public void precisionEqualityTests() throws Exception { final Map<String, Object> variableMap = new HashMap<>(); assertEquals(0.1 + 0.2 == 0.3, runPredicate("0.1 + 0.2 == 0.3", new DefaultVariableResolver(variableMap::get,variableMap::containsKey))); }
@Test public void positiveTest_single() throws IOException { Assert.assertTrue(execute(validWithSingleField, ImmutableMap.of("field1", "127.0.0.1"))); Assert.assertTrue(runPredicate(validWithSingleField_MQL, ImmutableMap.of("field1", "127.0.0.1"))); } @Test
@Test public void positiveTest_multiple() throws IOException { Assert.assertTrue(execute(validWithMultipleFields, ImmutableMap.of("field1", "ftp://www.gmail.com", "field2", "http://www.hotmail.com"))); Assert.assertTrue(runPredicate(validWithMultipleFields_MQL, ImmutableMap.of("field1", "ftp://www.gmail.com", "field2", "http://www.hotmail.com"))); }
@Test public void positiveTest_multiplex2() throws IOException { Assert.assertTrue(execute(validWithMultipleFieldsMultipleTypes, ImmutableMap.of("field1", "192.168.0.1", "field2", "127.0.0.2"))); Assert.assertTrue(runPredicate(validWithMultipleFieldsMultipleTypes_MQL, ImmutableMap.of("field1", "192.168.0.1", "field2", "127.0.0.2"))); }
@Test public void positiveTest_multiple() throws IOException { Assert.assertTrue(execute(validWithMultipleFields, ImmutableMap.of("field1", 1, "field2", "2"))); Assert.assertTrue(runPredicate(validWithMultipleFields_MQL, ImmutableMap.of("field1", 1, "field2", "2"))); }
@Test public void non_boolean_predicate_throws_exception() { final Map<String, String> variableMap = new HashMap<String, String>() {{ put("protocol", "http"); }}; thrown.expect(IllegalArgumentException.class); thrown.expectMessage("The rule 'TO_UPPER(protocol)' does not return a boolean value."); runPredicate("TO_UPPER(protocol)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))); }