99 lines
1.7 KiB
Go
99 lines
1.7 KiB
Go
|
// +build !windows
|
||
|
// +build !js
|
||
|
// +build !appengine
|
||
|
|
||
|
package runewidth
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
type envVars struct {
|
||
|
lang string
|
||
|
lc_all string
|
||
|
lc_ctype string
|
||
|
}
|
||
|
|
||
|
func saveEnv() envVars {
|
||
|
return envVars{
|
||
|
lang: os.Getenv("LANG"),
|
||
|
lc_all: os.Getenv("LC_ALL"),
|
||
|
lc_ctype: os.Getenv("LC_CTYPE"),
|
||
|
}
|
||
|
}
|
||
|
func restoreEnv(env *envVars) {
|
||
|
os.Setenv("LANG", env.lang)
|
||
|
os.Setenv("LC_ALL", env.lc_all)
|
||
|
os.Setenv("LC_CTYPE", env.lc_ctype)
|
||
|
}
|
||
|
|
||
|
func TestIsEastAsian(t *testing.T) {
|
||
|
testcases := []struct {
|
||
|
locale string
|
||
|
want bool
|
||
|
}{
|
||
|
{"foo@cjk_narrow", false},
|
||
|
{"foo@cjk", false},
|
||
|
{"utf-8@cjk", false},
|
||
|
{"ja_JP.CP932", true},
|
||
|
}
|
||
|
|
||
|
for _, tt := range testcases {
|
||
|
got := isEastAsian(tt.locale)
|
||
|
if got != tt.want {
|
||
|
t.Fatalf("isEastAsian(%q) should be %v", tt.locale, tt.want)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestIsEastAsianLCCTYPE(t *testing.T) {
|
||
|
env := saveEnv()
|
||
|
defer restoreEnv(&env)
|
||
|
os.Setenv("LC_ALL", "")
|
||
|
|
||
|
testcases := []struct {
|
||
|
lcctype string
|
||
|
want bool
|
||
|
}{
|
||
|
{"ja_JP.UTF-8", true},
|
||
|
{"C", false},
|
||
|
{"POSIX", false},
|
||
|
{"en_US.UTF-8", false},
|
||
|
}
|
||
|
|
||
|
for _, tt := range testcases {
|
||
|
os.Setenv("LC_CTYPE", tt.lcctype)
|
||
|
got := IsEastAsian()
|
||
|
if got != tt.want {
|
||
|
t.Fatalf("IsEastAsian() for LC_CTYPE=%v should be %v", tt.lcctype, tt.want)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestIsEastAsianLANG(t *testing.T) {
|
||
|
env := saveEnv()
|
||
|
defer restoreEnv(&env)
|
||
|
os.Setenv("LC_ALL", "")
|
||
|
os.Setenv("LC_CTYPE", "")
|
||
|
|
||
|
testcases := []struct {
|
||
|
lcctype string
|
||
|
want bool
|
||
|
}{
|
||
|
{"ja_JP.UTF-8", true},
|
||
|
{"C", false},
|
||
|
{"POSIX", false},
|
||
|
{"en_US.UTF-8", false},
|
||
|
{"C.UTF-8", false},
|
||
|
}
|
||
|
|
||
|
for _, tt := range testcases {
|
||
|
os.Setenv("LANG", tt.lcctype)
|
||
|
got := IsEastAsian()
|
||
|
if got != tt.want {
|
||
|
t.Fatalf("IsEastAsian() for LANG=%v should be %v", tt.lcctype, tt.want)
|
||
|
}
|
||
|
}
|
||
|
}
|