/**
* 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.suite.unit;
import com.google.inject.Inject;
import java.util.List;
import java.util.Set;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.jnario.Specification;
import org.jnario.jnario.test.util.ModelStore;
import org.jnario.jnario.test.util.Specs;
import org.jnario.jnario.test.util.SuiteTestCreator;
import org.jnario.jnario.test.util.Suites;
import org.jnario.lib.Assert;
import org.jnario.lib.JnarioCollectionLiterals;
import org.jnario.lib.Should;
import org.jnario.runner.Contains;
import org.jnario.runner.CreateWith;
import org.jnario.runner.ExampleGroupRunner;
import org.jnario.runner.Named;
import org.jnario.runner.Order;
import org.jnario.runner.Subject;
import org.jnario.spec.spec.ExampleGroup;
import org.jnario.suite.jvmmodel.SpecResolver;
import org.jnario.suite.jvmmodel.SuiteClassNameProvider;
import org.jnario.suite.suite.SpecReference;
import org.jnario.suite.suite.Suite;
import org.jnario.suite.unit.SpecResolverEvaluatesRegularExpressionsSpec;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@Contains(SpecResolverEvaluatesRegularExpressionsSpec.class)
@CreateWith(SuiteTestCreator.class)
@Named("SpecResolver")
@RunWith(ExampleGroupRunner.class)
@SuppressWarnings("all")
public class SpecResolverSpec {
@Subject
public SpecResolver subject;
@Inject
@Extension
@org.jnario.runner.Extension
public ModelStore m;
@Inject
@Extension
@org.jnario.runner.Extension
public SuiteClassNameProvider _suiteClassNameProvider;
@Before
public void before() throws Exception {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package demo");
_builder.newLine();
_builder.append("describe \"My Spec\"{");
_builder.newLine();
_builder.append("\t");
_builder.append("// this should be filtered");
_builder.newLine();
_builder.append("\t");
_builder.append("describe \"My Internal Spec\"{");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("describe String{");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("}");
_builder.newLine();
this.m.parseSpec(_builder);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package demo");
_builder_1.newLine();
_builder_1.append("Feature: My Feature");
_builder_1.newLine();
_builder_1.append("Scenario My Scenario");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("Given nothing");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("Then nothing");
_builder_1.newLine();
this.m.parseScenario(_builder_1);
}
@Test
@Named("resolves referenced specs")
@Order(1)
public void _resolvesReferencedSpecs() throws Exception {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package demo");
_builder.newLine();
_builder.append("import demo.*");
_builder.newLine();
_builder.append("#My Suite");
_builder.newLine();
_builder.newLine();
_builder.append("- \"My Spec\"");
_builder.newLine();
_builder.append("- \"My Feature\"");
_builder.newLine();
this.m.parseSuite(_builder);
Suite _firstSuite = this.m.firstSuite();
List<String> _resolvedSpecs = this.resolvedSpecs(_firstSuite);
Set<String> _set = IterableExtensions.<String>toSet(_resolvedSpecs);
Set<String> _set_1 = JnarioCollectionLiterals.<String>set("MySpecSpec", "MyFeatureFeature");
Assert.assertTrue("\nExpected resolvedSpecs(firstSuite).toSet => set(\"MySpecSpec\", \"MyFeatureFeature\") but"
+ "\n resolvedSpecs(firstSuite).toSet is " + new org.hamcrest.StringDescription().appendValue(_set).toString()
+ "\n resolvedSpecs(firstSuite) is " + new org.hamcrest.StringDescription().appendValue(_resolvedSpecs).toString()
+ "\n firstSuite is " + new org.hamcrest.StringDescription().appendValue(_firstSuite).toString()
+ "\n set(\"MySpecSpec\", \"MyFeatureFeature\") is " + new org.hamcrest.StringDescription().appendValue(_set_1).toString() + "\n", Should.<Set<String>>operator_doubleArrow(_set, _set_1));
}
@Test
@Named("ignores specs without name")
@Order(2)
public void _ignoresSpecsWithoutName() throws Exception {
final ExampleGroup specWithoutName = Specs.exampleGroup(null);
SpecReference _specReference = Suites.specReference(specWithoutName);
final Suite suite = Suites.suiteWith("A Suite", _specReference);
List<Specification> _resolveSpecs = this.subject.resolveSpecs(suite);
List<ExampleGroup> _list = JnarioCollectionLiterals.<ExampleGroup>list(specWithoutName);
Assert.assertTrue("\nExpected subject.resolveSpecs(suite) => list(specWithoutName) but"
+ "\n subject.resolveSpecs(suite) is " + new org.hamcrest.StringDescription().appendValue(_resolveSpecs).toString()
+ "\n subject is " + new org.hamcrest.StringDescription().appendValue(this.subject).toString()
+ "\n suite is " + new org.hamcrest.StringDescription().appendValue(suite).toString()
+ "\n list(specWithoutName) is " + new org.hamcrest.StringDescription().appendValue(_list).toString()
+ "\n specWithoutName is " + new org.hamcrest.StringDescription().appendValue(specWithoutName).toString() + "\n", Should.<List<? extends Specification>>operator_doubleArrow(_resolveSpecs, _list));
}
public List<String> resolvedSpecs(final Suite suite) {
List<Specification> _resolveSpecs = this.subject.resolveSpecs(suite);
final Function1<Specification, String> _function = new Function1<Specification, String>() {
public String apply(final Specification it) {
return SpecResolverSpec.this._suiteClassNameProvider.toJavaClassName(it);
}
};
List<String> _map = ListExtensions.<Specification, String>map(_resolveSpecs, _function);
return IterableExtensions.<String>toList(_map);
}
}