public void performInternalCucumberOperations(final Object testInstance, final TEST_NOTIFIER runNotifier) throws Exception {
final Class<?> javaTestClass = getTestedClass();
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
final InputStream configurationInputStream = classLoader.getResourceAsStream(ClientServerFiles.CONFIG);
final Properties cukespaceConfigurationProperties = loadCucumberConfigurationProperties(configurationInputStream);
final RuntimeOptions runtimeOptions = loadRuntimeOptions(javaTestClass, cukespaceConfigurationProperties);
final boolean reported = Boolean.parseBoolean(cukespaceConfigurationProperties.getProperty(CucumberConfiguration.REPORTABLE, "false"));
final StringBuilder reportBuilder = new StringBuilder();
if (reported) {
runtimeOptions.addPlugin(new JSONFormatter(reportBuilder));
}
final InputStream gluesInputStream = classLoader.getResourceAsStream(ClientServerFiles.GLUES_LIST);
final Collection<Class<?>> glues = loadGlues(gluesInputStream, classLoader, javaTestClass);
final ArquillianBackend arquillianBackend = new ArquillianBackend(
glues, javaTestClass, testInstance,
cukespaceConfigurationProperties.getProperty(CucumberConfiguration.OBJECT_FACTORY));
final CucumberRuntime cucumberRuntime = new CucumberRuntime(null, classLoader, singletonList(arquillianBackend), runtimeOptions);
final Map<String, Collection<URL>> featuresMap = Features.createFeatureMap(CucumberConfiguration.instance().getTempDir(), cukespaceConfigurationProperties.getProperty(CucumberConfiguration.FEATURE_HOME), javaTestClass, classLoader);
final List<CucumberFeature> cucumberFeatures = getCucumberFeatures(runtimeOptions.getFilters(), testInstance, classLoader, featuresMap);
final Formatter formatter = runtimeOptions.formatter(classLoader);
final Reporter reporter = runtimeOptions.reporter(classLoader);
final StepDefinitionReporter stepDefinitionReporter = runtimeOptions.stepDefinitionReporter(classLoader);
cucumberRuntime.getGlue().reportStepDefinitions(stepDefinitionReporter);
runFeatures(cucumberFeatures, cucumberRuntime, getReporter(reporter, formatter, runtimeOptions), runNotifier);
if (reported) {
final String path = cukespaceConfigurationProperties.getProperty(CucumberConfiguration.REPORTABLE_PATH);
addReportTestIntoFile(path, javaTestClass, reportBuilder);
}
handleCucumberTestErrors(cucumberRuntime.getErrors(), cucumberRuntime);
}