@@ -8,127 +8,148 @@ import (
88 "apprun/pkg/i18n"
99)
1010
11+ const (
12+ testLangZhCN = "zh-CN"
13+ testLangEnUS = "en-US"
14+ )
15+
1116func init () {
1217 // Initialize i18n for testing
13- i18n .Init ("en-US" , []string {"en-US" , "zh-CN" }, "" )
18+ if err := i18n .Init ("en-US" , []string {"en-US" , "zh-CN" }, "" ); err != nil {
19+ panic ("Failed to initialize i18n: " + err .Error ())
20+ }
1421}
1522
1623func TestLanguageDetector_QueryParameter (t * testing.T ) {
1724 handler := LanguageDetector ()(http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
1825 lang := i18n .GetLanguage (r .Context ())
19- w .Write ([]byte (lang ))
26+ if _ , err := w .Write ([]byte (lang )); err != nil {
27+ t .Errorf ("Failed to write response: %v" , err )
28+ }
2029 }))
2130
22- req := httptest .NewRequest ("GET" , "/?lang=zh-CN" , nil )
31+ req := httptest .NewRequest ("GET" , "/?lang=" + testLangZhCN , nil )
2332 rec := httptest .NewRecorder ()
2433 handler .ServeHTTP (rec , req )
2534
26- if rec .Body .String () != "zh-CN" {
27- t .Errorf ("Expected 'zh-CN ', got '%s'" , rec .Body .String ())
35+ if rec .Body .String () != testLangZhCN {
36+ t .Errorf ("Expected '%s ', got '%s'" , testLangZhCN , rec .Body .String ())
2837 }
2938}
3039
3140func TestLanguageDetector_Cookie (t * testing.T ) {
3241 handler := LanguageDetector ()(http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
3342 lang := i18n .GetLanguage (r .Context ())
34- w .Write ([]byte (lang ))
43+ if _ , err := w .Write ([]byte (lang )); err != nil {
44+ t .Errorf ("Failed to write response: %v" , err )
45+ }
3546 }))
3647
3748 req := httptest .NewRequest ("GET" , "/" , nil )
38- req .AddCookie (& http.Cookie {Name : "lang" , Value : "zh-CN" })
49+ req .AddCookie (& http.Cookie {Name : "lang" , Value : testLangZhCN })
3950 rec := httptest .NewRecorder ()
4051 handler .ServeHTTP (rec , req )
4152
42- if rec .Body .String () != "zh-CN" {
43- t .Errorf ("Expected 'zh-CN ', got '%s'" , rec .Body .String ())
53+ if rec .Body .String () != testLangZhCN {
54+ t .Errorf ("Expected '%s ', got '%s'" , testLangZhCN , rec .Body .String ())
4455 }
4556}
4657
4758func TestLanguageDetector_AcceptLanguageHeader (t * testing.T ) {
4859 handler := LanguageDetector ()(http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
4960 lang := i18n .GetLanguage (r .Context ())
50- w .Write ([]byte (lang ))
61+ if _ , err := w .Write ([]byte (lang )); err != nil {
62+ t .Errorf ("Failed to write response: %v" , err )
63+ }
5164 }))
5265
5366 req := httptest .NewRequest ("GET" , "/" , nil )
54- req .Header .Set ("Accept-Language" , "zh-CN ,en;q=0.9" )
67+ req .Header .Set ("Accept-Language" , testLangZhCN + " ,en;q=0.9" )
5568 rec := httptest .NewRecorder ()
5669 handler .ServeHTTP (rec , req )
5770
58- if rec .Body .String () != "zh-CN" {
59- t .Errorf ("Expected 'zh-CN ', got '%s'" , rec .Body .String ())
71+ if rec .Body .String () != testLangZhCN {
72+ t .Errorf ("Expected '%s ', got '%s'" , testLangZhCN , rec .Body .String ())
6073 }
6174}
6275
6376func TestLanguageDetector_DefaultLanguage (t * testing.T ) {
6477 handler := LanguageDetector ()(http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
6578 lang := i18n .GetLanguage (r .Context ())
66- w .Write ([]byte (lang ))
79+ if _ , err := w .Write ([]byte (lang )); err != nil {
80+ t .Errorf ("Failed to write response: %v" , err )
81+ }
6782 }))
6883
6984 req := httptest .NewRequest ("GET" , "/" , nil )
7085 rec := httptest .NewRecorder ()
7186 handler .ServeHTTP (rec , req )
7287
73- if rec .Body .String () != "en-US" {
74- t .Errorf ("Expected 'en-US ', got '%s'" , rec .Body .String ())
88+ if rec .Body .String () != testLangEnUS {
89+ t .Errorf ("Expected '%s ', got '%s'" , testLangEnUS , rec .Body .String ())
7590 }
7691}
7792
7893func TestLanguageDetector_UnsupportedLanguageFallback (t * testing.T ) {
7994 handler := LanguageDetector ()(http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
8095 lang := i18n .GetLanguage (r .Context ())
81- w .Write ([]byte (lang ))
96+ if _ , err := w .Write ([]byte (lang )); err != nil {
97+ t .Errorf ("Failed to write response: %v" , err )
98+ }
8299 }))
83100
84101 req := httptest .NewRequest ("GET" , "/?lang=fr-FR" , nil )
85102 rec := httptest .NewRecorder ()
86103 handler .ServeHTTP (rec , req )
87104
88- if rec .Body .String () != "en-US" {
89- t .Errorf ("Expected fallback to 'en-US ', got '%s'" , rec .Body .String ())
105+ if rec .Body .String () != testLangEnUS {
106+ t .Errorf ("Expected fallback to '%s ', got '%s'" , testLangEnUS , rec .Body .String ())
90107 }
91108}
92109
93110func TestLanguageDetector_Priority (t * testing.T ) {
94111 handler := LanguageDetector ()(http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
95112 lang := i18n .GetLanguage (r .Context ())
96- w .Write ([]byte (lang ))
113+ if _ , err := w .Write ([]byte (lang )); err != nil {
114+ t .Errorf ("Failed to write response: %v" , err )
115+ }
97116 }))
98117
99118 // Query parameter should override cookie and header
100- req := httptest .NewRequest ("GET" , "/?lang=en-US" , nil )
101- req .AddCookie (& http.Cookie {Name : "lang" , Value : "zh-CN" })
102- req .Header .Set ("Accept-Language" , "zh-CN" )
119+ req := httptest .NewRequest ("GET" , "/?lang=" + testLangEnUS , nil )
120+ req .AddCookie (& http.Cookie {Name : "lang" , Value : testLangZhCN })
121+ req .Header .Set ("Accept-Language" , testLangZhCN )
103122 rec := httptest .NewRecorder ()
104123 handler .ServeHTTP (rec , req )
105124
106- if rec .Body .String () != "en-US" {
107- t .Errorf ("Expected query param 'en-US ', got '%s'" , rec .Body .String ())
125+ if rec .Body .String () != testLangEnUS {
126+ t .Errorf ("Expected query param '%s ', got '%s'" , testLangEnUS , rec .Body .String ())
108127 }
109128}
110129
111130func TestLanguageDetector_LanguageVariant (t * testing.T ) {
112131 handler := LanguageDetector ()(http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
113132 lang := i18n .GetLanguage (r .Context ())
114- w .Write ([]byte (lang ))
133+ if _ , err := w .Write ([]byte (lang )); err != nil {
134+ t .Errorf ("Failed to write response: %v" , err )
135+ }
115136 }))
116137
117138 // Test "zh" should match to "zh-CN"
118139 req := httptest .NewRequest ("GET" , "/?lang=zh" , nil )
119140 rec := httptest .NewRecorder ()
120141 handler .ServeHTTP (rec , req )
121142
122- if rec .Body .String () != "zh-CN" {
123- t .Errorf ("Expected 'zh' to match 'zh-CN ', got '%s'" , rec .Body .String ())
143+ if rec .Body .String () != testLangZhCN {
144+ t .Errorf ("Expected 'zh' to match '%s ', got '%s'" , testLangZhCN , rec .Body .String ())
124145 }
125146
126147 // Test "en" should match to "en-US"
127148 req = httptest .NewRequest ("GET" , "/?lang=en" , nil )
128149 rec = httptest .NewRecorder ()
129150 handler .ServeHTTP (rec , req )
130151
131- if rec .Body .String () != "en-US" {
132- t .Errorf ("Expected 'en' to match 'en-US ', got '%s'" , rec .Body .String ())
152+ if rec .Body .String () != testLangEnUS {
153+ t .Errorf ("Expected 'en' to match '%s ', got '%s'" , testLangEnUS , rec .Body .String ())
133154 }
134155}
0 commit comments