From 388274270c6e27dddb7aa0df2d2ad44721a25e39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Flc=E3=82=9B?= Date: Tue, 4 Jul 2023 15:26:06 +0800 Subject: [PATCH] feat: Alias `spew.Dump` and so on (#230) * feat: Alias `spew.Dump` and so on * tests: Optimize test --- support/debug/dump.go | 25 +++++++++++++++++++ support/debug/dump_test.go | 49 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 support/debug/dump.go create mode 100644 support/debug/dump_test.go diff --git a/support/debug/dump.go b/support/debug/dump.go new file mode 100644 index 000000000..50f8b067f --- /dev/null +++ b/support/debug/dump.go @@ -0,0 +1,25 @@ +package debug + +import ( + "io" + + "github.com/davecgh/go-spew/spew" +) + +// Dump is used to display detailed information about variables +// And this is a wrapper around spew.Dump. +func Dump(v ...interface{}) { + spew.Dump(v...) +} + +// FDump is used to display detailed information about variables to the specified io.Writer +// And this is a wrapper around spew.Fdump. +func FDump(w io.Writer, v ...interface{}) { + spew.Fdump(w, v...) +} + +// SDump is used to display detailed information about variables as a string, +// And this is a wrapper around spew.Sdump. +func SDump(v ...interface{}) string { + return spew.Sdump(v...) +} diff --git a/support/debug/dump_test.go b/support/debug/dump_test.go new file mode 100644 index 000000000..a2758edd8 --- /dev/null +++ b/support/debug/dump_test.go @@ -0,0 +1,49 @@ +package debug + +import ( + "bytes" + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func redirectStdout(fn func()) ([]byte, error) { + f, err := os.CreateTemp("", "stdout") + if err != nil { + return nil, err + } + defer os.Remove(f.Name()) + defer f.Close() + + orig := os.Stdout + os.Stdout = f + fn() + os.Stdout = orig + + return os.ReadFile(f.Name()) +} + +func TestDump(t *testing.T) { + buf, err := redirectStdout(func() { + Dump("foo") + }) + assert.NoError(t, err) + assert.Equal(t, `(string) (len=3) "foo" +`, string(buf)) +} + +func TestFDump(t *testing.T) { + var buf bytes.Buffer + w := &buf + + FDump(w, "foo") + + assert.Equal(t, `(string) (len=3) "foo" +`, buf.String()) +} + +func TestSDump(t *testing.T) { + assert.Equal(t, `(string) (len=3) "foo" +`, SDump("foo")) +}