package org.jnario.jvmmodel; import com.google.common.base.Objects; import com.google.inject.Inject; import java.util.Collection; import java.util.List; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.common.util.EList; import org.eclipse.xtend.core.xtend.XtendClass; import org.eclipse.xtend.core.xtend.XtendMember; import org.eclipse.xtext.common.types.JvmAnnotationReference; import org.eclipse.xtext.common.types.JvmGenericType; import org.eclipse.xtext.common.types.JvmOperation; import org.eclipse.xtext.common.types.JvmTypeReference; import org.eclipse.xtext.common.types.util.TypeReferences; import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder; import org.eclipse.xtext.xbase.lib.Extension; import org.jnario.Executable; import org.jnario.Specification; import org.jnario.jvmmodel.TestRuntimeSupport; import org.jnario.runner.Contains; import org.jnario.runner.ExampleGroupRunner; import org.jnario.runner.FeatureRunner; @SuppressWarnings("all") public class JUnit4RuntimeSupport implements TestRuntimeSupport { private final static String RUN_WITH = "org.junit.runner.RunWith"; @Inject @Extension private JvmTypesBuilder _jvmTypesBuilder; @Inject private TypeReferences typeReferences; public void addChildren(final Specification context, final JvmGenericType parent, final Collection<JvmTypeReference> children) { boolean _isEmpty = children.isEmpty(); boolean _not = (!_isEmpty); if (_not) { EList<JvmAnnotationReference> _annotations = parent.getAnnotations(); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(context, Contains.class, children); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } } public void afterAllMethod(final XtendMember after, final JvmOperation operation) { EList<JvmAnnotationReference> _annotations = operation.getAnnotations(); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(after, "org.junit.AfterClass"); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public void afterMethod(final XtendMember after, final JvmOperation operation) { EList<JvmAnnotationReference> _annotations = operation.getAnnotations(); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(after, "org.junit.After"); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public void beforeAllMethod(final XtendMember before, final JvmOperation operation) { EList<JvmAnnotationReference> _annotations = operation.getAnnotations(); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(before, "org.junit.BeforeClass"); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public void beforeMethod(final XtendMember before, final JvmOperation operation) { EList<JvmAnnotationReference> _annotations = operation.getAnnotations(); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(before, "org.junit.Before"); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public void markAsPending(final Executable element, final JvmOperation operation) { EList<JvmAnnotationReference> _annotations = operation.getAnnotations(); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(element, "org.junit.Ignore"); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public void updateExampleGroup(final XtendClass exampleGroup, final JvmGenericType inferredType) { EList<JvmAnnotationReference> _annotations = inferredType.getAnnotations(); JvmTypeReference _typeForName = this.getTypeForName(ExampleGroupRunner.class, exampleGroup); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(exampleGroup, JUnit4RuntimeSupport.RUN_WITH, _typeForName); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public void markAsTestMethod(final Executable element, final JvmOperation operation) { EList<JvmAnnotationReference> _annotations = operation.getAnnotations(); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(element, "org.junit.Test"); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public void updateFeature(final XtendClass feature, final JvmGenericType inferredType, final List<JvmTypeReference> scenarios) { EList<JvmAnnotationReference> _annotations = inferredType.getAnnotations(); JvmTypeReference _typeForName = this.getTypeForName(FeatureRunner.class, feature); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(feature, JUnit4RuntimeSupport.RUN_WITH, _typeForName); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public void updateScenario(final XtendClass scenario, final JvmGenericType inferredType) { EList<JvmAnnotationReference> _annotations = inferredType.getAnnotations(); JvmTypeReference _typeForName = this.getTypeForName(FeatureRunner.class, scenario); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(scenario, JUnit4RuntimeSupport.RUN_WITH, _typeForName); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public void updateSuite(final XtendClass exampleGroup, final JvmGenericType inferredType) { EList<JvmAnnotationReference> _annotations = inferredType.getAnnotations(); JvmTypeReference _typeForName = this.getTypeForName(ExampleGroupRunner.class, exampleGroup); JvmAnnotationReference _annotation = this._jvmTypesBuilder.toAnnotation(exampleGroup, JUnit4RuntimeSupport.RUN_WITH, _typeForName); this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotation); } public JvmTypeReference getTypeForName(final Class<?> type, final Notifier context) { JvmTypeReference _xblockexpression = null; { final JvmTypeReference result = this.typeReferences.getTypeForName(type, context); boolean _equals = Objects.equal(result, null); if (_equals) { String _name = type.getName(); String _plus = ("Jnario runtime could not be resolved: " + _name); throw new IllegalStateException(_plus); } _xblockexpression = result; } return _xblockexpression; } }