protected void reactToAndAssertEvents(Object... events) { modelRunner.reactTo(events); assertArrayEquals(events, modelRunner.getRecordedEvents()); }
@Test public void recordMultipleEvents_startRecordingAfterRunning() { Model model = modelBuilder.useCase(USE_CASE) .on(EntersText.class).system(displaysEnteredText()) .on(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model).startRecording(); modelRunner.reactTo(entersText(), entersNumber()); assertEquals(2, modelRunner.getRecordedEvents().length); assertEquals(EntersText.class, modelRunner.getRecordedEvents()[0].getClass()); assertEquals(EntersNumber.class, modelRunner.getRecordedEvents()[1].getClass()); assertEquals(2, modelRunner.getRecordedStepNames().length); assertEquals("S1", modelRunner.getRecordedStepNames()[0]); assertEquals("S2", modelRunner.getRecordedStepNames()[1]); }
@Test public void recordSingleEvent() { Model model = modelBuilder.useCase(USE_CASE) .on(EntersText.class).system(displaysEnteredText()) .build(); modelRunner.run(model).startRecording(); modelRunner.reactTo(entersText()); assertEquals(1, modelRunner.getRecordedEvents().length); assertEquals(EntersText.class, modelRunner.getRecordedEvents()[0].getClass()); assertEquals(1, modelRunner.getRecordedStepNames().length); assertEquals("S1", modelRunner.getRecordedStepNames()[0]); }
@Test public void recordMultipleEvents_startRecordingBeforeRunning() { Model model = modelBuilder.useCase(USE_CASE) .on(EntersText.class).system(displaysEnteredText()) .on(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.startRecording().run(model); modelRunner.reactTo(entersText(), entersNumber()); assertEquals(2, modelRunner.getRecordedEvents().length); assertEquals(EntersText.class, modelRunner.getRecordedEvents()[0].getClass()); assertEquals(EntersNumber.class, modelRunner.getRecordedEvents()[1].getClass()); assertEquals(2, modelRunner.getRecordedStepNames().length); assertEquals("S1", modelRunner.getRecordedStepNames()[0]); assertEquals("S2", modelRunner.getRecordedStepNames()[1]); }
@Test public void continueRecordingAfterRestart() { Model model = modelBuilder.useCase(USE_CASE) .on(EntersText.class).system(displaysEnteredText()) .on(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model).startRecording(); modelRunner.reactTo(entersText()); modelRunner.restart(); modelRunner.reactTo(entersNumber()); assertEquals(2, modelRunner.getRecordedEvents().length); assertEquals(EntersText.class, modelRunner.getRecordedEvents()[0].getClass()); assertEquals(EntersNumber.class, modelRunner.getRecordedEvents()[1].getClass()); assertEquals(2, modelRunner.getRecordedStepNames().length); assertEquals("S1", modelRunner.getRecordedStepNames()[0]); assertEquals("S2", modelRunner.getRecordedStepNames()[1]); } }
@Test public void recordIsEmptyForFreshlyRunModel() { Model model = modelBuilder.useCase(USE_CASE) .on(EntersText.class).system(displaysEnteredText()) .build(); modelRunner.run(model); assertEquals(0, modelRunner.getRecordedEvents().length); assertEquals(0, modelRunner.getRecordedStepNames().length); }
@Test public void noMoreRecordingAfterRecordingIsStopped() { Model model = modelBuilder.useCase(USE_CASE) .on(EntersText.class).system(displaysEnteredText()) .on(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model).startRecording(); modelRunner.reactTo(entersText()); modelRunner.stopRecording(); modelRunner.reactTo(entersNumber()); assertEquals(1, modelRunner.getRecordedEvents().length); assertEquals(EntersText.class, modelRunner.getRecordedEvents()[0].getClass()); assertEquals(1, modelRunner.getRecordedStepNames().length); assertEquals("S1", modelRunner.getRecordedStepNames()[0]); }
@Test public void recordIsEmptyIfRecordingWasStoppedBeforeBeingStarted() { Model model = modelBuilder.useCase(USE_CASE) .on(EntersText.class).system(displaysEnteredText()) .build(); modelRunner.run(model).stopRecording(); assertEquals(0, modelRunner.getRecordedEvents().length); assertEquals(0, modelRunner.getRecordedStepNames().length); }
@Test public void twoSequentialStepsReactToEventsOfDifferentTypeAsList() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT).user(EntersText.class).system(displaysEnteredText()) .step(CUSTOMER_ENTERS_NUMBER).user(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); Object[] eventArray = new Object[] {entersText(), entersNumber()}; List<? extends Object> events = Arrays.asList(eventArray); modelRunner.reactTo(events); assertArrayEquals(eventArray, modelRunner.getRecordedEvents()); }
@Test public void twoSequentialStepsReactToEventsOfSameTypeAsList() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT).user(EntersText.class).system(displaysEnteredText()) .step(CUSTOMER_ENTERS_TEXT_AGAIN).user(EntersText.class).system(displaysEnteredText()) .build(); modelRunner.run(model); EntersText[] eventArray = new EntersText[] {entersText(), entersText()}; List<EntersText> events = Arrays.asList(eventArray); modelRunner.reactTo(events); assertArrayEquals(eventArray, modelRunner.getRecordedEvents()); }