package main import ( "net/http" "net/http/httptest" "os" "path/filepath" "strings" "testing" ) func TestBeianFooter(t *testing.T) { cases := []struct { name, icp, gongan string wantParts []string wantEmpty bool }{ {name: "both", icp: "京ICP备00000000号-1", gongan: "京公网安备00000000000000号", wantParts: []string{"class=\"navi-footer\"", "beian.miit.gov.cn", "京ICP备00000000号-1", "navi-footer-sep", "beian.mps.gov.cn", "京公网安备00000000000000号"}}, {name: "only icp", icp: " 京ICP备12345678号 ", wantParts: []string{"class=\"navi-footer\"", "京ICP备12345678号"}}, {name: "only gongan", gongan: "沪公网安备31010102002555号", wantParts: []string{"class=\"navi-footer\"", "沪公网安备31010102002555号"}}, {name: "blank", icp: " ", gongan: "", wantEmpty: true}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { got := beianFooter(tc.icp, tc.gongan) if tc.wantEmpty { if got != "" { t.Fatalf("want empty footer, got %q", got) } return } for _, p := range tc.wantParts { if !strings.Contains(got, p) { t.Fatalf("footer %q missing %q", got, p) } } if strings.Contains(got, " ") { t.Fatalf("footer keeps stray whitespace: %q", got) } }) } } // 备案号里若混入引号/尖括号,必须被转义,不能原样拼进 HTML。 func TestBeianFooterEscapesInput(t *testing.T) { got := beianFooter(`">`, "") if strings.Contains(got, "