in src/ulsp/controller/quick-actions/actions-java/action_java_test_run.go [42:94]
func (a *ActionJavaTestRun) Execute(ctx context.Context, params *action.ExecuteParams, args json.RawMessage) error {
s, err := params.Sessions.GetFromContext(ctx)
if err != nil {
return fmt.Errorf("getting session from context: %w", err)
}
resultArgs := argsJavaTestRun{}
err = json.Unmarshal(args, &resultArgs)
if err != nil {
return fmt.Errorf("unmarshalling args: %w", err)
}
// Command preparations set stdout and stderr to writer
ideOutWriter, err := params.IdeGateway.GetLogMessageWriter(ctx, _commandJavaTestRun)
if err != nil {
return fmt.Errorf("getting writer: %w", err)
}
testCaseName := a.getTestCaseName(resultArgs)
target, err := javautils.GetJavaTarget(params.FileSystem, s.WorkspaceRoot, resultArgs.Document.URI)
if err != nil {
return err
}
cmd, env := a.prepareCommandAndEnv(ctx, ideOutWriter, s.WorkspaceRoot, target, testCaseName, s.InitializeParams.ClientInfo.Name)
err = params.IdeGateway.LogMessage(ctx, &protocol.LogMessageParams{
Message: fmt.Sprintf(_startMessageJavaTestRun, strings.Join(cmd.Args, " ")),
Type: protocol.MessageTypeInfo,
})
if err != nil {
return fmt.Errorf("logging message: %w", err)
}
// Command execution will go here
err = params.Executor.RunCommand(cmd, env)
if err != nil {
// Log message even if context is already done.
params.IdeGateway.LogMessage(context.WithoutCancel(ctx), &protocol.LogMessageParams{
Message: fmt.Errorf("Error during run: %w", err).Error(),
Type: protocol.MessageTypeError,
})
return err
}
_, err = ideOutWriter.Write([]byte(_endMessage))
if err != nil {
return fmt.Errorf("logging message: %w", err)
}
return params.IdeGateway.ShowMessage(ctx, &protocol.ShowMessageParams{
Message: fmt.Sprintf("Completed test %s", testCaseName),
Type: protocol.MessageTypeInfo,
})
}