/* 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.createEmptyFdc; import static org.eclipse.xtend.backend.testhelpers.BackendTestHelper.createLiteral; import static org.junit.Assert.assertEquals; import java.util.Arrays; import org.eclipse.xtend.backend.common.ExecutionContext; import org.eclipse.xtend.backend.common.ExpressionBase; import org.eclipse.xtend.backend.common.Helpers; import org.eclipse.xtend.backend.common.NamedFunction; import org.eclipse.xtend.backend.functions.FunctionDefContextInternal; import org.eclipse.xtend.backend.testhelpers.NamedFunctionFactory; import org.eclipse.xtend.backend.types.CompositeTypesystem; import org.eclipse.xtend.backend.types.builtin.ObjectType; import org.junit.Test; /** * * @author Arno Haase (http://www.haase-consulting.com) * @author Andr� Arnold */ public class ConcatExpressionTest { @Test public void testLogic () { assertEquals ("", eval ()); assertEquals ("abc", eval (createLiteral ("abc"))); assertEquals ("abc", eval (createLiteral ("a"), createLiteral ("b"), createLiteral ("c"))); assertEquals ("123", eval (createLiteral (1), createLiteral (2), createLiteral (3))); assertEquals ("123", eval (createLiteral (1), createLiteral ("2"), createLiteral (3))); assertEquals ("", eval (createLiteral (null))); assertEquals ("a", eval (createLiteral (null), createLiteral ("a"))); } private Object eval (ExpressionBase... parts) { return new ConcatExpression (Arrays.asList(parts), SOURCE_POS).evaluate (createEmptyExecutionContext()).toString(); } @Test public void testUsesToStringExtension () { final NamedFunction myToString = new NamedFunctionFactory (Helpers.TO_STRING_METHOD_NAME.getSimpleName(), ObjectType.INSTANCE) { public Object invoke (ExecutionContext ctx, Object[] params) { return "#" + params[0] + "!"; } }.create(); final FunctionDefContextInternal fdc = createEmptyFdc (new CompositeTypesystem ()); fdc.register (myToString, true); final ExpressionBase expr = new ConcatExpression (Arrays.asList (createLiteral("a"), createLiteral("b")), SOURCE_POS); final ExecutionContext ctx = createEmptyExecutionContext(); assertEquals ("ab", expr.evaluate(ctx).toString()); ctx.setFunctionDefContext(fdc); assertEquals ("#a!#b!", expr.evaluate(ctx).toString()); } }