1
0

logtest.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package logtest
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "io"
  6. "testing"
  7. "github.com/wuntsong-org/go-zero-plus/core/logx"
  8. )
  9. type Buffer struct {
  10. buf *bytes.Buffer
  11. t *testing.T
  12. }
  13. func Discard(t *testing.T) {
  14. prev := logx.Reset()
  15. logx.SetWriter(logx.NewWriter(io.Discard))
  16. t.Cleanup(func() {
  17. logx.SetWriter(prev)
  18. })
  19. }
  20. func NewCollector(t *testing.T) *Buffer {
  21. var buf bytes.Buffer
  22. writer := logx.NewWriter(&buf)
  23. prev := logx.Reset()
  24. logx.SetWriter(writer)
  25. t.Cleanup(func() {
  26. logx.SetWriter(prev)
  27. })
  28. return &Buffer{
  29. buf: &buf,
  30. t: t,
  31. }
  32. }
  33. func (b *Buffer) Bytes() []byte {
  34. return b.buf.Bytes()
  35. }
  36. func (b *Buffer) Content() string {
  37. var m map[string]interface{}
  38. if err := json.Unmarshal(b.buf.Bytes(), &m); err != nil {
  39. return ""
  40. }
  41. content, ok := m["content"]
  42. if !ok {
  43. return ""
  44. }
  45. switch val := content.(type) {
  46. case string:
  47. return val
  48. default:
  49. // err is impossible to be not nil, unmarshaled from b.buf.Bytes()
  50. bs, _ := json.Marshal(content)
  51. return string(bs)
  52. }
  53. }
  54. func (b *Buffer) Reset() {
  55. b.buf.Reset()
  56. }
  57. func (b *Buffer) String() string {
  58. return b.buf.String()
  59. }
  60. func PanicOnFatal(t *testing.T) {
  61. ok := logx.ExitOnFatal.CompareAndSwap(true, false)
  62. if !ok {
  63. return
  64. }
  65. t.Cleanup(func() {
  66. logx.ExitOnFatal.CompareAndSwap(false, true)
  67. })
  68. }