package org.mvel2.tests.core; import org.mvel2.MVEL; import org.mvel2.ParserContext; import org.mvel2.tests.core.res.Foo; import java.io.Serializable; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; public class ComparisonTests extends AbstractTest { public void testBooleanOperator() { assertEquals(true, test("foo.bar.woof == true")); } public void testBooleanOperator2() { assertEquals(false, test("foo.bar.woof == false")); } public void testBooleanOperator3() { assertEquals(true, test("foo.bar.woof== true")); } public void testBooleanOperator4() { assertEquals(false, test("foo.bar.woof ==false")); } public void testBooleanOperator5() { assertEquals(true, test("foo.bar.woof == true")); } public void testBooleanOperator6() { assertEquals(false, test("foo.bar.woof==false")); } public void testTextComparison() { assertEquals(true, test("foo.bar.name == 'dog'")); } public void testNETextComparison() { assertEquals(true, test("foo.bar.name != 'foo'")); } public void testChor() { assertEquals("cat", test("a or b or c")); } public void testChorWithLiteral() { assertEquals("fubar", test("a or 'fubar'")); } public void testNullCompare() { assertEquals(true, test("c != null")); } public void testLessThan() { assertEquals(true, test("pi < 3.15")); assertEquals(true, test("pi <= 3.14")); assertEquals(false, test("pi > 3.14")); assertEquals(true, test("pi >= 3.14")); } public void testNegation() { String ex = "!fun && !fun"; assertEquals(true, test(ex)); } public void testNegation2() { assertEquals(false, test("fun && !fun")); } public void testNegation3() { assertEquals(true, test("!(fun && fun)")); } public void testNegation4() { assertEquals(false, test("(fun && fun)")); } public void testNegation5() { assertEquals(true, test("!false")); } public void testNegation6() { assertEquals(false, test("!true")); } public void testNegation7() { assertEquals(true, test("s = false; t = !s; t")); } public void testNegation8() { assertEquals(true, test("s = false; t =! s; t")); } public void testRegEx() { assertEquals(true, test("foo.bar.name ~= '[a-z].+'")); } public void testRegExNegate() { assertEquals(false, test("!(foo.bar.name ~= '[a-z].+')")); } public void testRegEx2() { assertEquals(true, test("foo.bar.name ~= '[a-z].+' && foo.bar.name != null")); } public void testRegEx3() { assertEquals(true, test("foo.bar.name~='[a-z].+'&&foo.bar.name!=null")); } public void testBlank() { assertEquals(true, test("'' == empty")); } public void testBlank2() { assertEquals(true, test("BWAH == empty")); } public void testBlank3() { assertEquals(true, _test("[] == empty")); } // // public void testBlank4() { // assertEquals(true, _test("empty == []")); // } public void testBlank5() { assertEquals(true, _test("['a'] != empty")); } public void testBlank6() { assertEquals(true, _test("empty != ['a']")); } public void testBlank7() { assertEquals(false, _test("[] != empty")); } // public void testBlank8() { // assertEquals(false, _test("empty != []")); // } public void testBlank9() { assertEquals(false, _test("['a'] == empty")); } public void testBlank10() { assertEquals(false, _test("empty == ['a']")); } public void testInstanceCheck1() { assertEquals(true, test("c is java.lang.String")); } public void testInstanceCheck2() { assertEquals(false, test("pi is java.lang.Integer")); } public void testInstanceCheck3() { assertEquals(true, test("foo is org.mvel2.tests.core.res.Foo")); } public void testContains1() { assertEquals(true, test("list contains 'Happy!'")); } public void testContains2() { assertEquals(false, test("list contains 'Foobie'")); } public void testContains3() { assertEquals(true, test("sentence contains 'fox'")); } public void testContains4() { assertEquals(false, test("sentence contains 'mike'")); } public void testContains5() { assertEquals(true, test("!(sentence contains 'mike')")); } public void testContains6() { assertEquals(true, test("bwahbwah = 'mikebrock'; testVar10 = 'mike'; bwahbwah contains testVar10")); } public void testContains7() { assertEquals(true, test("sentence contains ('fox')")); } public void testSoundex() { assertTrue((Boolean) test("'foobar' soundslike 'fubar'")); } public void testSoundex2() { assertFalse((Boolean) test("'flexbar' soundslike 'fubar'")); } public void testSoundex3() { assertEquals(true, test("(c soundslike 'kat')")); } public void testSimilarity1() { assertEquals(0.6666667f, test("c strsim 'kat'")); } public void testSoundex4() { assertEquals(true, test("_xx1 = 'cat'; _xx2 = 'katt'; (_xx1 soundslike _xx2)")); } public void testSoundex5() { assertEquals(true, test("_type = 'fubar';_type soundslike \"foobar\"")); } public void testThisReference3() { assertEquals(true, test("this is org.mvel2.tests.core.res.Base")); } public void testThisReference4() { assertEquals(true, test("this.funMap instanceof java.util.Map")); } public void testThisReference5() { assertEquals(true, test("this.data == 'cat'")); } public void testDateComparison() { assertTrue((Boolean) test("dt1 < dt2")); } public void testConvertableTo() { assertEquals(true, test("pi convertable_to Integer")); } public void testStringEquals() { assertEquals(true, test("ipaddr == '10.1.1.2'")); } public void testCharComparison() { assertEquals(true, test("'z' > 'a'")); } public void testCharComparison2() { assertEquals(false, test("'z' < 'a'")); } public void testJIRA100b() { String expression = "(8 / 10) * 100 <= 80;"; assertEquals((8 / 10) * 100 <= 80, testCompiledSimple(expression, new HashMap())); } public void testJIRA92() { assertEquals(false, test("'stringValue' > null")); } public void testIsDefOperator() { assertEquals(true, test("_v1 = 'bar'; isdef _v1")); } public void testIsDefOperator2() { assertEquals(false, test("isdef _v1")); } public void testIsDefOperator3() { assertEquals(true, test("!(isdef _v1)")); } public void testIsDefOperator4() { assertEquals(true, test("! (isdef _v1)")); } public void testIsDefOperator5() { assertEquals(true, test("!isdef _v1")); } public void testIsDefOperator6() { Foo foo = new Foo(); assertEquals(true, MVEL.eval("isdef name", foo)); assertEquals(true, MVEL.executeExpression(MVEL.compileExpression("isdef name"), foo)); } public void testJIRA152() { assertEquals(true, MVEL.eval("1== -(-1)")); assertEquals(true, MVEL.executeExpression(MVEL.compileExpression("1==-(-1)"))); } public void testJIRA157() { assertEquals(true, MVEL.eval("1 == ((byte) 1)")); } public void testJIRA181() { assertEquals(false, MVEL.eval("0<-1")); } public void testStringCoercionForComparison() { assertEquals(false, MVEL.eval("36 > 242")); assertEquals(false, MVEL.eval("\"36\" > 242")); assertEquals(false, MVEL.eval("36 > \"242\"")); assertEquals(true, MVEL.eval("\"36\" > \"242\"")); ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); assertEquals(false, MVEL.executeExpression(MVEL.compileExpression("36 > 242", parserContext))); assertEquals(false, MVEL.executeExpression(MVEL.compileExpression("\"36\" > 242", parserContext))); assertEquals(false, MVEL.executeExpression(MVEL.compileExpression("36 > \"242\"", parserContext))); assertEquals(true, MVEL.executeExpression(MVEL.compileExpression("\"36\" > \"242\"", parserContext))); parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("a", String.class); parserContext.addInput("b", String.class); Serializable expression = MVEL.compileExpression("a > b", parserContext); assertEquals(true, MVEL.executeExpression(expression, new HashMap() {{ put("a", "36"); put("b", "242"); }})); } }