refactor: remove NO_COLOR env option
This commit is contained in:
@@ -4,6 +4,8 @@ import (
|
||||
"bytes"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"mire/internal/testutil"
|
||||
)
|
||||
|
||||
func TestFirstMismatchingLineReturnsFirstChangedLine(t *testing.T) {
|
||||
@@ -110,8 +112,6 @@ func TestCompareOutputDoesNotIgnoreMissingLine(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestWriteScenarioMismatchPrintsOnlyFirstMismatch(t *testing.T) {
|
||||
t.Setenv("NO_COLOR", "1")
|
||||
|
||||
var buf bytes.Buffer
|
||||
writeScenarioMismatch(&buf, &testMismatchError{
|
||||
expected: []byte("$ echo x\nx\n$ \nexit\n"),
|
||||
@@ -123,7 +123,7 @@ func TestWriteScenarioMismatchPrintsOnlyFirstMismatch(t *testing.T) {
|
||||
},
|
||||
})
|
||||
|
||||
got := buf.String()
|
||||
got := testutil.StripANSI(buf.String())
|
||||
for _, want := range []string{
|
||||
"Expected\n",
|
||||
"$ echo x\n",
|
||||
@@ -146,8 +146,6 @@ func TestWriteScenarioMismatchPrintsOnlyFirstMismatch(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestWriteScenarioMismatchFormatsMissingLine(t *testing.T) {
|
||||
t.Setenv("NO_COLOR", "1")
|
||||
|
||||
var buf bytes.Buffer
|
||||
writeScenarioMismatch(&buf, &testMismatchError{
|
||||
expected: []byte("alpha\nbeta\n"),
|
||||
@@ -159,7 +157,7 @@ func TestWriteScenarioMismatchFormatsMissingLine(t *testing.T) {
|
||||
},
|
||||
})
|
||||
|
||||
got := buf.String()
|
||||
got := testutil.StripANSI(buf.String())
|
||||
if !strings.Contains(got, "beta\n") {
|
||||
t.Fatalf("writeScenarioMismatch() output = %q, want expected mismatching line", got)
|
||||
}
|
||||
@@ -169,8 +167,6 @@ func TestWriteScenarioMismatchFormatsMissingLine(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestWriteScenarioMismatchItalicizesLabels(t *testing.T) {
|
||||
t.Setenv("NO_COLOR", "")
|
||||
|
||||
var buf bytes.Buffer
|
||||
writeScenarioMismatch(&buf, &testMismatchError{
|
||||
expected: []byte("alpha\n"),
|
||||
|
||||
@@ -70,13 +70,14 @@ func TestRewriteContinuesAfterFailureAndReturnsError(t *testing.T) {
|
||||
if !strings.Contains(err.Error(), "1 scenario(s) failed to rewrite") {
|
||||
t.Fatalf("rewrite() error = %q, want failed rewrite summary", err.Error())
|
||||
}
|
||||
normalizedStdout := testutil.StripANSI(stdout.String())
|
||||
for _, want := range []string{
|
||||
"FAIL bad (",
|
||||
"PASS ok (",
|
||||
"Summary: total=2 passed=1 failed=1",
|
||||
} {
|
||||
if !strings.Contains(stdout.String(), want) {
|
||||
t.Fatalf("stdout = %q, want substring %q", stdout.String(), want)
|
||||
if !strings.Contains(normalizedStdout, want) {
|
||||
t.Fatalf("stdout = %q, want substring %q", normalizedStdout, want)
|
||||
}
|
||||
}
|
||||
if got := testutil.ReadFile(t, filepath.Join(testDir, "bad", "out")); got != "stale bad\n" {
|
||||
|
||||
@@ -52,10 +52,6 @@ func Label(text string, color Color) string {
|
||||
return label(text, color)
|
||||
}
|
||||
|
||||
func noColor() bool {
|
||||
return os.Getenv("NO_COLOR") != ""
|
||||
}
|
||||
|
||||
func prefix() string {
|
||||
chevron := NewStyle().FG(palette.chevronTeal).Bold().Italic().Apply("›")
|
||||
return NewStyle().FG(palette.mireGreen).Bold().Italic().Apply("mire") + " " + chevron + " "
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
package output
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestFormatIncludesANSIByDefault(t *testing.T) {
|
||||
t.Setenv("NO_COLOR", "")
|
||||
|
||||
func TestFormatIncludesANSI(t *testing.T) {
|
||||
got := Format("hello\n")
|
||||
if !strings.Contains(got, "\x1b[") {
|
||||
t.Fatalf("Format() = %q, want ANSI styling", got)
|
||||
@@ -18,41 +15,24 @@ func TestFormatIncludesANSIByDefault(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormatPlainWhenNoColorSet(t *testing.T) {
|
||||
t.Setenv("NO_COLOR", "1")
|
||||
|
||||
if got := Format("hello\n"); got != "mire › hello\n" {
|
||||
t.Fatalf("Format() = %q, want %q", got, "mire › hello\n")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLabelsPlainWhenNoColorSet(t *testing.T) {
|
||||
t.Setenv("NO_COLOR", "1")
|
||||
|
||||
if got := Label("RUN", Info); got != "RUN" {
|
||||
t.Fatalf("Label() = %q, want %q", got, "RUN")
|
||||
}
|
||||
if got := Label("PASS", Pass); got != "PASS" {
|
||||
t.Fatalf("Label() = %q, want %q", got, "PASS")
|
||||
}
|
||||
if got := Label("FAIL", Fail); got != "FAIL" {
|
||||
t.Fatalf("Label() = %q, want %q", got, "FAIL")
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormatReadsNoColorAtRuntime(t *testing.T) {
|
||||
t.Setenv("NO_COLOR", "")
|
||||
|
||||
styled := Format("hello\n")
|
||||
if err := os.Setenv("NO_COLOR", "1"); err != nil {
|
||||
t.Fatalf("Setenv() error = %v", err)
|
||||
}
|
||||
|
||||
plain := Format("hello\n")
|
||||
if !strings.Contains(styled, "\x1b[") {
|
||||
t.Fatalf("styled Format() = %q, want ANSI styling", styled)
|
||||
}
|
||||
if plain != "mire › hello\n" {
|
||||
t.Fatalf("plain Format() = %q, want %q", plain, "mire › hello\n")
|
||||
func TestLabelIncludesANSI(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
text string
|
||||
color Color
|
||||
}{
|
||||
{name: "info", text: "RUN", color: Info},
|
||||
{name: "pass", text: "PASS", color: Pass},
|
||||
{name: "fail", text: "FAIL", color: Fail},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
got := Label(tc.text, tc.color)
|
||||
if !strings.Contains(got, "\x1b[") {
|
||||
t.Fatalf("Label() = %q, want ANSI styling", got)
|
||||
}
|
||||
if !strings.Contains(got, tc.text) {
|
||||
t.Fatalf("Label() = %q, want text %q", got, tc.text)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ func (s Style) BG(rgb uint32) Style {
|
||||
}
|
||||
|
||||
func (s Style) Apply(text string) string {
|
||||
if noColor() || (!s.bold && !s.italic && s.fg == nil && s.bg == nil) {
|
||||
if !s.bold && !s.italic && s.fg == nil && s.bg == nil {
|
||||
return text
|
||||
}
|
||||
|
||||
|
||||
@@ -6,14 +6,16 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var ansiRegexp = regexp.MustCompile(`\x1b\[[0-9;]*[A-Za-z]`)
|
||||
|
||||
func CaptureOutput(t *testing.T, fn func()) (string, string) {
|
||||
t.Helper()
|
||||
t.Setenv("NO_COLOR", "1")
|
||||
|
||||
stdoutReader, stdoutWriter, err := os.Pipe()
|
||||
if err != nil {
|
||||
@@ -52,12 +54,11 @@ func CaptureOutput(t *testing.T, fn func()) (string, string) {
|
||||
t.Fatalf("stderr copy error = %v", err)
|
||||
}
|
||||
|
||||
return stdoutBuf.String(), stderrBuf.String()
|
||||
return StripANSI(stdoutBuf.String()), StripANSI(stderrBuf.String())
|
||||
}
|
||||
|
||||
func CapturePromptedOutput(t *testing.T, sessionInput, promptMarker, promptInput string, fn func()) (string, string) {
|
||||
t.Helper()
|
||||
t.Setenv("NO_COLOR", "1")
|
||||
|
||||
stdinReader, stdinWriter, err := os.Pipe()
|
||||
if err != nil {
|
||||
@@ -159,7 +160,11 @@ func CapturePromptedOutput(t *testing.T, sessionInput, promptMarker, promptInput
|
||||
t.Fatalf("stderr copy error = %v", err)
|
||||
}
|
||||
|
||||
return stdoutBuf.String(), stderrBuf.String()
|
||||
return StripANSI(stdoutBuf.String()), StripANSI(stderrBuf.String())
|
||||
}
|
||||
|
||||
func StripANSI(text string) string {
|
||||
return ansiRegexp.ReplaceAllString(text, "")
|
||||
}
|
||||
|
||||
func WriteFile(t *testing.T, path, content string) {
|
||||
|
||||
Reference in New Issue
Block a user