/**
* Copyright (c) 2013 Eclipse contributors 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.eclipse.emf.test.ecore.xcore.validation;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.test.ecore.xcore.legacy_xpect_runner.ParameterizedXtextRunner;
import org.eclipse.xtext.junit4.IInjectorProvider;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.resource.XtextResourceFactory;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.TestClass;
import com.google.common.collect.Lists;
import com.google.inject.Injector;
public class XcoreParameterizedTestRunner extends ParameterizedXtextRunner
{
public XcoreParameterizedTestRunner(Class<?> testClass) throws InitializationError
{
super(testClass);
}
@Override
protected List<ResourceRunner> getChildren()
{
if (children == null)
{
children = Lists.newArrayList();
IInjectorProvider injectorProvider = getOrCreateInjectorProvider();
Injector injector = injectorProvider.getInjector();
final XtextResourceFactory factory = injector.getInstance(XtextResourceFactory.class);
for (URI uri : getURIs())
{
ResourceRunner child =
new ResourceRunner()
{
@Override
public void init(TestClass clazz, IInjectorProvider injector, URI uri)
{
this.clazz = clazz;
this.injectorProvider = injector;
this.resourceSet = injectorProvider.getInjector().getInstance(ResourceSet.class);
this.resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xcore_test", factory);
this.resource = (XtextResource)resourceSet.getResource(uri, true);
collectParameters();
setIndex();
}
};
child.init(getTestClass(), injectorProvider, uri);
children.add(child);
}
}
return children;
}
}