50 lines
2.8 KiB
Go
50 lines
2.8 KiB
Go
package stringutil
|
||
|
||
import "testing"
|
||
|
||
func TestJSCasing(t *testing.T) {
|
||
t.Parallel()
|
||
|
||
tests := []struct {
|
||
name string
|
||
got string
|
||
want string
|
||
}{
|
||
{name: "ascii lowercase", got: ToLowerJS("HELLO"), want: "hello"},
|
||
{name: "ascii uppercase", got: ToUpperJS("hello"), want: "HELLO"},
|
||
{name: "lowercase dotted i", got: ToLowerJS("İSPANYOL"), want: "i̇spanyol"},
|
||
{name: "lowercase lone sigma", got: ToLowerJS("Σ"), want: "σ"},
|
||
{name: "lowercase final sigma", got: ToLowerJS("ΟΣ"), want: "ος"},
|
||
{name: "lowercase non-sigma greek", got: ToLowerJS("Ω"), want: "ω"},
|
||
{name: "uppercase sharp s", got: ToUpperJS("ßfoo"), want: "SSFOO"},
|
||
{name: "uppercase non-ascii simple mapping", got: ToUpperJS("ω"), want: "Ω"},
|
||
{name: "uppercase ligature", got: ToUpperJS("fioo"), want: "FIOO"},
|
||
{name: "capitalize-style uppercase", got: ToUpperJS("ß") + "foo", want: "SSfoo"},
|
||
{name: "uncapitalize-style lowercase", got: ToLowerJS("İ") + "foo", want: "i̇foo"},
|
||
{name: "lowercase final sigma after lowercase letter without uppercase mapping", got: ToLowerJS("ʕΣ"), want: "ʕς"},
|
||
{name: "lowercase sigma after modifier letter", got: ToLowerJS("ʰΣ"), want: "ʰσ"},
|
||
{name: "lowercase sigma after case ignorable ypogegrammeni", got: ToLowerJS("ͅΣ"), want: "ͅσ"},
|
||
{name: "lowercase final sigma after feminine ordinal indicator", got: ToLowerJS("ªΣ"), want: "ªς"},
|
||
{name: "lowercase final sigma after masculine ordinal indicator", got: ToLowerJS("ºΣ"), want: "ºς"},
|
||
{name: "lowercase final sigma after roman numeral", got: ToLowerJS("ⅠΣ"), want: "ⅰς"},
|
||
{name: "lowercase sigma after uppercase property added after unicode 15", got: ToLowerJS("\u1C89Σ"), want: "\u1C89σ"},
|
||
{name: "lowercase sigma after uppercase property skewed from local v8 unicode data", got: ToLowerJS("\uA7CBΣ"), want: "\uA7CBσ"},
|
||
{name: "lowercase sigma before immediate latin letter", got: ToLowerJS("ΣA"), want: "σa"},
|
||
{name: "lowercase sigma before immediate roman numeral letter", got: ToLowerJS("ΣⅠ"), want: "σⅰ"},
|
||
{name: "lowercase sigma before case ignorable then latin letter", got: ToLowerJS("ΣͅA"), want: "σͅa"},
|
||
{name: "uppercase lone surrogate", got: ToUpperJS(EncodeJSStringRune(0xD800)), want: EncodeJSStringRune(0xD800)},
|
||
{name: "lowercase lone surrogate", got: ToLowerJS("A" + EncodeJSStringRune(0xD800) + "B"), want: "a" + EncodeJSStringRune(0xD800) + "b"},
|
||
{name: "uppercase lone low surrogate with text", got: ToUpperJS(EncodeJSStringRune(0xDC00) + "x"), want: EncodeJSStringRune(0xDC00) + "X"},
|
||
{name: "lowercase lone surrogate before sigma", got: ToLowerJS(EncodeJSStringRune(0xD800) + "Σ"), want: EncodeJSStringRune(0xD800) + "σ"},
|
||
}
|
||
|
||
for _, tt := range tests {
|
||
t.Run(tt.name, func(t *testing.T) {
|
||
t.Parallel()
|
||
if tt.got != tt.want {
|
||
t.Fatalf("got %q, want %q", tt.got, tt.want)
|
||
}
|
||
})
|
||
}
|
||
}
|