package strings_test import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/coder/coder/v2/coderd/util/strings" ) func TestJoinWithConjunction(t *testing.T) { t.Parallel() require.Equal(t, "foo", strings.JoinWithConjunction([]string{"foo"})) require.Equal(t, "foo and bar", strings.JoinWithConjunction([]string{"foo", "bar"})) require.Equal(t, "foo, bar and baz", strings.JoinWithConjunction([]string{"foo", "bar", "baz"})) } func TestTruncate(t *testing.T) { t.Parallel() for _, tt := range []struct { s string n int expected string }{ {"foo", 4, "foo"}, {"foo", 3, "foo"}, {"foo", 2, "fo"}, {"foo", 1, "f"}, {"foo", 0, ""}, {"foo", -1, ""}, } { t.Run(tt.expected, func(t *testing.T) { t.Parallel() actual := strings.Truncate(tt.s, tt.n) require.Equal(t, tt.expected, actual) }) } } func TestUISanitize(t *testing.T) { t.Parallel() for _, tt := range []struct { s string expected string }{ {"normal text", "normal text"}, {"\tfoo \r\\nbar ", "foo bar"}, {"通常のテキスト", "通常のテキスト"}, {"foo\nbar", "foo bar"}, {"foo\tbar", "foo bar"}, {"foo\rbar", "foo bar"}, {"foo\x00bar", "foobar"}, {"\u202Eabc", "abc"}, {"\u200Bzero width", "zero width"}, {"foo\x1b[31mred\x1b[0mbar", "fooredbar"}, {"foo\u0008bar", "foobar"}, {"foo\x07bar", "foobar"}, {"foo\uFEFFbar", "foobar"}, {"link", "link"}, {"", ""}, {"HTML", "HTML"}, {"
line break", "line break"}, {"", ""}, {"", ""}, {"visible", "visible"}, {"", ""}, {"", ""}, } { t.Run(tt.expected, func(t *testing.T) { t.Parallel() actual := strings.UISanitize(tt.s) assert.Equal(t, tt.expected, actual) }) } }