mirror of
https://github.com/charmbracelet/bubbles.git
synced 2026-07-20 02:29:29 -06:00
45 lines
938 B
Go
45 lines
938 B
Go
package runeutil
|
|
|
|
import (
|
|
"testing"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
func TestSanitize(t *testing.T) {
|
|
td := []struct {
|
|
input, output string
|
|
}{
|
|
{"", ""},
|
|
{"x", "x"},
|
|
{"\n", "XX"},
|
|
{"\na\n", "XXaXX"},
|
|
{"\n\n", "XXXX"},
|
|
{"\t", ""},
|
|
{"hello", "hello"},
|
|
{"hel\nlo", "helXXlo"},
|
|
{"hel\rlo", "helXXlo"},
|
|
{"hel\tlo", "hello"},
|
|
{"he\n\nl\tlo", "heXXXXllo"},
|
|
{"he\tl\n\nlo", "helXXXXlo"},
|
|
{"hel\x1blo", "hello"},
|
|
{"hello\xc2", "hello"}, // invalid utf8
|
|
}
|
|
|
|
for _, tc := range td {
|
|
runes := make([]rune, 0, len(tc.input))
|
|
b := []byte(tc.input)
|
|
for i, w := 0, 0; i < len(b); i += w {
|
|
var r rune
|
|
r, w = utf8.DecodeRune(b[i:])
|
|
runes = append(runes, r)
|
|
}
|
|
t.Logf("input runes: %+v", runes)
|
|
s := NewSanitizer(ReplaceNewlines("XX"), ReplaceTabs(""))
|
|
result := s.Sanitize(runes)
|
|
rs := string(result)
|
|
if tc.output != rs {
|
|
t.Errorf("%q: expected %q, got %q (%+v)", tc.input, tc.output, rs, result)
|
|
}
|
|
}
|
|
}
|