package ui_test import ( "strings" "testing" ) // TestValueFormattersEscapeControlCharacters checks that a path carrying an // ESC and a newline — the shape a symlink target read back from the // snapshot database could take — is escaped before it reaches the output. // Colour is off here, so the only way a control byte could appear is from // the value itself. func TestValueFormattersEscapeControlCharacters(t *testing.T) { t.Parallel() w, buf := newTestWriter(false) w.Infof("restoring %s", w.Path("a\x1b[31mZAP\nb")) out := buf.String() if strings.ContainsRune(out, '\x1b') { t.Fatalf("raw ESC from a value survived in output: %q", out) } if strings.Count(out, "\n") != 1 { t.Fatalf("a newline in a value must be escaped, not emitted raw: %q", out) } if !strings.Contains(out, `\x1b`) { t.Fatalf("expected the escaped form of ESC in output: %q", out) } }