mirror of
https://github.com/MichaelMure/git-bug.git
synced 2024-12-15 18:23:08 +03:00
90 lines
1.6 KiB
Go
90 lines
1.6 KiB
Go
package util
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestTextWrap(t *testing.T) {
|
|
cases := []struct {
|
|
Input, Output string
|
|
Lim int
|
|
}{
|
|
// A simple word passes through.
|
|
{
|
|
"foo",
|
|
"foo",
|
|
4,
|
|
},
|
|
// Word breaking
|
|
{
|
|
"foobarbaz",
|
|
"foob\narba\nz",
|
|
4,
|
|
},
|
|
// Lines are broken at whitespace.
|
|
{
|
|
"foo bar baz",
|
|
"foo\nbar\nbaz",
|
|
4,
|
|
},
|
|
// Word breaking
|
|
{
|
|
"foo bars bazzes",
|
|
"foo\nbars\nbazz\nes",
|
|
4,
|
|
},
|
|
// A word that would run beyond the width is wrapped.
|
|
{
|
|
"fo sop",
|
|
"fo\nsop",
|
|
4,
|
|
},
|
|
// A tab counts as 4 characters.
|
|
{
|
|
"foo\nb\t r\n baz",
|
|
"foo\nb\n r\n baz",
|
|
4,
|
|
},
|
|
// Trailing whitespace is removed after used for wrapping.
|
|
// Runs of whitespace on which a line is broken are removed.
|
|
{
|
|
"foo \nb ar ",
|
|
"foo\n\nb\nar\n",
|
|
4,
|
|
},
|
|
// An explicit line break at the end of the input is preserved.
|
|
{
|
|
"foo bar baz\n",
|
|
"foo\nbar\nbaz\n",
|
|
4,
|
|
},
|
|
// Explicit break are always preserved.
|
|
{
|
|
"\nfoo bar\n\n\nbaz\n",
|
|
"\nfoo\nbar\n\n\nbaz\n",
|
|
4,
|
|
},
|
|
// Complete example:
|
|
{
|
|
" This is a list: \n\n\t* foo\n\t* bar\n\n\n\t* baz \nBAM ",
|
|
" This\nis a\nlist:\n\n *\nfoo\n *\nbar\n\n\n *\nbaz\nBAM\n",
|
|
6,
|
|
},
|
|
}
|
|
|
|
for i, tc := range cases {
|
|
actual, lines := TextWrap(tc.Input, tc.Lim)
|
|
if actual != tc.Output {
|
|
t.Fatalf("Case %d Input:\n\n`%s`\n\nExpected Output:\n\n`%s`\n\nActual Output:\n\n`%s`",
|
|
i, tc.Input, tc.Output, actual)
|
|
}
|
|
|
|
expected := len(strings.Split(tc.Output, "\n"))
|
|
if expected != lines {
|
|
t.Fatalf("Nb lines mismatch\nExpected:%d\nActual:%d",
|
|
expected, lines)
|
|
}
|
|
}
|
|
}
|