62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package translate
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestTranslateEmptyText(t *testing.T) {
|
|
res, err := TranslateText(context.Background(), "", "zh-CN")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if res.TranslatedText != "" {
|
|
t.Fatalf("expected empty translated text, got %q", res.TranslatedText)
|
|
}
|
|
}
|
|
|
|
func TestTranslateMockServer(t *testing.T) {
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != http.MethodPost {
|
|
t.Errorf("expected POST method, got %s", r.Method)
|
|
}
|
|
if err := r.ParseForm(); err != nil {
|
|
t.Errorf("parse form failed: %v", err)
|
|
}
|
|
q := r.Form.Get("q")
|
|
if q != "Hello world" {
|
|
t.Errorf("expected q='Hello world', got %q", q)
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
// 模拟 Google GTX 翻译返回结构
|
|
w.WriteHeader(http.StatusOK)
|
|
_, _ = w.Write([]byte(`[[["你好世界","Hello world",null,null,10]],null,"en"]`))
|
|
}))
|
|
defer ts.Close()
|
|
|
|
oldURL := apiBaseURL
|
|
oldClient := defaultClient
|
|
defer func() {
|
|
SetApiBaseURL(oldURL)
|
|
SetDefaultClient(oldClient)
|
|
}()
|
|
|
|
SetApiBaseURL(ts.URL)
|
|
SetDefaultClient(ts.Client())
|
|
|
|
res, err := TranslateText(context.Background(), "Hello world", "zh-CN")
|
|
if err != nil {
|
|
t.Fatalf("TranslateText failed: %v", err)
|
|
}
|
|
|
|
if res.TranslatedText != "你好世界" {
|
|
t.Fatalf("expected '你好世界', got %q", res.TranslatedText)
|
|
}
|
|
if res.SourceLang != "en" {
|
|
t.Fatalf("expected source lang 'en', got %q", res.SourceLang)
|
|
}
|
|
}
|