dev/testsreporter/format.go (53 lines of code) (raw):
// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
// or more contributor license agreements. Licensed under the Elastic License;
// you may not use this file except in compliance with the Elastic License.
package testsreporter
import (
"bytes"
_ "embed"
"fmt"
"strings"
"text/template"
)
//go:embed _static/summary.tmpl
var summaryTmpl string
//go:embed _static/description.tmpl
var descriptionTmpl string
const defaultMaxLengthMessages = 1000
type resultsFormatter struct {
result failureObserver
maxPreviousLinks int
}
func (r resultsFormatter) Title() string {
return r.result.String()
}
func (r resultsFormatter) Owners() []string {
return r.result.Teams()
}
func (r resultsFormatter) Summary() (string, error) {
var rendered bytes.Buffer
templ := template.Must(template.New("summary").Parse(summaryTmpl))
data := r.result.SummaryData()
err := templ.Execute(&rendered, data)
if err != nil {
return "", fmt.Errorf("failed to render summary: %w", err)
}
return rendered.String(), nil
}
func (r resultsFormatter) Description() (string, error) {
var rendered bytes.Buffer
templ := template.Must(template.New("description").Parse(descriptionTmpl))
summary, err := r.Summary()
if err != nil {
return "", err
}
data := r.result.DescriptionData()
data["summary"] = summary
data["maxPreviousLinks"] = r.maxPreviousLinks
err = templ.Execute(&rendered, data)
if err != nil {
return "", fmt.Errorf("failed to render description: %w", err)
}
return rendered.String(), nil
}
func truncateText(message string, maxLength int) string {
if len(message) <= maxLength {
return message
}
return message[:strings.LastIndexAny(message[:maxLength], " ,.;:-}")]
}