/*******************************************************************************
* Copyright (c) 2006 Eclipse.org
*
* 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
*******************************************************************************/
package org.eclipse.gmf.tests.type.baseimpl.types;
import junit.framework.TestCase;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.gmf.tests.expression.ast.ATypeModel;
import org.eclipse.gmf.internal.xpand.BuiltinMetaModel;
import org.eclipse.gmf.internal.xpand.expression.ExecutionContext;
import org.eclipse.gmf.internal.xpand.expression.ExpressionFacade;
import org.eclipse.gmf.internal.xpand.expression.Variable;
public class EnumTest extends TestCase {
private ATypeModel aType;
protected void setUp() throws Exception {
aType = new ATypeModel();
}
public final void testSimple() {
ExecutionContext ctx = aType.newContext(null, new Variable("obj", aType.getInstance()));
ExpressionFacade ec = new ExpressionFacade(ctx);
final String fieldAccessor = "obj." + ATypeModel.ENUM_ATTR;
final String literal1Name = ATypeModel.ENUM_TYPE_NAME + "::" + ATypeModel.LITERAL1_NAME;
final String literal2Name = ATypeModel.ENUM_TYPE_NAME + "::" + ATypeModel.LITERAL2_NAME;
aType.setEnumAttr(ATypeModel.LITERAL1_NAME);
assertEquals(Boolean.TRUE, ec.evaluate(fieldAccessor + " == " + literal1Name));
assertEquals(Boolean.TRUE, ec.evaluate(fieldAccessor + " != " + literal2Name));
aType.setEnumAttr(ATypeModel.LITERAL2_NAME);
assertEquals(Boolean.TRUE, ec.evaluate(fieldAccessor + " == " + literal2Name));
assertEquals(Boolean.TRUE, ec.evaluate(fieldAccessor + " != " + literal1Name));
EClassifier t = BuiltinMetaModel.getType(ec.evaluate(literal1Name));
// XXX was: assertEquals(aType.getMetaEnum(), t);
assertEquals(EcorePackage.eINSTANCE.getEEnumerator(), t);
}
}