Escape ANSI codes.
diff --git a/utiltest.go b/utiltest.go index 8af2677..0485395 100644 --- a/utiltest.go +++ b/utiltest.go
@@ -245,8 +245,9 @@ } func (f *formatterAsDiff) Format(s fmt.State, c rune) { - expected := pretty.Sprintf("%# v", f.expected) - actual := pretty.Sprintf("%# v", f.actual) + // Format the items and escape those pesky ANSI codes. + expected := strings.Replace(pretty.Sprintf("%# v", f.expected), "\033", "\\033", -1) + actual := strings.Replace(pretty.Sprintf("%# v", f.actual), "\033", "\\033", -1) if strings.IndexByte(expected, '\n') == -1 && strings.IndexByte(actual, '\n') == -1 { fmt.Fprintf(s, "Expected: %s\nActual: %s", expected, actual) return
diff --git a/utiltest_test.go b/utiltest_test.go index 90014ac..91f6238 100644 --- a/utiltest_test.go +++ b/utiltest_test.go
@@ -306,3 +306,10 @@ expected := strings.Repeat("0123456789abcedf", 2048/16) + "..." AssertEqual(t, expected, fmt.Sprintf("%s", format(large))) } + +func TestDiffEscapeANSI(t *testing.T) { + t.Parallel() + actual := fmt.Sprintf("% #v", formatAsDiff("\033[31mHi", "\033[32mHi")) + expected := "Expected: \\033[31mHi\nActual: \\033[32mHi" + AssertEqual(t, expected, actual) +}