    1   /*
    2    * Copyright 2002-2006 The Apache Software Foundation.
    3    *
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    *
    8    *      http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16
    17  package org.apache.commons.jexl;
    18
    19  import junit.framework.TestCase;
    20
    21  /***
    22   * Test cases for the if statement.
    23   *
    24   * @author Dion Gillard
    25   * @since 1.1
    26   */
    27  public class IfTest extends TestCase {
    28
    29      public IfTest(String testName) {
    30          super(testName);
    31      }
    32
    33      /***
    34       * Make sure if true executes the true statement
    35       *
    36       * @throws Exception on any error
    37       */
    38      public void testSimpleIfTrue() throws Exception {
    39          Expression e = ExpressionFactory.createExpression("if (true) 1");
    40          JexlContext jc = JexlHelper.createContext();
    41
    42          Object o = e.evaluate(jc);
    43          assertEquals("Result is not 1", new Integer(1), o);
    44      }
    45
    46      /***
    47       * Make sure if false doesn't execute the true statement
    48       *
    49       * @throws Exception on any error
    50       */
    51      public void testSimpleIfFalse() throws Exception {
    52          Expression e = ExpressionFactory.createExpression("if (false) 1");
    53          JexlContext jc = JexlHelper.createContext();
    54
    55          Object o = e.evaluate(jc);
    56          assertNull("Return value is not empty", o);
    57      }
    58
    59      /***
    60       * Make sure if false executes the false statement
    61       *
    62       * @throws Exception on any error
    63       */
    64      public void testSimpleElse() throws Exception {
    65          Expression e = ExpressionFactory
    66                  .createExpression("if (false) 1; else 2;");
    67          JexlContext jc = JexlHelper.createContext();
    68
    69          Object o = e.evaluate(jc);
    70          assertEquals("Result is not 2", new Integer(2), o);
    71      }
    72
    73      /***
    74       * Test the if statement handles blocks correctly
    75       *
    76       * @throws Exception on any error
    77       */
    78      public void testBlockIfTrue() throws Exception {
    79          Expression e = ExpressionFactory
    80                  .createExpression("if (true) { 'hello'; }");
    81          JexlContext jc = JexlHelper.createContext();
    82
    83          Object o = e.evaluate(jc);
    84          assertEquals("Result is wrong", "hello", o);
    85      }
    86
    87      /***
    88       * Test the if statement handles blocks in the else statement correctly
    89       *
    90       * @throws Exception on any error
    91       */
    92      public void testBlockElse() throws Exception {
    93          Expression e = ExpressionFactory
    94                  .createExpression("if (false) {1;} else {2;}");
    95          JexlContext jc = JexlHelper.createContext();
    96
    97          Object o = e.evaluate(jc);
    98          assertEquals("Result is wrong", new Integer(2), o);
    99      }
    100
    101     /***
    102      * Test the if statement evaluates expressions correctly
    103      *
    104      * @throws Exception on any error
    105      */
    106     public void testIfWithSimpleExpression() throws Exception {
    107         Expression e = ExpressionFactory
    108                 .createExpression("if (x == 1) true;");
    109         JexlContext jc = JexlHelper.createContext();
    110         jc.getVars().put("x", new Integer(1));
    111
    112         Object o = e.evaluate(jc);
    113         assertEquals("Result is not true", Boolean.TRUE, o);
    114     }
    115
    116     /***
    117      * Test the if statement evaluates arithmetic expressions correctly
    118      *
    119      * @throws Exception on any error
    120      */
    121     public void testIfWithArithmeticExpression() throws Exception {
    122         Expression e = ExpressionFactory
    123                 .createExpression("if ((x * 2) + 1 == 5) true;");
    124         JexlContext jc = JexlHelper.createContext();
    125         jc.getVars().put("x", new Integer(2));
    126
    127         Object o = e.evaluate(jc);
    128         assertEquals("Result is not true", Boolean.TRUE, o);
    129     }
    130
    131     /***
    132      * Test the if statement evaluates decimal arithmetic expressions correctly
    133      *
    134      * @throws Exception on any error
    135      */
    136     public void testIfWithDecimalArithmeticExpression() throws Exception {
    137         Expression e = ExpressionFactory
    138                 .createExpression("if ((x * 2) == 5) true;");
    139         JexlContext jc = JexlHelper.createContext();
    140         jc.getVars().put("x", new Float(2.5f));
    141
    142         Object o = e.evaluate(jc);
    143         assertEquals("Result is not true", Boolean.TRUE, o);
    144     }
    145
    146     /***
    147      * Test the if statement works with assignment
    148      *
    149      * @throws Exception on any error
    150      */
    151     public void testIfWithAssignment() throws Exception {
    152         Expression e = ExpressionFactory
    153                 .createExpression("if ((x * 2) == 5) {y = 1;} else {y = 2;}");
    154         JexlContext jc = JexlHelper.createContext();
    155         jc.getVars().put("x", new Float(2.5f));
    156
    157         e.evaluate(jc);
    158         Object result = jc.getVars().get("y");
    159         assertEquals("y has the wrong value", new Integer(1), result);
    160     }
    161 }