You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2024/09/04 21:34:03 UTC
(plc4x) branch develop updated: feat(plc4go/spi): improve testlogger output for multiline stringers
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push:
new 3d853b153a feat(plc4go/spi): improve testlogger output for multiline stringers
3d853b153a is described below
commit 3d853b153a287d7b1f273d76bddfc19475a71f0a
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Sep 4 23:33:57 2024 +0200
feat(plc4go/spi): improve testlogger output for multiline stringers
---
plc4go/spi/testutils/TestUtils.go | 67 ++++++++++++++++++++++++++++------
plc4go/spi/testutils/TestUtils_test.go | 19 ++++++++++
2 files changed, 74 insertions(+), 12 deletions(-)
diff --git a/plc4go/spi/testutils/TestUtils.go b/plc4go/spi/testutils/TestUtils.go
index a2e68fdd41..4e6cdb2d1c 100644
--- a/plc4go/spi/testutils/TestUtils.go
+++ b/plc4go/spi/testutils/TestUtils.go
@@ -201,25 +201,68 @@ func ProduceTestingLogger(t TestingLog) zerolog.Logger {
},
func(w *zerolog.ConsoleWriter) {
w.FormatFieldValue = func(i interface{}) string {
- if aString, ok := i.(string); ok && strings.Contains(aString, "\\n") {
- if noColor {
- return "see below"
- } else {
- return fmt.Sprintf("\x1b[%dm%v\x1b[0m", 31, "see below")
+ switch i := i.(type) {
+ case string:
+ if strings.Contains(i, "\\n") {
+ if noColor {
+ return "see below"
+ } else {
+ return fmt.Sprintf("\x1b[%dm%v\x1b[0m", 31, "see below")
+ }
+ }
+ case []uint8:
+ if len(i) > 4 && i[0] == '[' && i[len(i)-1] == ']' && strings.Contains(string(i), "\\n") {
+ if noColor {
+ return "see below"
+ } else {
+ return fmt.Sprintf("\x1b[%dm%v\x1b[0m", 31, "see below")
+ }
}
}
return fmt.Sprintf("%s", i)
}
w.FormatExtra = func(m map[string]interface{}, buffer *bytes.Buffer) error {
for key, i := range m {
- if aString, ok := i.(string); ok && strings.Contains(aString, "\n") {
- buffer.WriteString("\n")
- if noColor {
- buffer.WriteString("field " + key)
- } else {
- buffer.WriteString(fmt.Sprintf("\x1b[%dm%v\x1b[0m", 32, "field "+key))
+ switch i := i.(type) {
+ case string:
+ if strings.Contains(i, "\n") {
+ buffer.WriteString("\n")
+ if noColor {
+ buffer.WriteString("field " + key)
+ } else {
+ buffer.WriteString(fmt.Sprintf("\x1b[%dm%v\x1b[0m", 32, "field "+key))
+ }
+ buffer.WriteString(":\n" + i)
+ }
+ case []any:
+ allStrings := false
+ containsNewLine := false
+ stringsElems := make([]string, len(i))
+ for i, elem := range i {
+ if aString, ok := elem.(string); ok {
+ containsNewLine = containsNewLine || strings.Contains(aString, "\n")
+ allStrings = true
+ stringsElems[i] = strings.Trim(aString, "\n")
+ } else {
+ allStrings = false
+ break
+ }
+ }
+ if allStrings && containsNewLine {
+ buffer.WriteString("\n")
+ if noColor {
+ buffer.WriteString("field " + key)
+ } else {
+ buffer.WriteString(fmt.Sprintf("\x1b[%dm%v\x1b[0m", 32, "field "+key))
+ }
+ var sb strings.Builder
+ for j, elem := range stringsElems {
+ sb.WriteString(strconv.Itoa(j) + ":\n")
+ sb.WriteString(elem)
+ sb.WriteString("\n")
+ }
+ buffer.WriteString(":\n" + sb.String())
}
- buffer.WriteString(":\n" + aString)
}
}
return nil
diff --git a/plc4go/spi/testutils/TestUtils_test.go b/plc4go/spi/testutils/TestUtils_test.go
index d18dff6d56..1196aa2194 100644
--- a/plc4go/spi/testutils/TestUtils_test.go
+++ b/plc4go/spi/testutils/TestUtils_test.go
@@ -21,6 +21,7 @@ package testutils
import (
"context"
+ "fmt"
"testing"
"time"
@@ -95,11 +96,29 @@ func TestProduceTestingLogger_ASerializableLog(t *testing.T) {
Msg("something")
}
+type TestProduceTestingLoggerImprovedOutputMultilineStringer struct {
+}
+
+func (TestProduceTestingLoggerImprovedOutputMultilineStringer) String() string {
+ return "\nthis\nthis\nthis\nthis\nthis\nthis\n"
+}
+
func TestProduceTestingLogger_Improved_Output(t *testing.T) {
t.Run("multilinestring", func(t *testing.T) {
logger := ProduceTestingLogger(t)
logger.Info().Str("amultiline", "a\nb\nc").Msg("look at that")
})
+ t.Run("multilinestringer", func(t *testing.T) {
+ logger := ProduceTestingLogger(t)
+ logger.Info().Stringer("amultiline", TestProduceTestingLoggerImprovedOutputMultilineStringer{}).Msg("look at that")
+ })
+ t.Run("multilinestringers", func(t *testing.T) {
+ logger := ProduceTestingLogger(t)
+ logger.Info().Stringers("amultiline", []fmt.Stringer{
+ TestProduceTestingLoggerImprovedOutputMultilineStringer{},
+ TestProduceTestingLoggerImprovedOutputMultilineStringer{},
+ }).Msg("look at that")
+ })
}
func Test__explodingGlobalLogger_Write(t *testing.T) {