ExecutableCallContext extends DefaultContext { @Override public Optional<RobotBreakpoint> getKeywordFailBreakpoint(final QualifiedKeywordName currentlyFailedKeyword) { return getKeywordFailBreakpoint(breakpointSupplier, currentElement().getCalledKeywordName(), currentlyFailedKeyword); } ExecutableCallContext(final List<RobotFile> models, final List<ExecutableWithDescriptor> elements, final int index,
            final URI locationUri, final int line, final RobotBreakpointSupplier breakpointSupplier);   ExecutableCallContext(final List<RobotFile> models, final List<ExecutableWithDescriptor> elements, final int index,
            final URI locationUri, final int line, final String errorMessage,
            final RobotBreakpointSupplier breakpointSupplier); @Override boolean isErroneous(); @Override Optional<String> getErrorMessage(); @Override Optional<URI> getAssociatedPath(); @Override Optional<FileRegion> getFileRegion(); boolean isOnLastExecutable(); @Override StackFrameContext moveTo(final RunningKeyword runningKeyword,
            final RobotBreakpointSupplier breakpointSupplier); @Override Optional<RobotBreakpoint> getLineBreakpoint(); @Override Optional<RobotBreakpoint> getKeywordFailBreakpoint(final QualifiedKeywordName currentlyFailedKeyword);  }
@Test public void keywordFailBreakpointIsProvidedThroughSupplier() { final ExecutableWithDescriptor exec = mock(ExecutableWithDescriptor.class); when(exec.getCalledKeywordName()).thenReturn("name"); final List<ExecutableWithDescriptor> elements = newArrayList(exec); final RobotBreakpointSupplier breakpointSupplier = mock(RobotBreakpointSupplier.class); final RobotBreakpoint breakpoint = mock(RobotBreakpoint.class); when(breakpointSupplier.keywordFailBreakpointFor("name")).thenReturn(Optional.of(breakpoint)); final ExecutableCallContext context = new ExecutableCallContext(newArrayList(), elements, 0, URI.create("file: assertThat(context.getKeywordFailBreakpoint(QualifiedKeywordName.create("name", "lib"))).contains(breakpoint); }