60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
package cli
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestWriteActionResultWritesStatusBeforeJSON(t *testing.T) {
|
|
var output bytes.Buffer
|
|
|
|
err := writeActionResult(&output, &output, map[string]string{"status": "succeeded"}, outputOptions{}, func(w io.Writer) {
|
|
_, _ = w.Write([]byte("status line\n"))
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("writeActionResult() error = %v", err)
|
|
}
|
|
if !strings.HasPrefix(output.String(), "status line\n") {
|
|
t.Fatalf("output = %q, want status before JSON", output.String())
|
|
}
|
|
if !strings.Contains(output.String(), `"status": "succeeded"`) {
|
|
t.Fatalf("output missing JSON result:\n%s", output.String())
|
|
}
|
|
}
|
|
|
|
func TestWriteActionResultQuietSuppressesOutput(t *testing.T) {
|
|
var stdout bytes.Buffer
|
|
var stderr bytes.Buffer
|
|
|
|
err := writeActionResult(&stdout, &stderr, map[string]string{"status": "succeeded"}, outputOptions{Quiet: true}, func(w io.Writer) {
|
|
_, _ = w.Write([]byte("status line\n"))
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("writeActionResult() error = %v", err)
|
|
}
|
|
if stdout.Len() != 0 || stderr.Len() != 0 {
|
|
t.Fatalf("stdout/stderr = %q/%q, want no output", stdout.String(), stderr.String())
|
|
}
|
|
}
|
|
|
|
func TestWriteActionResultToleratesNilStderr(t *testing.T) {
|
|
var stdout bytes.Buffer
|
|
statusCalled := false
|
|
|
|
err := writeActionResult(&stdout, nil, map[string]string{"status": "succeeded"}, outputOptions{}, func(w io.Writer) {
|
|
statusCalled = true
|
|
_, _ = w.Write([]byte("status line\n"))
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("writeActionResult() error = %v", err)
|
|
}
|
|
if statusCalled {
|
|
t.Fatal("status writer was called with nil stderr")
|
|
}
|
|
if !strings.Contains(stdout.String(), `"status": "succeeded"`) {
|
|
t.Fatalf("stdout missing JSON result:\n%s", stdout.String())
|
|
}
|
|
}
|