1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.jexl;
18
19 import java.util.ArrayList;
20 import java.util.Arrays;
21 import java.util.Map;
22 import java.util.StringTokenizer;
23
24 import junit.framework.TestCase;
25
26 /***
27 * Tests for the foreach statement
28 * @author Dion Gillard
29 * @since 1.1
30 */
31 public class ForEachTest extends TestCase {
32
33 /*** create a named test */
34 public ForEachTest(String name) {
35 super(name);
36 }
37
38 public void testForEachWithEmptyStatement() throws Exception {
39 Expression e = ExpressionFactory.createExpression("foreach (item in list) ;");
40 JexlContext jc = JexlHelper.createContext();
41
42 Object o = e.evaluate(jc);
43 assertNull("Result is not null", o);
44 }
45
46 public void testForEachWithEmptyList() throws Exception {
47 Expression e = ExpressionFactory.createExpression("foreach (item in list) 1+1");
48 JexlContext jc = JexlHelper.createContext();
49
50 Object o = e.evaluate(jc);
51 assertNull("Result is not null", o);
52 }
53
54 public void testForEachWithArray() throws Exception {
55 Expression e = ExpressionFactory.createExpression("foreach (item in list) item");
56 JexlContext jc = JexlHelper.createContext();
57 jc.getVars().put("list", new Object[] {"Hello", "World"});
58 Object o = e.evaluate(jc);
59 assertEquals("Result is not last evaluated expression", "World", o);
60 }
61
62 public void testForEachWithCollection() throws Exception {
63 Expression e = ExpressionFactory.createExpression("foreach (item in list) item");
64 JexlContext jc = JexlHelper.createContext();
65 jc.getVars().put("list", Arrays.asList(new Object[] {"Hello", "World"}));
66 Object o = e.evaluate(jc);
67 assertEquals("Result is not last evaluated expression", "World", o);
68 }
69
70 public void testForEachWithEnumeration() throws Exception {
71 Expression e = ExpressionFactory.createExpression("foreach (item in list) item");
72 JexlContext jc = JexlHelper.createContext();
73 jc.getVars().put("list", new StringTokenizer("Hello,World", ","));
74 Object o = e.evaluate(jc);
75 assertEquals("Result is not last evaluated expression", "World", o);
76 }
77
78 public void testForEachWithIterator() throws Exception {
79 Expression e = ExpressionFactory.createExpression("foreach (item in list) item");
80 JexlContext jc = JexlHelper.createContext();
81 jc.getVars().put("list", Arrays.asList(new Object[] {"Hello", "World"}).iterator());
82 Object o = e.evaluate(jc);
83 assertEquals("Result is not last evaluated expression", "World", o);
84 }
85
86 public void testForEachWithMap() throws Exception {
87 Expression e = ExpressionFactory.createExpression("foreach (item in list) item");
88 JexlContext jc = JexlHelper.createContext();
89 Map map = System.getProperties();
90 String lastProperty = (String) new ArrayList(map.values()).get(System.getProperties().size() - 1);
91 jc.getVars().put("list", map);
92 Object o = e.evaluate(jc);
93 assertEquals("Result is not last evaluated expression", lastProperty, o);
94 }
95
96 public void testForEachWithBlock() throws Exception {
97 Expression e = ExpressionFactory.createExpression("foreach (item in list) { x = x + item; }");
98 JexlContext jc = JexlHelper.createContext();
99 jc.getVars().put("list", new Object[] {"1", "1"});
100 jc.getVars().put("x", new Integer(0));
101 Object o = e.evaluate(jc);
102 assertEquals("Result is wrong", new Long(2), o);
103 assertEquals("x is wrong", new Long(2), jc.getVars().get("x"));
104 }
105
106 public void testForEachWithListExpression() throws Exception {
107 Expression e = ExpressionFactory.createExpression("foreach (item in list.keySet()) item");
108 JexlContext jc = JexlHelper.createContext();
109 Map map = System.getProperties();
110 String lastKey = (String) new ArrayList(map.keySet()).get(System.getProperties().size() - 1);
111 jc.getVars().put("list", map);
112 Object o = e.evaluate(jc);
113 assertEquals("Result is not last evaluated expression", lastKey, o);
114 }
115
116 public void testForEachWithProperty() throws Exception
117 {
118 Expression e = ExpressionFactory.createExpression("foreach (item in list.cheeseList) item");
119 JexlContext jc = JexlHelper.createContext();
120 jc.getVars().put("list", new Foo());
121 Object o = e.evaluate(jc);
122 assertEquals("Result is not last evaluated expression", "brie", o);
123 }
124 }