fc3a66dc83
Go 控制面(SQLite + REST API)嵌入 Mihomo 数据面,Vue 3 多语言 Web 管理台。 含订阅/节点/规则/出站/监控/日志、OpenAPI、API Key、Gitea Actions CI(runs-on: ubuntu-latest) 与开源文档;镜像发布至 git.rc707blog.top Container Registry。 Co-authored-by: Cursor <cursoragent@cursor.com>
57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package country
|
|
|
|
import "testing"
|
|
|
|
func TestDetectCountry(t *testing.T) {
|
|
cases := map[string]string{
|
|
"香港 01 | IEPL": "HK",
|
|
"🇺🇸美国洛杉矶": "US",
|
|
"日本东京专线": "JP",
|
|
"Singapore-01": "SG",
|
|
"KR首尔": "KR",
|
|
"台湾节点": "TW",
|
|
"DE法兰克福": "DE",
|
|
"HK 01": "HK",
|
|
"墨西哥城 01": "MX",
|
|
"Mexico City": "MX",
|
|
"南非 约翰内斯堡": "ZA",
|
|
"South Africa JNB": "ZA",
|
|
"新西兰 奥克兰": "NZ",
|
|
"New Zealand Auckland": "NZ",
|
|
"尼日利亚 拉各斯": "NG",
|
|
"Nigeria Lagos": "NG",
|
|
"冰岛 雷克雅未克": "IS",
|
|
"Iceland Reykjavik": "IS",
|
|
"random node": "",
|
|
}
|
|
for name, want := range cases {
|
|
if got := Detect(name); got != want {
|
|
t.Fatalf("%q: want %q got %q", name, want, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTargetAlias(t *testing.T) {
|
|
code, ok := ParseTargetAlias("country:hk")
|
|
if !ok || code != "HK" {
|
|
t.Fatalf("parse failed: %v %q", ok, code)
|
|
}
|
|
if GroupRuntime("HK") != "country_HK" {
|
|
t.Fatal("group runtime name")
|
|
}
|
|
}
|
|
|
|
func TestCatalogCoverage(t *testing.T) {
|
|
if len(catalog) < 150 {
|
|
t.Fatalf("expected comprehensive catalog, got %d entries", len(catalog))
|
|
}
|
|
for _, e := range catalog {
|
|
if e.Code == "" || e.Name == "" || len(e.Keywords) == 0 {
|
|
t.Fatalf("invalid entry: %+v", e)
|
|
}
|
|
if Name(e.Code) != e.Name {
|
|
t.Fatalf("name mismatch for %s", e.Code)
|
|
}
|
|
}
|
|
}
|