/*
Copyright (c) 2008 Arno Haase, Andr� Arnold.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html
Contributors:
Arno Haase - initial API and implementation
Andr� Arnold
*/
package org.eclipse.xtend.backend.expr;
import static org.eclipse.xtend.backend.testhelpers.BackendTestHelper.SOURCE_POS;
import static org.eclipse.xtend.backend.testhelpers.BackendTestHelper.createEmptyExecutionContext;
import static org.eclipse.xtend.backend.testhelpers.BackendTestHelper.createLiteral;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.xtend.backend.common.ExecutionContext;
import org.eclipse.xtend.backend.common.ExpressionBase;
import org.eclipse.xtend.backend.types.builtin.ListType;
import org.junit.Test;
/**
*
* @author Arno Haase (http://www.haase-consulting.com)
* @author Andr� Arnold
*/
public class CreateCachedExpressionTest {
private ExecutionContext _ctx = null;
@Test public void testLogic () {
_ctx = createEmptyExecutionContext();
final List<Object> listNoKey = eval ();
final List<Object> listA = eval ("a");
final List<Object> listB = eval ("b");
final List<Object> listAB = eval ("a", "b");
listNoKey.add ("no key");
listA.add ("Aa");
listB.add ("Bb");
listAB.add ("AaBb");
assertSame (listNoKey, eval ());
assertSame (listA, eval ("a"));
assertSame (listB, eval ("b"));
assertSame (listAB, eval ("a", "b"));
assertEquals (1, eval().size());
assertEquals (1, eval("a").size());
assertEquals (1, eval("b").size());
assertEquals (1, eval("a", "b").size());
assertEquals ("no key", eval().get(0));
assertEquals ("Aa", eval("a").get(0));
assertEquals ("Bb", eval("b").get(0));
assertEquals ("AaBb", eval("a", "b").get(0));
_ctx = createEmptyExecutionContext();
assertNotSame (listNoKey, eval());
assertTrue (eval().isEmpty());
}
@SuppressWarnings("unchecked")
private List<Object> eval (Object... keys) {
final List<ExpressionBase> keyExpr = new ArrayList<ExpressionBase> ();
for (Object o: keys)
keyExpr.add (createLiteral (o));
return (List<Object>) new CreateCachedExpression (ListType.INSTANCE, keyExpr, SOURCE_POS).evaluate (_ctx);
}
}