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