/******************************************************************************* * Copyright (c) 2012 BMW Car IT 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 *******************************************************************************/ package org.jnario.jnario.test.util; import static org.junit.Assert.assertFalse; import java.net.MalformedURLException; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtend.core.compiler.XtendGenerator; import org.eclipse.xtend.core.macro.declaration.XtendNamedElementImpl; import org.eclipse.xtend.core.naming.XtendQualifiedNameProvider; import org.eclipse.xtend.core.xtend.XtendFile; import org.eclipse.xtend.core.xtend.XtendTypeDeclaration; import org.jnario.spec.naming.ExampleNameProvider; import org.jnario.spec.spec.ExampleGroup; import org.jnario.spec.spec.SpecFile; import org.junit.runner.Result; import com.google.common.collect.Iterables; import com.google.inject.Inject; @SuppressWarnings("restriction") public class SpecExecutor extends BehaviorExecutor{ @Inject private ExampleNameProvider nameProvider; @Inject private XtendQualifiedNameProvider xtendQualifiedNameProvider; @Inject private XtendGenerator xtendGenerator; public SpecExecutor() { super(); validate = false; } protected Result runExamples(EObject object) throws MalformedURLException, ClassNotFoundException { SpecFile spec = (SpecFile) object; CompositeResult result = new CompositeResult(); String packageName = spec.getPackage(); for (XtendTypeDeclaration type : spec.getXtendTypes()) { if (!(type instanceof ExampleGroup)) { String className = type.getName(); compileJavaFile(packageName, className); loadGeneratedClass(packageName, className); } } for (ExampleGroup exampleGroup : Iterables.filter(spec.getXtendTypes(), ExampleGroup.class)) { String specClassName = nameProvider.toJavaClassName(exampleGroup); result.add(runTestsInClass(specClassName, packageName)); } return result; } protected void generateJava(EObject object) { super.generateJava(object); assertFalse("has no examples", ((SpecFile)object).getXtendTypes().isEmpty()); } }