package org.mvel2.tests.core;
import org.mvel2.MVEL;
import org.mvel2.tests.core.res.Base;
import org.mvel2.util.Make;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class ProjectionsTests extends AbstractTest {
public void testProjectionSupport() {
assertEquals(true, test("(name in things)contains'Bob'"));
}
public void testProjectionSupport1() {
assertEquals(true, test("(name in things) contains 'Bob'"));
}
public void testProjectionSupport2() {
String ex = "(name in things).size()";
Map vars = createTestMap();
assertEquals(3, MVEL.eval(ex, new Base(), vars));
assertEquals(3, test("(name in things).size()"));
}
public void testProjectionSupport3() {
String ex = "(toUpperCase() in ['bar', 'foo'])[1]";
Map vars = createTestMap();
assertEquals("FOO", MVEL.eval(ex, new Base(), vars));
assertEquals("FOO", test("(toUpperCase() in ['bar', 'foo'])[1]"));
}
public void testProjectionSupport4() {
Collection col = (Collection) test("(toUpperCase() in ['zero', 'zen', 'bar', 'foo'] if ($ == 'bar'))");
assertEquals(1, col.size());
assertEquals("BAR", col.iterator().next());
}
public void testProjectionSupport5() {
Collection col = (Collection) test("(toUpperCase() in ['zero', 'zen', 'bar', 'foo'] if ($.startsWith('z')))");
assertEquals(2, col.size());
Iterator iter = col.iterator();
assertEquals("ZERO", iter.next());
assertEquals("ZEN", iter.next());
}
public void testProjectionSupport6() {
assertEquals(true, test("( name in things ) contains 'Bob'"));
}
//
// public void testNestedProjection() {
// Map vars = createTestVars();
// assertEquals(
// Arrays.asList("George", "Michael", "Laura"),
// MVEL.eval("familyMembers = (name in (familyMembers in users));", vars));
// }
public void testConcatProjection() {
Map vars = createTestVars();
assertEquals(
Arrays.asList("George", "Michael", "Laura"),
MVEL.eval(
"def concat(lists) {res = []; foreach (list : lists) {res += list} res;} " +
"familyMembers = (name in concat((familyMembers in users)));", vars));
}
private Map createTestVars() {
Collection users = new ArrayList();
User user1 = new User("John");
user1.getFamilyMembers().add(new User("George"));
User user2 = new User("Bob");
User user3 = new User("Cindy");
user3.getFamilyMembers().add(new User("Michael"));
user3.getFamilyMembers().add(new User("Laura"));
users.add(user1);
users.add(user2);
users.add(user3);
Map vars = new HashMap();
vars.put("users", users);
return vars;
}
public static final class User {
private String name;
private Collection familyMembers = new ArrayList();
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection getFamilyMembers() {
return familyMembers;
}
public void setFamilyMembers(Collection familyMembers) {
this.familyMembers = familyMembers;
}
}
}