/** * Just like MVEL command line, we can allow expressions to span lines, with optional ";" * seperating expressions. If its needed a ";" can be thrown in, but if not, a new line is fine. * * <p>However, when in the middle of unbalanced brackets, a new line means nothing. * * @throws Exception */ @Test public void testLineSpanOptionalSemis() throws Exception { String simpleEx = "foo\nbar\nbaz"; MVELConsequenceBuilder cons = new MVELConsequenceBuilder(); assertEquals("foo;\nbar;\nbaz", MVELConsequenceBuilder.delimitExpressions(simpleEx)); String ex = "foo (\n bar \n)\nbar;\nyeah;\nman\nbaby"; assertEquals( "foo ( bar );\n\n\nbar;\nyeah;\nman;\nbaby", MVELConsequenceBuilder.delimitExpressions(ex)); ex = "foo {\n bar \n}\nbar; \nyeah;\nman\nbaby"; assertEquals( "foo { bar };\n\n\nbar; \nyeah;\nman;\nbaby", MVELConsequenceBuilder.delimitExpressions(ex)); ex = "foo [\n bar \n]\nbar; x\nyeah();\nman[42]\nbaby;ca chiga;\nend"; assertEquals( "foo [ bar ];\n\n\nbar; x;\nyeah();\nman[42];\nbaby;ca chiga;\nend", MVELConsequenceBuilder.delimitExpressions(ex)); ex = " \n\nfoo [\n bar \n]\n\n\nbar; x\n \nyeah();\nman[42]\nbaby;ca chiga;\nend"; assertEquals( " \n\nfoo [ bar ];\n\n\n\n\nbar; x;\n \nyeah();\nman[42];\nbaby;ca chiga;\nend", MVELConsequenceBuilder.delimitExpressions(ex)); ex = " retract(f1) // some comment\n retract(f2)\nend"; assertEquals( " retract(f1) ;// some comment\n retract(f2);\nend", MVELConsequenceBuilder.delimitExpressions(ex)); ex = " retract(f1 /* inline comment */) /* some\n comment\n*/ retract(f2)\nend"; assertEquals( " retract(f1 /* inline comment */) ;/* some\n comment\n*/ retract(f2);\nend", MVELConsequenceBuilder.delimitExpressions(ex)); }