/**
   * 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));
  }