/** Test for nested Command 'elsif' with an argument of 'true' */
  public void testElsifFalseElsifTrue() {
    boolean isTestPassed = false;
    String script = "if false {stop;} elsif false {stop;} elsif true {throwTestException;}";

    try {
      JUnitUtils.interpret(JUnitUtils.createMail(), script);
    } catch (ThrowTestException.TestException e) {
      isTestPassed = true;
    } catch (ParseException e) {
    } catch (SieveException e) {
    }
    assertTrue(isTestPassed);
  }
  /** Test for Command 'elsif' out of sequence nested in a block */
  public void testNestedOutOfSequenceElsif() {
    boolean isTestPassed = false;
    String script = "if true {elsif true {stop;}}";

    try {
      JUnitUtils.interpret(JUnitUtils.createMail(), script);
    } catch (CommandException e) {
      isTestPassed = true;
    } catch (ParseException e) {
    } catch (SieveException e) {
    }
    assertTrue(isTestPassed);
  }
  /** Test for Command 'else' without a corresponding Block */
  public void testElseMissingBlock() {
    boolean isTestPassed = false;
    String script = "if false {stop;} else stop;";

    try {
      JUnitUtils.interpret(JUnitUtils.createMail(), script);
    } catch (SyntaxException e) {
      isTestPassed = true;
    } catch (ParseException e) {
    } catch (SieveException e) {
    }
    assertTrue(isTestPassed);
  }
  /** Test for Command 'fileinto' with an invalid argument number */
  @Test
  public void testInvalidArgumentNumber() {
    boolean isTestPassed = false;
    String script = "fileinto [\"INBOX.test\", \"elsewhere\"];";

    try {
      JUnitUtils.interpret(JUnitUtils.createMail(), script);
    } catch (SyntaxException e) {
      isTestPassed = true;
    } catch (ParseException e) {
    } catch (SieveException e) {
    }
    Assert.assertTrue(isTestPassed);
  }
  /** Test for Command 'fileinto' with an invalid block */
  @Test
  public void testInvalidBlock() {
    boolean isTestPassed = false;
    String script = "fileinto 1 {throwTestException;}";

    try {
      JUnitUtils.interpret(JUnitUtils.createMail(), script);
    } catch (SyntaxException e) {
      isTestPassed = true;
    } catch (ParseException e) {
    } catch (SieveException e) {
    }
    Assert.assertTrue(isTestPassed);
  }
  /**
   * Test for Command 'fileinto' with duplicate destinations. Only one ActionFileInto should result.
   */
  @Test
  public void testDuplicateFileInto() {
    boolean isTestPassed = false;
    String script = "fileinto \"INBOX.test1\"; fileinto \"INBOX.test1\";";

    try {
      MailAdapter mail = JUnitUtils.createMail();
      JUnitUtils.interpret(mail, script);
      Assert.assertTrue(mail.getActions().size() == 1);
      Assert.assertTrue(mail.getActions().get(0) instanceof ActionFileInto);
      Assert.assertTrue(
          ((ActionFileInto) mail.getActions().get(0)).getDestination().equals("INBOX.test1"));
      isTestPassed = true;
    } catch (ParseException e) {
    } catch (SieveException e) {
    }
    Assert.assertTrue(isTestPassed);
  }