50 lines
1.9 KiB
Go
50 lines
1.9 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|