class TestRemoteRequest extends RemoteRequest {
      private final List<AnalyzedSentence> sentences;

      TestRemoteRequest(List<AnalyzedSentence> sentences) {
        this.sentences = sentences;
      }
    }

    @Override
    protected RemoteRequest prepareRequest(List<AnalyzedSentence> sentences, Long textSessionId) {
      return new TestRemoteRequest(sentences);
    }

    private RuleMatch testMatch(AnalyzedSentence s) {
      return new RuleMatch(this, s, 0, 1, "Test match");
    }

    @Override
    protected Callable<RemoteRuleResult> executeRequest(RemoteRequest request, long timeoutMilliseconds) throws TimeoutException {<FILL_FUNCTION_BODY>

      return () -> {
        TestRemoteRequest req = (TestRemoteRequest) request;
        List<RuleMatch> matches = req.sentences.stream().map(this::testMatch).collect(Collectors.toList());
        long deadline = System.currentTimeMillis() + waitTime;
        //noinspection StatementWithEmptyBody
        Thread.sleep(waitTime);
        // cancelling only works if implementations respect interrupts or timeouts
        //while(true);
        return new RemoteRuleResult(true, true, matches, req.sentences);
      };
    
<methods>public void <init>(org.languagetool.Language, java.util.ResourceBundle, org.languagetool.rules.RemoteRuleConfig, boolean, java.lang.String) ,public void <init>(org.languagetool.Language, java.util.ResourceBundle, org.languagetool.rules.RemoteRuleConfig, boolean) ,public CircuitBreaker circuitBreaker() ,public static void fixMatchOffsets(org.languagetool.AnalyzedSentence, List<org.languagetool.rules.RuleMatch>) ,public java.lang.String getId() ,public org.languagetool.rules.RemoteRuleConfig getServiceConfiguration() ,public long getTimeout(long) ,public boolean isPremium() ,public org.languagetool.rules.RuleMatch[] match(org.languagetool.AnalyzedSentence) throws java.io.IOException,public FutureTask<org.languagetool.rules.RemoteRuleResult> run(List<org.languagetool.AnalyzedSentence>) ,public FutureTask<org.languagetool.rules.RemoteRuleResult> run(List<org.languagetool.AnalyzedSentence>, java.lang.Long) ,public static void shutdown() <variables>protected static final ConcurrentMap<java.lang.String,CircuitBreaker> circuitBreakers,protected final non-sealed boolean filterMatches,protected final non-sealed boolean fixOffsets,protected final non-sealed boolean inputLogging,private static final Logger logger,protected final non-sealed org.languagetool.JLanguageTool lt,protected final non-sealed boolean premium,protected final non-sealed org.languagetool.Language ruleLanguage,protected final non-sealed org.languagetool.rules.RemoteRuleConfig serviceConfiguration,protected static final List<java.lang.Runnable> shutdownRoutines,protected final non-sealed java.util.regex.Pattern suppressMisspelledMatch,protected final non-sealed java.util.regex.Pattern suppressMisspelledSuggestions,protected final non-sealed boolean whitespaceNormalisation