PropertyBasedConfiguration.java
package org.jbehave.core.configuration;
import org.jbehave.core.failures.FailingUponPendingStep;
import org.jbehave.core.failures.PendingStepStrategy;
import org.jbehave.core.reporters.SilentSuccessFilter;
import org.jbehave.core.reporters.StoryReporter;
/**
* PropertyBasedConfiguration is backed by MostUsefulConfiguration as default,
* but has different behaviour if certain system properties are set:
* <ul>
* <li>{@link #FAIL_ON_PENDING}: uses {@link FailingUponPendingStep}</li>
* <li>{@link #SILENT_SUCCESS}: uses {@link SilentSuccessFilter} decorator</li>
* </ul>
*/
public class PropertyBasedConfiguration extends MostUsefulConfiguration {
public static final String FAIL_ON_PENDING = "org.jbehave.core.configuration.failonpending";
public static final String SILENT_SUCCESS = "org.jbehave.core.configuration.silentsuccess";
/**
* <p>
* If the system property {@link #SILENT_SUCCESS} is set, uses a
* {@link SilentSuccessFilter} to decorate the default StoryReporter.
* </p>
* <p>
* Setting {@link #SILENT_SUCCESS} will only show the steps for all stories
* if the stories fail.
* </p>
*/
@Override
public StoryReporter defaultStoryReporter() {
StoryReporter storyReporter = super.defaultStoryReporter();
if (System.getProperty(SILENT_SUCCESS) == null) {
return storyReporter;
} else {
return new SilentSuccessFilter(storyReporter);
}
}
/**
* <p>
* If the system property {@link #FAIL_ON_PENDING} is set, returns
* {@link FailingUponPendingStep} otherwise returns the default.
* </p>
* <p>
* Setting {@link #FAIL_ON_PENDING} will cause pending steps to fail story
* execution, so you can see if any steps don't match or are still to be
* implemented.
* </p>
*/
@Override
public PendingStepStrategy pendingStepStrategy() {
if (System.getProperty(FAIL_ON_PENDING) == null) {
return super.pendingStepStrategy();
}
return new FailingUponPendingStep();
}
}