12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package main
- import (
- "io"
- "os"
- "github.com/pkg/errors"
- log "github.com/sirupsen/logrus"
- "gotest.tools/gotestsum/internal/junitxml"
- "gotest.tools/gotestsum/testjson"
- )
- type eventHandler struct {
- formatter testjson.EventFormatter
- out io.Writer
- err io.Writer
- jsonFile io.WriteCloser
- }
- func (h *eventHandler) Err(text string) error {
- _, err := h.err.Write([]byte(text + "\n"))
- return err
- }
- func (h *eventHandler) Event(event testjson.TestEvent, execution *testjson.Execution) error {
- if h.jsonFile != nil {
- _, err := h.jsonFile.Write(append(event.Bytes(), '\n'))
- if err != nil {
- return errors.Wrap(err, "failed to write JSON file")
- }
- }
- line, err := h.formatter(event, execution)
- if err != nil {
- return errors.Wrap(err, "failed to format event")
- }
- _, err = h.out.Write([]byte(line))
- return errors.Wrap(err, "failed to write event")
- }
- func (h *eventHandler) Close() error {
- if h.jsonFile != nil {
- if err := h.jsonFile.Close(); err != nil {
- log.WithError(err).Error("failed to close JSON file")
- }
- }
- return nil
- }
- var _ testjson.EventHandler = &eventHandler{}
- func newEventHandler(opts *options, wout io.Writer, werr io.Writer) (*eventHandler, error) {
- formatter := testjson.NewEventFormatter(opts.format)
- if formatter == nil {
- return nil, errors.Errorf("unknown format %s", opts.format)
- }
- handler := &eventHandler{
- formatter: formatter,
- out: wout,
- err: werr,
- }
- var err error
- if opts.jsonFile != "" {
- handler.jsonFile, err = os.Create(opts.jsonFile)
- if err != nil {
- return handler, errors.Wrap(err, "failed to open JSON file")
- }
- }
- return handler, nil
- }
- func writeJUnitFile(filename string, execution *testjson.Execution) error {
- if filename == "" {
- return nil
- }
- junitFile, err := os.Create(filename)
- if err != nil {
- return errors.Wrap(err, "failed to open JUnit file")
- }
- defer func() {
- if err := junitFile.Close(); err != nil {
- log.WithError(err).Error("failed to close JUnit file")
- }
- }()
- return junitxml.Write(junitFile, execution)
- }
|