1// +build !windows,!js 2 3package runewidth 4 5import ( 6 "os" 7 "testing" 8) 9 10func TestIsEastAsian(t *testing.T) { 11 testcases := []struct { 12 locale string 13 want bool 14 }{ 15 {"foo@cjk_narrow", false}, 16 {"foo@cjk", false}, 17 {"utf-8@cjk", false}, 18 {"ja_JP.CP932", true}, 19 } 20 21 for _, tt := range testcases { 22 got := isEastAsian(tt.locale) 23 if got != tt.want { 24 t.Fatalf("isEastAsian(%q) should be %v", tt.locale, tt.want) 25 } 26 } 27} 28 29func TestIsEastAsianLCCTYPE(t *testing.T) { 30 lcctype := os.Getenv("LC_CTYPE") 31 defer os.Setenv("LC_CTYPE", lcctype) 32 33 testcases := []struct { 34 lcctype string 35 want bool 36 }{ 37 {"ja_JP.UTF-8", true}, 38 {"C", false}, 39 {"POSIX", false}, 40 {"en_US.UTF-8", false}, 41 } 42 43 for _, tt := range testcases { 44 os.Setenv("LC_CTYPE", tt.lcctype) 45 got := IsEastAsian() 46 if got != tt.want { 47 t.Fatalf("IsEastAsian() for LC_CTYPE=%v should be %v", tt.lcctype, tt.want) 48 } 49 } 50} 51 52func TestIsEastAsianLANG(t *testing.T) { 53 lcctype := os.Getenv("LC_CTYPE") 54 defer os.Setenv("LC_CTYPE", lcctype) 55 lang := os.Getenv("LANG") 56 defer os.Setenv("LANG", lang) 57 58 os.Setenv("LC_CTYPE", "") 59 60 testcases := []struct { 61 lcctype string 62 want bool 63 }{ 64 {"ja_JP.UTF-8", true}, 65 {"C", false}, 66 {"POSIX", false}, 67 {"en_US.UTF-8", false}, 68 {"C.UTF-8", false}, 69 } 70 71 for _, tt := range testcases { 72 os.Setenv("LANG", tt.lcctype) 73 got := IsEastAsian() 74 if got != tt.want { 75 t.Fatalf("IsEastAsian() for LANG=%v should be %v", tt.lcctype, tt.want) 76 } 77 } 78} 79