@Test
  public void should_record_nested_pending_steps() {
    SimpleTestScenarioSteps steps = factory.getStepLibraryFor(SimpleTestScenarioSteps.class);

    StepEventBus.getEventBus().testStarted("a_test", SampleTestScenario.class);
    steps.step1();
    steps.step9();
    StepEventBus.getEventBus().testFinished(testOutcome);

    String expectedSteps =
        "TEST a_test\n"
            + "-step1\n"
            + "---> STEP DONE\n"
            + "-step9\n"
            + "--step1\n"
            + "----> STEP DONE\n"
            + "--pendingStep\n"
            + "----> STEP PENDING\n"
            + "--step4\n"
            + "---step5\n"
            + "-----> STEP DONE\n"
            + "---step6\n"
            + "-----> STEP DONE\n"
            + "----> STEP DONE\n"
            + "---> STEP DONE\n"
            + "TEST DONE\n";

    System.out.println(consoleStepListener.toString());
    assertThat(consoleStepListener.toString(), is(expectedSteps));
  }
  @Test
  public void should_record_when_a_test_starts_and_finishes() {
    SimpleTestScenarioSteps steps = factory.getStepLibraryFor(SimpleTestScenarioSteps.class);

    StepEventBus.getEventBus().testStarted("a_test", SampleTestScenario.class);
    steps.step1();
    StepEventBus.getEventBus().testFinished(testOutcome);

    String expectedSteps = "TEST a_test\n" + "-step1\n" + "---> STEP DONE\n" + "TEST DONE\n";
    assertThat(consoleStepListener.toString(), is(expectedSteps));
  }
  @Test
  public void should_notify_listeners_when_the_test_suite_finishes() {
    SimpleTestScenarioSteps steps = factory.getStepLibraryFor(SimpleTestScenarioSteps.class);

    StepEventBus.getEventBus().testSuiteStarted(SampleTestScenario.class);
    StepEventBus.getEventBus().testStarted("some_test", SampleTestScenario.class);
    steps.step1();
    StepEventBus.getEventBus().testFinished(testOutcome);
    StepEventBus.getEventBus().testSuiteFinished();

    verify(listener).testSuiteFinished();
  }
  @Test
  public void should_execute_steps_transparently() {
    SimpleTestScenarioSteps steps = factory.getStepLibraryFor(SimpleTestScenarioSteps.class);

    StepEventBus.getEventBus().testStarted("some_test", SampleTestScenario.class);
    steps.step1();
    steps.step2();
    steps.step3();
    StepEventBus.getEventBus().testFinished(testOutcome);

    verify(driver).get("step_one");
    verify(driver).get("step_two");
    verify(driver).get("step_three");
  }
  @Test
  public void should_notify_listeners_when_a_step_starts() {
    SimpleTestScenarioSteps steps = factory.getStepLibraryFor(SimpleTestScenarioSteps.class);

    StepEventBus.getEventBus().testStarted("some_test", SampleTestScenario.class);
    steps.step1();
    StepEventBus.getEventBus().testFinished(testOutcome);

    ArgumentCaptor<ExecutedStepDescription> argument =
        ArgumentCaptor.forClass(ExecutedStepDescription.class);

    verify(listener).stepStarted(argument.capture());

    assertThat(argument.getValue().getName(), is("step1"));
  }
  @Test
  public void a_step_can_return_a_step_object_if_a_failure_occurs() {
    SimpleTestScenarioSteps steps = factory.getStepLibraryFor(SimpleTestScenarioSteps.class);

    StepEventBus.getEventBus().testStarted("a_test", SampleTestScenario.class);
    steps.stepThatFailsAndReturnsAStep().stepThatReturnsAStep();
    StepEventBus.getEventBus().testFinished(testOutcome);

    String expectedSteps =
        "TEST a_test\n"
            + "-stepThatFailsAndReturnsAStep\n"
            + "---> STEP FAILED\n"
            + "-stepThatReturnsAStep\n"
            + "---> STEP IGNORED\n"
            + "TEST DONE\n";
    assertThat(consoleStepListener.toString(), is(expectedSteps));
  }
  @Test
  public void should_record_groups_as_nested_test_steps() {
    SimpleTestScenarioSteps steps = factory.getStepLibraryFor(SimpleTestScenarioSteps.class);

    StepEventBus.getEventBus().testStarted("a_test", SampleTestScenario.class);
    steps.nested_steps();
    StepEventBus.getEventBus().testFinished(testOutcome);

    String expectedSteps =
        "TEST a_test\n"
            + "-nested_steps\n"
            + "--step1\n"
            + "----> STEP DONE\n"
            + "--nested_steps1\n"
            + "---step1\n"
            + "-----> STEP DONE\n"
            + "---nested_steps2\n"
            + "----step1\n"
            + "------> STEP DONE\n"
            + "----step4\n"
            + "-----step5\n"
            + "-------> STEP DONE\n"
            + "-----step6\n"
            + "-------> STEP DONE\n"
            + "------> STEP DONE\n"
            + "-----> STEP DONE\n"
            + "---step4\n"
            + "----step5\n"
            + "------> STEP DONE\n"
            + "----step6\n"
            + "------> STEP DONE\n"
            + "-----> STEP DONE\n"
            + "----> STEP DONE\n"
            + "--step4\n"
            + "---step5\n"
            + "-----> STEP DONE\n"
            + "---step6\n"
            + "-----> STEP DONE\n"
            + "----> STEP DONE\n"
            + "---> STEP DONE\n"
            + "TEST DONE\n";

    assertThat(consoleStepListener.toString(), is(expectedSteps));
  }
  @Test
  public void when_an_entier_test_is_pending_all_the_contained_steps_are_skipped() {
    SimpleTestScenarioSteps steps = factory.getStepLibraryFor(SimpleTestScenarioSteps.class);

    StepEventBus.getEventBus().testStarted("a_test", SampleTestScenario.class);
    StepEventBus.getEventBus().testPending();
    steps.step1();
    steps.step2();
    steps.step3();
    StepEventBus.getEventBus().testFinished(testOutcome);

    String expectedSteps =
        "TEST a_test\n"
            + "-step1\n"
            + "---> STEP IGNORED\n"
            + "-step2\n"
            + "---> STEP IGNORED\n"
            + "-step3\n"
            + "---> STEP IGNORED\n"
            + "TEST DONE\n";
    assertThat(consoleStepListener.toString(), is(expectedSteps));
  }
  @Test
  public void should_not_use_the_browser() {
    SimpleTestScenarioSteps steps = factory.getStepLibraryFor(SimpleTestScenarioSteps.class);

    StepEventBus.getEventBus().testStarted("a_test", SampleTestScenario.class);
    steps.step1();
    steps.step7();
    StepEventBus.getEventBus().testFinished(testOutcome);

    String expectedSteps =
        "TEST a_test\n"
            + "-step1\n"
            + "---> STEP DONE\n"
            + "-step7\n"
            + "--step1\n"
            + "----> STEP DONE\n"
            + "--failingStep\n"
            + "----> STEP FAILED\n"
            + "--step2\n"
            + "----> STEP IGNORED\n"
            + "---> STEP DONE\n"
            + "TEST DONE\n";
    assertThat(consoleStepListener.toString(), is(expectedSteps));
  }
 public void sampleTest() {
   steps.step1();
   steps.step2();
   steps.step3();
 }