public void runFeature(SpockExecutionContext context, Runnable feature) {
    if (context.getErrorInfoCollector().hasErrors()) return;

    FeatureInfo currentFeature = context.getCurrentFeature();
    if (currentFeature.isExcluded()) return;

    if (currentFeature.isSkipped()) {
      throw new InternalSpockError("Invalid state, feature is executed although it should have been skipped");
    }

    // at this point the specification context is the one of the shared instance,
    // so the current feature cannot be set as features can run in parallel
    // so getting the current feature from the specification context would not properly work

    supervisor.beforeFeature(currentFeature);
    invoke(context, this, createMethodInfoForDoRunFeature(context, feature));
    supervisor.afterFeature(currentFeature);

    runCloseContextStoreProvider(context, MethodKind.CLEANUP);
  }
Executes a single Spec. Notifies its supervisor about overall execution
progress and every invocation of Spec code.
Supervisor also determines the error strategy.

@author Peter Niederwieser
spock-core/src/main/java/org/spockframework/runtime/PlatformSpecRunner.java