/** * 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.spec.tests.integration; import com.google.inject.Inject; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.xbase.lib.Extension; import org.jnario.jnario.test.util.BehaviorExecutor; import org.jnario.jnario.test.util.SpecTestCreator; import org.jnario.runner.CreateWith; import org.jnario.runner.ExampleGroupRunner; import org.jnario.runner.Named; import org.jnario.runner.Order; import org.junit.Test; import org.junit.runner.RunWith; /** * It is possible to customize the instantiation of features, specs and subjects. * This can be useful when a dependency injection container or a mocking * framework should be used for creating specs. To do so, create a custom `SpecCreator` and * annotate your spec with `CreateWith` and pass as a value the type of the custom `SpecCreator`. * Here is an example for a custom `SpecCreator` that uses Google Guice to create the specification: * * <pre class="prettyprint"> * package org.jnario.lib; * * import com.google.inject.Guice; * import com.google.inject.util.Modules; * * public class GuiceSpecCreator extends AbstractSpecCreator { * public Object create(Class<?> klass) throws Exception { * return Guice.createInjector(Modules.EMPTY_MODULE).getInstance(klass); * } * } * </pre> * * [Here](https://gist.github.com/2869959) is another example that demonstrates * how to create a custom **SpecCreator** for [Mockito](http://code.google.com/p/mockito/). */ @CreateWith(SpecTestCreator.class) @Named("Customizing the Spec Creation") @RunWith(ExampleGroupRunner.class) @SuppressWarnings("all") public class CustomizingTheSpecCreationSpec { @Inject @Extension @org.jnario.runner.Extension public BehaviorExecutor _behaviorExecutor; /** * This example uses the Google Guice to instantiate the specification. * @filter('''|.executesSuccessfully) */ @Test @Named("Example") @Order(1) public void _example() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("package bootstrap"); _builder.newLine(); _builder.newLine(); _builder.append("import org.jnario.runner.CreateWith"); _builder.newLine(); _builder.append("import org.jnario.jnario.test.util.GuiceSpecCreator"); _builder.newLine(); _builder.append("import com.google.inject.Inject"); _builder.newLine(); _builder.newLine(); _builder.append("@CreateWith(typeof(GuiceSpecCreator))"); _builder.newLine(); _builder.append("describe \"Something\" {"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("@Inject String toInject"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("fact toInject should not be null"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append("}"); _builder.newLine(); this._behaviorExecutor.executesSuccessfully(_builder); } }