diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/text/transform.go | 14 | ||||
-rw-r--r-- | common/text/transform_test.go | 18 |
2 files changed, 32 insertions, 0 deletions
diff --git a/common/text/transform.go b/common/text/transform.go index b324b54c1..2b05b9b4f 100644 --- a/common/text/transform.go +++ b/common/text/transform.go @@ -61,3 +61,17 @@ func Puts(s string) string { } return s + "\n" } + +// VisitLinesAfter calls the given function for each line, including newlines, in the given string. +func VisitLinesAfter(s string, fn func(line string)) { + high := strings.Index(s, "\n") + for high != -1 { + fn(s[:high+1]) + s = s[high+1:] + high = strings.Index(s, "\n") + } + + if s != "" { + fn(s) + } +} diff --git a/common/text/transform_test.go b/common/text/transform_test.go index 992dd524c..10738aee7 100644 --- a/common/text/transform_test.go +++ b/common/text/transform_test.go @@ -41,3 +41,21 @@ func TestPuts(t *testing.T) { c.Assert(Puts("\nA\n"), qt.Equals, "\nA\n") c.Assert(Puts(""), qt.Equals, "") } + +func TestVisitLinesAfter(t *testing.T) { + const lines = `line 1 +line 2 + +line 3` + + var collected []string + + VisitLinesAfter(lines, func(s string) { + collected = append(collected, s) + }) + + c := qt.New(t) + + c.Assert(collected, qt.DeepEquals, []string{"line 1\n", "line 2\n", "\n", "line 3"}) + +} |