2021-11-08 16:39:17 +00:00

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)
}
}
}