@Test
  public void testNoParams2() throws Exception {
    List list = new ArrayList();
    list.add(ExpressionFactory.matchExp("k1", new ExpressionParameter("test1")));
    list.add(ExpressionFactory.matchExp("k2", new ExpressionParameter("test2")));
    list.add(ExpressionFactory.matchExp("k3", new ExpressionParameter("test3")));
    list.add(ExpressionFactory.matchExp("k4", new ExpressionParameter("test4")));
    Expression e1 = ExpressionFactory.or(list);

    Map params = new HashMap();
    params.put("test2", "abc");
    params.put("test3", "xyz");
    Expression e2 = e1.params(params);

    // some expression nodes must be pruned
    assertNotNull(e2);

    assertEquals(2, e2.getOperandCount());

    Expression k2 = (Expression) e2.getOperand(0);
    assertEquals("abc", k2.getOperand(1));

    Expression k3 = (Expression) e2.getOperand(1);
    assertEquals("xyz", k3.getOperand(1));
  }
 public EnterExpression(Expression expression, int operand) {
   if (expression.isTerminal()) {
     finalExpression = expression.repeat(expression.getOperand());
     finalOperand = expression.getOperand();
   } else {
     finalExpression = expression.repeat(operand);
     finalOperand = operand;
   }
 }
  @Test
  public void testNoParams3_FromString() {
    Expression e1 =
        ExpressionFactory.exp("k1 = $test1 or k2 = $test2 or k3 = $test3 or k4 = $test4");

    Map<String, Object> params = new HashMap<String, Object>();
    params.put("test4", "123");
    Expression e2 = e1.params(params);

    // some expression nodes must be pruned
    assertNotNull(e2);
    assertEquals(2, e2.getOperandCount());
    assertEquals("123", e2.getOperand(1));
    assertEquals("k4", ((Expression) e2.getOperand(0)).getOperand(0));
  }
  @Test
  public void testParams2_FromString() {
    Expression e1 = ExpressionFactory.exp("k1 like $test");

    Map<String, Object> map = new HashMap<String, Object>();
    map.put("test", "xyz");
    Expression e2 = e1.params(map, false);
    assertNotNull(e2);
    assertEquals(2, e2.getOperandCount());
    assertEquals(Expression.LIKE, e2.getType());
    assertEquals("xyz", e2.getOperand(1));
  }
  @Test
  public void testNoParams3() throws Exception {
    List list = new ArrayList();
    list.add(ExpressionFactory.matchExp("k1", new ExpressionParameter("test1")));
    list.add(ExpressionFactory.matchExp("k2", new ExpressionParameter("test2")));
    list.add(ExpressionFactory.matchExp("k3", new ExpressionParameter("test3")));
    list.add(ExpressionFactory.matchExp("k4", new ExpressionParameter("test4")));
    Expression e1 = ExpressionFactory.joinExp(Expression.OR, list);

    Map params = new HashMap();
    params.put("test4", "123");
    Expression e2 = e1.params(params, true);

    // some expression nodes must be pruned
    assertNotNull(e2);
    assertTrue("List expression: " + e2, !(e2 instanceof ASTList));

    assertEquals(2, e2.getOperandCount());
    assertEquals("123", e2.getOperand(1));
    assertEquals("k4", ((Expression) e2.getOperand(0)).getOperand(0));
  }
  @Test
  public void testParams2() throws Exception {
    Expression e1 = ExpressionFactory.likeExp("k1", new ExpressionParameter("test"));

    Map map = new HashMap();
    map.put("test", "xyz");
    Expression e2 = e1.params(map, false);
    assertNotNull(e2);
    assertEquals(2, e2.getOperandCount());
    assertEquals(Expression.LIKE, e2.getType());
    assertEquals("xyz", e2.getOperand(1));
  }