Skip to content

Commit

Permalink
returns a boolean indicating whether or not stepdefs/hooks for that …
Browse files Browse the repository at this point in the history
…class should be registered.
  • Loading branch information
aslakhellesoy committed Jul 9, 2015
1 parent d55bcae commit 65bbb26
Show file tree
Hide file tree
Showing 13 changed files with 45 additions and 32 deletions.
11 changes: 6 additions & 5 deletions History.md
@@ -1,12 +1,13 @@
## [1.2.4-SNAPSHOT](https://github.com/cucumber/cucumber-jvm/compare/v1.2.3...master) (In Git)

* [Java] `ObjectFactory.addClass` returns a boolean indicating whether or not stepdefs/hooks for that class should be registered. (Aslak Hellesøy)
* [examples] Fix to allow lein test to to run successfully ([#805](https://github.com/cucumber/cucumber-jvm/pull/805) Chris Howe-Jones)

## [1.2.3](https://github.com/cucumber/cucumber-jvm/compare/v1.2.2...v1.2.3) (2015-07-07)

* [Core] Make the Rerun Formatter consistent with the exit code ([#871](https://github.com/cucumber/cucumber-jvm/pull/871) Björn Rasmusson)
* [OSGi] Cucumber is ready to run in OSGi containers ([#873](https://github.com/cucumber/cucumber-jvm/pull/873), [#799](https://github.com/cucumber/cucumber-jvm/pull/799) @HendrikSP)
* [Core] `cucumber.runtime.java.ObjectFactory` moved to `cucumber.api.java.ObjectFactory`. Custom implementation can
* [Java] `cucumber.runtime.java.ObjectFactory` moved to `cucumber.api.java.ObjectFactory`. Custom implementation can
be specified in `cucumber.properties` with `cucumber.api.java.ObjectFactory=my.special.KindOfObjectFactory`. (Closes [#290](https://github.com/cucumber/cucumber-jvm/issues/290) Aslak Hellesøy)
* [Core] Properly decode jar URLs with spaces (%20) - ([#866](https://github.com/cucumber/cucumber-jvm/issues/866) Aslak Hellesøy)
* [Java] Arity mismatch Java8 Step Definition error ([#852](https://github.com/cucumber/cucumber-jvm/issues/852), [#847](https://github.com/cucumber/cucumber-jvm/pull/847) David Coelho)
Expand All @@ -18,10 +19,10 @@
* [Core] Call all formatters, also in case of unimplemented methods ([#842](https://github.com/cucumber/cucumber-jvm/pull/842), [#803](https://github.com/cucumber/cucumber-jvm/issues/803) Björn Rasmusson)
* [TestNG] Run each feature as separate TestNG test ([#817](https://github.com/cucumber/cucumber-jvm/pull/817), [#653](https://github.com/cucumber/cucumber-jvm/pull/653) Dmitry Sidorenko, Björn Rasmusson)
* [Core] Implement TestNG-compatible XML formatter ([#818](https://github.com/cucumber/cucumber-jvm/pull/818), [#621](https://github.com/cucumber/cucumber-jvm/pull/621) Dmitry Berezhony, Björn Rasmusson)
* `DataTable.diff(List)` gives proper error message when the `List` argument is empty (Aslak Hellesøy)
* Execute no scenarios when the rerun file is empty ([#840](https://github.com/cucumber/cucumber-jvm/issues/840) Björn Rasmusson)
* Snippets for quoted arguments changed from `(.*?)` to `([^\"]*)` (which is how it was before 1.1.6). See [cucumber/cucumber#663](https://github.com/cucumber/cucumber/pull/663) (Aslak Hellesøy)
* Fix non running gradle example ([#839](https://github.com/cucumber/cucumber-jvm/pull/839) Ole Christian Langfjæran)
* [Core] `DataTable.diff(List)` gives proper error message when the `List` argument is empty (Aslak Hellesøy)
* [Core] Execute no scenarios when the rerun file is empty ([#840](https://github.com/cucumber/cucumber-jvm/issues/840) Björn Rasmusson)
* [Core] Snippets for quoted arguments changed from `(.*?)` to `([^\"]*)` (which is how it was before 1.1.6). See [cucumber/cucumber#663](https://github.com/cucumber/cucumber/pull/663) (Aslak Hellesøy)
* [Core] Fix non running gradle example ([#839](https://github.com/cucumber/cucumber-jvm/pull/839) Ole Christian Langfjæran)
* [Clojure] Improved documentation for the clojure module ([#864](https://github.com/cucumber/cucumber-jvm/pull/864) Paul Doran)

## [1.2.2](https://github.com/cucumber/cucumber-jvm/compare/v1.2.0...v1.2.2) (2015-01-13)
Expand Down
Expand Up @@ -48,8 +48,8 @@ public void stop() {
}

@Override
public void addClass(final Class<?> clazz) {
delegate.addClass(clazz);
public boolean addClass(final Class<?> clazz) {
return delegate.addClass(clazz);
}

@Override
Expand Down
Expand Up @@ -31,7 +31,9 @@ public GuiceFactory() throws IOException {
this.injector = injector;
}

public void addClass(Class<?> clazz) {}
public boolean addClass(Class<?> clazz) {
return true;
}

public void start() {
injector.getInstance(ScenarioScope.class).enterScope();
Expand Down
3 changes: 2 additions & 1 deletion java/src/main/java/cucumber/api/java/ObjectFactory.java
Expand Up @@ -19,8 +19,9 @@ public interface ObjectFactory {
* Collects glue classes in the classpath. Called once on init.
*
* @param glueClass Glue class containing cucumber.api annotations (Before, Given, When, ...)
* @return true if stepdefs and hooks in this class should be used, false if they should be ignored.
*/
void addClass(Class<?> glueClass);
boolean addClass(Class<?> glueClass);

/**
* Provides the glue instances used to execute the current scenario. The instance can be prepared in
Expand Down
Expand Up @@ -22,7 +22,8 @@ public void stop() {
instances.clear();
}

public void addClass(Class<?> clazz) {
public boolean addClass(Class<?> clazz) {
return true;
}

public <T> T getInstance(Class<T> type) {
Expand Down
30 changes: 16 additions & 14 deletions java/src/main/java/cucumber/runtime/java/JavaBackend.java
Expand Up @@ -93,8 +93,9 @@ public void loadGlue(Glue glue, List<String> gluePaths) {
continue;
}

objectFactory.addClass(glueClass);
glueBaseClasses.add(glueClass);
if (objectFactory.addClass(glueClass)) {
glueBaseClasses.add(glueClass);
}
}
}
}
Expand Down Expand Up @@ -146,8 +147,9 @@ public String getSnippet(Step step, FunctionNameGenerator functionNameGenerator)

void addStepDefinition(Annotation annotation, Method method) {
try {
objectFactory.addClass(method.getDeclaringClass());
glue.addStepDefinition(new JavaStepDefinition(method, pattern(annotation), timeoutMillis(annotation), objectFactory));
if (objectFactory.addClass(method.getDeclaringClass())) {
glue.addStepDefinition(new JavaStepDefinition(method, pattern(annotation), timeoutMillis(annotation), objectFactory));
}
} catch (DuplicateStepDefinitionException e) {
throw e;
} catch (Throwable e) {
Expand All @@ -164,16 +166,16 @@ public void addStepDefinition(String regexp, long timeoutMillis, StepdefBody bod
}

void addHook(Annotation annotation, Method method) {
objectFactory.addClass(method.getDeclaringClass());

if (annotation.annotationType().equals(Before.class)) {
String[] tagExpressions = ((Before) annotation).value();
long timeout = ((Before) annotation).timeout();
glue.addBeforeHook(new JavaHookDefinition(method, tagExpressions, ((Before) annotation).order(), timeout, objectFactory));
} else {
String[] tagExpressions = ((After) annotation).value();
long timeout = ((After) annotation).timeout();
glue.addAfterHook(new JavaHookDefinition(method, tagExpressions, ((After) annotation).order(), timeout, objectFactory));
if (objectFactory.addClass(method.getDeclaringClass())) {
if (annotation.annotationType().equals(Before.class)) {
String[] tagExpressions = ((Before) annotation).value();
long timeout = ((Before) annotation).timeout();
glue.addBeforeHook(new JavaHookDefinition(method, tagExpressions, ((Before) annotation).order(), timeout, objectFactory));
} else {
String[] tagExpressions = ((After) annotation).value();
long timeout = ((After) annotation).timeout();
glue.addAfterHook(new JavaHookDefinition(method, tagExpressions, ((After) annotation).order(), timeout, objectFactory));
}
}
}

Expand Down
Expand Up @@ -22,7 +22,8 @@ public void stop() {
}

@Override
public void addClass(Class<?> clazz) {
public boolean addClass(Class<?> clazz) {
return true;
}

@Override
Expand Down
Expand Up @@ -53,13 +53,14 @@ public void stop() {
}

@Override
public void addClass(final Class<?> type) {
public boolean addClass(final Class<?> type) {
logger.trace("addClass(): " + type.getCanonicalName());

// build up cache keys ...
if (!cachedStepsInstances.containsKey(type)) {
cachedStepsInstances.put(type, null);
}
return true;
}

private void assertTypeHasBeenAdded(final Class<?> type) {
Expand Down
Expand Up @@ -39,8 +39,9 @@ public void stop() {
}

@Override
public void addClass(Class<?> clazz) {
public boolean addClass(Class<?> clazz) {
classes.add(clazz.getName());
return true;
}

@Override
Expand Down
Expand Up @@ -21,7 +21,8 @@ public void stop() {
}

@Override
public void addClass(Class<?> glueClass) {
public boolean addClass(Class<?> glueClass) {
return true;
}

@Override
Expand Down
Expand Up @@ -26,10 +26,11 @@ public void stop() {
pico.dispose();
}

public void addClass(Class<?> clazz) {
public boolean addClass(Class<?> clazz) {
if (Utils.isInstantiable(clazz) && classes.add(clazz)) {
addConstructorDependencies(clazz);
}
return true;
}

public <T> T getInstance(Class<T> type) {
Expand Down
Expand Up @@ -56,7 +56,7 @@ public SpringFactory() {
}

@Override
public void addClass(final Class<?> stepClass) {
public boolean addClass(final Class<?> stepClass) {
if (!stepClasses.contains(stepClass)) {
if (dependsOnSpringContext(stepClass)) {
if (stepClassWithSpringContext == null) {
Expand All @@ -66,8 +66,8 @@ public void addClass(final Class<?> stepClass) {
}
}
stepClasses.add(stepClass);

}
return true;
}

private void checkAnnotationsEqual(Class<?> stepClassWithSpringContext, Class<?> stepClass) {
Expand Down
Expand Up @@ -43,7 +43,8 @@ public void stop() {
}

@Override
public void addClass(Class<?> clazz) {
public boolean addClass(Class<?> clazz) {
return true;
}

@Override
Expand Down

0 comments on commit 65bbb26

Please sign in to comment.