/*******************************************************************************
* Copyright (c) 2005, 2007 committers of openArchitectureWare and others.
* 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:
* committers of openArchitectureWare - initial API and implementation
*******************************************************************************/
package org.eclipse.xtend.shared.ui.test.core;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.xtend.shared.ui.Activator;
import org.eclipse.xtend.shared.ui.core.IXtendXpandProject;
import org.eclipse.xtend.shared.ui.core.metamodel.jdt.JdtMetaModel;
import org.eclipse.xtend.shared.ui.core.metamodel.jdt.javabean.JdtJavaBeanTypeStrategy;
import org.eclipse.xtend.shared.ui.expression.XpandPluginExecutionContext;
import org.eclipse.xtend.shared.ui.test.PluginTestBase;
import org.eclipse.xtend.typesystem.Operation;
import org.eclipse.xtend.typesystem.Property;
import org.eclipse.xtend.typesystem.Type;
public class JdtJavaBeanTest extends PluginTestBase {
private XpandPluginExecutionContext ctx;
@Override
public void setUp() throws Exception {
super.setUp();
env.openEmptyWorkspace();
final IPath pPath = env.addProject("test-"+System.currentTimeMillis());
// Clear classpath, we set it up on our own...
env.setClasspath(pPath, new IClasspathEntry[0]);
env.addExternalJars(pPath, env.getJavaClassLibs());
final IJavaProject project = env.getJavaProject(pPath);
final IXtendXpandProject xp = Activator.getExtXptModelManager().findProject(pPath);
ctx = new XpandPluginExecutionContext(xp);
final JdtMetaModel mm = new JdtMetaModel("DEFAULT", project, new JdtJavaBeanTypeStrategy(project));
ctx.registerMetaModel(mm);
}
public final void testProperties() throws JavaModelException {
final Type type = ctx.getTypeForName("javax::swing::JTextField");
assertNotNull(type);
assertEquals(ctx.getBooleanType(), type.getProperty("valid").getReturnType());
Property prop = type.getProperty("UIClassID");
assertNotNull(prop);
assertEquals(ctx.getStringType(), prop.getReturnType());
prop = type.getProperty("graphics");
assertNotNull(prop);
assertEquals(ctx.getTypeForName("java::awt::Graphics"), prop.getReturnType());
}
public final void testOperations() throws JavaModelException {
final Type type = ctx.getTypeForName("javax::swing::JTextField");
assertNotNull(type);
final Type param = ctx.getTypeForName("java::awt::Rectangle");
assertNotNull(param);
Operation op = type.getOperation("scrollRectToVisible", new Type[] { param });
assertNotNull(op);
assertEquals(ctx.getVoidType(), op.getReturnType());
final Type param1 = ctx.getTypeForName("java::awt::Image");
final Type param2 = ctx.getTypeForName("java::awt::image::ImageObserver");
op = type.getOperation("prepareImage", new Type[] { param1, param2 });
assertNotNull(op);
assertEquals(ctx.getBooleanType(), op.getReturnType());
assertEquals(op, type.getOperation("prepareImage", new Type[] {
ctx.getTypeForName("java::awt::image::BufferedImage"), param2 }));
}
}