Add tests for response meta parser function

This commit is contained in:
hedy 2022-02-15 12:06:19 +08:00
parent f26056caef
commit a35b84da46
Signed by: hedy
GPG Key ID: B51B5A8D1B176372
2 changed files with 50 additions and 1 deletions

View File

@ -78,7 +78,7 @@ func GeminiParsedURL(u url.URL) (res *GeminiResponse, err error) {
// META which is equal to "text/gemini; charset=utf-8" according to the spec.
func ParseMeta(meta string) (string, map[string]string, error) {
if meta == "" {
return "text/gemini", make(map[string]string), nil
return "text/gemini", map[string]string{"charset": "utf-8"}, nil
}
mediatype, params, err := mime.ParseMediaType(meta)

49
gemini_test.go Normal file
View File

@ -0,0 +1,49 @@
package main
import (
"errors"
"testing"
)
type ParseMetaResult struct {
mediatype string
params map[string]string
err error
}
func TestParseMeta(t *testing.T) {
var tests = []struct {
meta string
res ParseMetaResult
}{
{"", ParseMetaResult{"text/gemini", map[string]string{"charset": "utf-8"}, nil}},
{"text/gemini;", ParseMetaResult{"text/gemini", make(map[string]string), nil}},
{"text/gemini; lang=en", ParseMetaResult{"text/gemini", map[string]string{"lang": "en"}, nil}},
{"text/gemini; charset=utf-8;", ParseMetaResult{"text/gemini", map[string]string{"charset": "utf-8"}, nil}},
{"text/plain; charset=utf-8;", ParseMetaResult{"text/plain", map[string]string{"charset": "utf-8"}, nil}},
{"text/gemini; lang=es;", ParseMetaResult{"text/gemini", map[string]string{"lang": "es"}, nil}},
{"text/plain; charset=utf-8;lang=ru", ParseMetaResult{"text/plain", map[string]string{"charset": "utf-8", "lang": "ru"}, nil}},
{"foobar", ParseMetaResult{"foobar", make(map[string]string), nil}},
{"foo=;", ParseMetaResult{"", make(map[string]string), errors.New("mime: expected slash after first token")}},
{";", ParseMetaResult{"", make(map[string]string), errors.New("mime: no media type")}},
{"application/octet-stream", ParseMetaResult{"application/octet-stream", make(map[string]string), nil}},
}
for _, test := range tests {
mediatype, params, err := ParseMeta(test.meta)
if mediatype != test.res.mediatype {
t.Errorf("parseMeta(%q) mediatype = %q, want %q", test.meta, mediatype, test.res.mediatype)
}
for k, v := range test.res.params {
if params[k] != v {
t.Errorf("parseMeta(%q) params[%q] = %q, want %q", test.meta, k, params[k], v)
}
}
if err == nil && test.res.err == nil {
continue
}
if (err != nil && test.res.err == nil) || (err.Error() != test.res.err.Error()) {
t.Errorf("parseMeta(%q) err = %q, want %q", test.meta, err, test.res.err)
}
}
}