blob: a3a87a07c5fdc1c098ddc56bc0fc61cb570a56df [file] [log] [blame] [edit]
// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package runtime_test
import (
"runtime"
"testing"
)
func TestPrintQuoted(t *testing.T) {
for _, tbl := range []struct {
in, expected string
}{
{in: "baz", expected: `"baz"`},
{in: "foobar", expected: `"foobar"`},
// make sure newlines get escaped
{in: "baz\n", expected: `"baz\n"`},
// make sure null and escape bytes are properly escaped
{in: "b\033it", expected: `"b\x1bit"`},
{in: "b\000ar", expected: `"b\x00ar"`},
// Make sure invalid UTF8 bytes make it through as expected
{in: "b\xfdar", expected: `"b\xfdar"`},
{in: "b\xfda", expected: `"b\xfda"`},
{in: "b\xfd\xffar", expected: `"b\xfd\xffar"`},
// make sure the unicode replacement character gets correctly escaped
{in: "\ufffd!!!!", expected: `"\ufffd!!!!"`},
// verify that simple 16-bit unicode runes are escaped with \u, including a greek upper-case sigma and an arbitrary unicode character.
{in: "\u1234Σ", expected: `"\u1234\u03a3"`},
// verify that 32-bit unicode runes are escaped with \U along with tabs
{in: "fizz\tle", expected: `"fizz\tle"`},
{in: "\U00045678boop", expected: `"\U00045678boop"`},
// verify carriage returns and backslashes get escaped along with our nulls, newlines and a 32-bit unicode character
{in: "fiz\\zl\re", expected: `"fiz\\zl\re"`},
} {
t.Run(tbl.in, func(t *testing.T) {
out := runtime.DumpPrintQuoted(tbl.in)
if out != tbl.expected {
t.Errorf("unexpected output for print(escaped(%q));\n got: %s\nwant: %s", tbl.in, out, tbl.expected)
}
})
}
}