package org.xpect.runner;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.junit.runner.Description;
import org.xpect.XpectFile;
import org.xpect.XpectInvocation;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
public class DescriptionFactory {
public static Description createFileDescription(Class<?> clazz, IXpectURIProvider uriProvider, URI uri) {
URI deresolved = uriProvider.deresolveToProject(uri);
Description result = createFileDescription(deresolved.trimSegments(1).toString(), deresolved.lastSegment());
return result;
}
public static Description createFileDescription(XpectFile file) {
URI uri = file.eResource().getURI();
Preconditions.checkArgument(uri.isPlatform());
String pathInProject = Joiner.on('/').join(uri.segmentsList().subList(2, uri.segmentCount() - 1));
return createFileDescription(pathInProject, uri.lastSegment());
}
public static Description createFileDescription(String pathInProject, String fileName) {
String name = fileName + ": " + pathInProject;
Description result = Description.createSuiteDescription(name);
return result;
}
public static Description createFileDescriptionForError(Class<?> clazz, IXpectURIProvider uriProvider, URI uri) {
URI deresolved = uriProvider.deresolveToProject(uri);
String name = deresolved.lastSegment() + ": " + deresolved.trimSegments(1).toString();
Description result = Description.createTestDescription(clazz, name);
return result;
}
public static Description createTestDescription(Class<?> javaClass, IXpectURIProvider uriProvider, XpectInvocation invocation) {
URI uri = uriProvider.deresolveToProject(EcoreUtil.getURI(invocation));
TestTitleRegion titleRegion = invocation.getRelatedRegion(TestTitleRegion.class);
if (titleRegion != null && titleRegion.getTitle() != null)
return Description.createTestDescription(javaClass, uri.toString() + ": " + titleRegion.getTitle());
else
return Description.createTestDescription(javaClass, uri.toString());
}
public static Description createTestDescription(XpectInvocation invocation) {
URI uri = EcoreUtil.getURI(invocation);
Preconditions.checkArgument(uri.isPlatform());
String className = invocation.getFile().getJavaModel().getTestOrSuite().getJvmClass().getQualifiedName();
String text = Joiner.on('/').join(uri.segmentsList().subList(2, uri.segmentCount())) + "#" + uri.fragment();
TestTitleRegion titleRegion = invocation.getRelatedRegion(TestTitleRegion.class);
if (titleRegion != null && titleRegion.getTitle() != null)
return Description.createTestDescription(className, text + ": " + titleRegion.getTitle());
else
return Description.createTestDescription(className, text);
}
}