initial commits

master
Charles Iliya Krempeaux 2023-08-11 12:08:28 -07:00
commit 76045c518f
6 changed files with 2425 additions and 0 deletions

View File

@ -0,0 +1,196 @@
package mediarange
import (
"errors"
"strings"
)
var (
errBadMediaRange = errors.New("bad media-range")
)
// MediaRange represents a "media-range" as defined by IETF RFC-2616 (Hypertext Transfer Protocol — HTTP/1.1) in section 14.1.
//
// Here are some sample media-ranges:
//
// */*
// audio/*
// image/*
// text/*
// video/*
// application/x-tar
// audio/wav
// image/gif
// image/png
// text/html
// text/plain
// video/mp4
//
// Note that some of these sample media-ranges look like media-types / mime-types:
//
// application/x-tar
// audio/wav
// image/gif
// image/png
// text/html
// text/plain
// video/mp4
//
// But some of these sample media-ranges are not media-types / mime-types:
//
// */*
// audio/*
// image/*
// text/*
// video/*
//
// These later kinds of media-ranges (that do not look like media-types / mime-types) use the asterisk ("*") as a wild-card symbol.
// So "*/*" represents any media-type / mime-type.
// ANd "image/*" represents "image/gif", "image/png", etc.
type MediaRange struct {
typ string
subtyp string
}
// Create creates a MediaRange.
//
// For example:
//
// // audio/ogg
// mediarange.Create("audio", "ogg")
//
// // audio/*
// mediarange.Create("audio", "*")
//
// // */*
// mediarange.Create("*", "*")
//
// Note that an empty string for mediaRangeType or mediaRangeSubType will be treated as a wild-card (i.e., "*").
func Create(mediaRangeType string, mediaRangeSubType string) MediaRange {
mediaRangeType = strings.TrimSpace(mediaRangeType)
mediaRangeSubType = strings.TrimSpace(mediaRangeSubType)
if "*" == mediaRangeType {
mediaRangeType = ""
}
if "*" == mediaRangeSubType {
mediaRangeSubType = ""
}
return MediaRange{
typ: strings.ToLower(mediaRangeType),
subtyp: strings.ToLower(mediaRangeSubType),
}
}
// Parse parses a string and returns a MediaRange.
//
// For example:
//
// mr, err := mediarange.Parse("application/activity+json")
func Parse(value string) (MediaRange, error) {
value = strings.TrimSpace(value)
parts := strings.SplitN(value, "/", 2)
if 2 != len(parts) {
return MediaRange{}, errBadMediaRange
}
var typ string = parts[0]
var subtyp string
{
a := strings.SplitN(parts[1], ";", 2)
{
length := len(a)
if 2 != length && 1 != length {
return MediaRange{}, errBadMediaRange
}
}
subtyp = a[0]
}
return Create(typ, subtyp), nil
}
// SubType returns the subtype of the media-range in its canonical form — i.e. lower-case and without spacing.
func (receiver MediaRange) SubType() string {
var typ string = receiver.typ
var subtyp string = receiver.subtyp
if "" == typ || "*" == typ {
return "*"
}
if "" == subtyp {
return "*"
}
return subtyp
}
// Type returns the type of the media-range in its canonical form — i.e. lower-case and without spacing.
func (receiver MediaRange) Type() string {
var typ string = receiver.typ
if "" == typ {
return "*"
}
return typ
}
func (receiver MediaRange) Match(value string) bool {
var typ string = receiver.Type()
if "*" == typ {
return true
}
// Since media-types are a sub-set of media-ranges, we can do this.
var mediatype MediaRange
{
var err error
mediatype, err = Parse(value)
if nil != err {
return false
}
}
if mediatype.typ != typ {
return false
}
var subtyp string = receiver.SubType()
if "*" == subtyp {
return true
}
if mediatype.subtyp != subtyp {
return false
}
return true
}
// String returns the serialed media-range.
//
// For example:
//
// "text/html" == mediarange.Create("text", "html").String()
func (receiver MediaRange) String() string {
var p []byte
var typ string = receiver.Type()
p = append(p, typ...)
p = append(p, '/')
var subtyp string = receiver.SubType()
p = append(p, subtyp...)
return string(p)
}

View File

@ -0,0 +1,594 @@
package mediarange_test
import (
"sourcecode.social/reiver/go-httpaccept/mediarange"
"testing"
)
func TestMediaRange_Match(t *testing.T) {
tests := []struct{
MediaType string
MediaRange mediarange.MediaRange
Expected bool
}{
{
MediaType: "application/activity+json",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/epub+zip",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/gzip",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/json",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/pdf",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/msword",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/octet-stream",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/ogg",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/rtf",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/xhtml+xml",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/x-httpd-php",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/X-httpd-PHP",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "image/gif",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "image/png",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "Image/png",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "image/PnG",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "IMAGE/PNG",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "text/html",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "TEXT/html",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "text/plain",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "TEXT/PLAIN",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "xyz/banana",
MediaRange: mediarange.Create("", ""),
Expected: true,
},
{
MediaType: "application/activity+json",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/epub+zip",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/gzip",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/json",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/pdf",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/msword",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/octet-stream",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/ogg",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/rtf",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/xhtml+xml",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/x-httpd-php",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/X-httpd-PHP",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "image/gif",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "image/png",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "Image/png",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "image/PnG",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "IMAGE/PNG",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "text/html",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "TEXT/html",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "text/plain",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "TEXT/PLAIN",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "xyz/banana",
MediaRange: mediarange.Create("*", "*"),
Expected: true,
},
{
MediaType: "application/activity+json",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/epub+zip",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/gzip",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/json",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/pdf",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/msword",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/octet-stream",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/ogg",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/rtf",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/xhtml+xml",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/x-httpd-php",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "application/X-httpd-PHP",
MediaRange: mediarange.Create("application", "*"),
Expected: true,
},
{
MediaType: "image/gif",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "image/png",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "Image/png",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "image/PnG",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "IMAGE/PNG",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "text/html",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "TEXT/html",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "text/plain",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "TEXT/PLAIN",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "xyz/banana",
MediaRange: mediarange.Create("application", "*"),
Expected: false,
},
{
MediaType: "application/activity+json",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/epub+zip",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/gzip",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/json",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/pdf",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/msword",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/octet-stream",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/ogg",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/rtf",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/xhtml+xml",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/x-httpd-php",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/X-httpd-PHP",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "image/gif",
MediaRange: mediarange.Create("image", "*"),
Expected: true,
},
{
MediaType: "image/png",
MediaRange: mediarange.Create("image", "*"),
Expected: true,
},
{
MediaType: "Image/png",
MediaRange: mediarange.Create("image", "*"),
Expected: true,
},
{
MediaType: "image/PnG",
MediaRange: mediarange.Create("image", "*"),
Expected: true,
},
{
MediaType: "IMAGE/PNG",
MediaRange: mediarange.Create("image", "*"),
Expected: true,
},
{
MediaType: "text/html",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "TEXT/html",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "text/plain",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "TEXT/PLAIN",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "xyz/banana",
MediaRange: mediarange.Create("image", "*"),
Expected: false,
},
{
MediaType: "application/activity+json",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/epub+zip",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/gzip",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/json",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/pdf",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/msword",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/octet-stream",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/ogg",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/rtf",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/xhtml+xml",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/x-httpd-php",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "application/X-httpd-PHP",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "image/gif",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "image/png",
MediaRange: mediarange.Create("image", "png"),
Expected: true,
},
{
MediaType: "Image/png",
MediaRange: mediarange.Create("image", "png"),
Expected: true,
},
{
MediaType: "image/PnG",
MediaRange: mediarange.Create("image", "png"),
Expected: true,
},
{
MediaType: "IMAGE/PNG",
MediaRange: mediarange.Create("image", "png"),
Expected: true,
},
{
MediaType: "text/html",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "TEXT/html",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "text/plain",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "TEXT/PLAIN",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
{
MediaType: "xyz/banana",
MediaRange: mediarange.Create("image", "png"),
Expected: false,
},
}
for testNumber, test := range tests {
actual := test.MediaRange.Match(test.MediaType)
expected := test.Expected
if expected != actual {
t.Errorf("For test #%d, the actual result from trying to match the media-type against the media-range is not what was expected.", testNumber)
t.Logf("MEDIA-TYPE: %q", test.MediaType)
t.Logf("MEDIA-RANGE: %q", test.MediaRange)
t.Logf("EXPECTED: %t", expected)
t.Logf("ACTUAL: %t", actual)
continue
}
}
}

View File

@ -0,0 +1,286 @@
package mediarange_test
import (
"sourcecode.social/reiver/go-httpaccept/mediarange"
"testing"
)
func TestParse(t *testing.T) {
tests := []struct{
MediaRange string
Expected mediarange.MediaRange
}{
{
MediaRange: "*/*",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=0.0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=0.5",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=1",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=1.0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ;q=0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ;q=0.0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ;q=0.5",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ;q=1",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ;q=1.0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*; q=0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*; q=0.0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*; q=0.5",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*; q=1",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*; q=1.0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ; q=0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ; q=0.0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ; q=0.5",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ; q=1",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/* ; q=1.0",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=0;once=1;twice=22;thrice=333;fource=4444",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=0.0;once=1;twice=22;thrice=333;fource=4444",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=0.5;once=1;twice=22;thrice=333;fource=4444",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=1;once=1;twice=22;thrice=333;fource=4444",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "*/*;q=1.0;once=1;twice=22;thrice=333;fource=4444",
Expected: mediarange.Create("*", "*"),
},
{
MediaRange: "application/*",
Expected: mediarange.Create("application", "*"),
},
{
MediaRange: "audio/*",
Expected: mediarange.Create("audio", "*"),
},
{
MediaRange: "font/*",
Expected: mediarange.Create("font", "*"),
},
{
MediaRange: "image/*",
Expected: mediarange.Create("image", "*"),
},
{
MediaRange: "text/*",
Expected: mediarange.Create("text", "*"),
},
{
MediaRange: "video/*",
Expected: mediarange.Create("video", "*"),
},
{
MediaRange: "xyz/*",
Expected: mediarange.Create("xyz", "*"),
},
{
MediaRange: "Application/*",
Expected: mediarange.Create("application", "*"),
},
{
MediaRange: "audIO/*",
Expected: mediarange.Create("audio", "*"),
},
{
MediaRange: "FonT/*",
Expected: mediarange.Create("font", "*"),
},
{
MediaRange: "IMAGE/*",
Expected: mediarange.Create("image", "*"),
},
{
MediaRange: "tEXT/*",
Expected: mediarange.Create("text", "*"),
},
{
MediaRange: "vIDeo/*",
Expected: mediarange.Create("video", "*"),
},
{
MediaRange: "Xyz/*",
Expected: mediarange.Create("xyz", "*"),
},
{
MediaRange: "application/XHTML+XML",
Expected: mediarange.Create("application", "xhtml+xml"),
},
{
MediaRange: "IMAGE/png",
Expected: mediarange.Create("image", "png"),
},
{
MediaRange: "text/html",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "Text/html",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "TexT/html",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "tExt/html",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "teXt/html",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "texT/html",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "text/Html",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "text/hTml",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "text/htMl",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "text/htmL",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "TeXT/HTml",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "TEXT/html",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "text/HTML",
Expected: mediarange.Create("text", "html"),
},
{
MediaRange: "TEXT/HTML",
Expected: mediarange.Create("text", "html"),
},
}
for testNumber, test := range tests {
actual, err := mediarange.Parse(test.MediaRange)
if nil != err {
t.Errorf("For test #%d, did not expect an error but actually got one.", testNumber)
t.Logf("MEDIA-RANGE: %q", test.MediaRange)
t.Logf("ERROR: (%T) %s", err, err)
continue
}
expected := test.Expected
if expected != actual {
t.Errorf("For tset #%d, the actual resulting media-range is not what was expected.", testNumber)
t.Logf("MEDIA-RANGE: %q", test.MediaRange)
t.Logf("EXPECTED: %q %#v", expected, expected)
t.Logf("ACTUAL: %q %#v", actual, actual)
continue
}
}
}

View File

@ -0,0 +1,434 @@
package mediarange_test
import (
"sourcecode.social/reiver/go-httpaccept/mediarange"
"testing"
)
func TestMediaRange_String(t *testing.T) {
tests := []struct{
MediaRange mediarange.MediaRange
Expected string
}{
{
MediaRange: mediarange.Create("", ""),
Expected: "*"+"/"+"*",
},
{
MediaRange: mediarange.Create("*" , "*"),
Expected: "*"+"/"+"*",
},
{
MediaRange: mediarange.Create("application" , ""),
Expected: "application"+"/"+"*",
},
{
MediaRange: mediarange.Create("audio" , ""),
Expected: "audio"+"/"+"*",
},
{
MediaRange: mediarange.Create("font" , ""),
Expected: "font"+"/"+"*",
},
{
MediaRange: mediarange.Create("image" , ""),
Expected: "image"+"/"+"*",
},
{
MediaRange: mediarange.Create("text" , ""),
Expected: "text"+"/"+"*",
},
{
MediaRange: mediarange.Create("video" , ""),
Expected: "video"+"/"+"*",
},
{
MediaRange: mediarange.Create("xyz" , ""),
Expected: "xyz"+"/"+"*",
},
{
MediaRange: mediarange.Create("application" , "*"),
Expected: "application"+"/"+"*",
},
{
MediaRange: mediarange.Create("audio" , "*"),
Expected: "audio"+"/"+"*",
},
{
MediaRange: mediarange.Create("font" , "*"),
Expected: "font"+"/"+"*",
},
{
MediaRange: mediarange.Create("image" , "*"),
Expected: "image"+"/"+"*",
},
{
MediaRange: mediarange.Create("text" , ""),
Expected: "text"+"/"+"*",
},
{
MediaRange: mediarange.Create("video" , ""),
Expected: "video"+"/"+"*",
},
{
MediaRange: mediarange.Create("xyz" , ""),
Expected: "xyz"+"/"+"*",
},
{
MediaRange: mediarange.Create("Application" , "*"),
Expected: "application"+"/"+"*",
},
{
MediaRange: mediarange.Create("Audio" , "*"),
Expected: "audio"+"/"+"*",
},
{
MediaRange: mediarange.Create("Font" , "*"),
Expected: "font"+"/"+"*",
},
{
MediaRange: mediarange.Create("Image" , "*"),
Expected: "image"+"/"+"*",
},
{
MediaRange: mediarange.Create("Text" , ""),
Expected: "text"+"/"+"*",
},
{
MediaRange: mediarange.Create("Video" , ""),
Expected: "video"+"/"+"*",
},
{
MediaRange: mediarange.Create("Xyz" , ""),
Expected: "xyz"+"/"+"*",
},
{
MediaRange: mediarange.Create("APPLICATION" , "*"),
Expected: "application"+"/"+"*",
},
{
MediaRange: mediarange.Create("AUDIO" , "*"),
Expected: "audio"+"/"+"*",
},
{
MediaRange: mediarange.Create("FONT" , "*"),
Expected: "font"+"/"+"*",
},
{
MediaRange: mediarange.Create("IMAGE" , "*"),
Expected: "image"+"/"+"*",
},
{
MediaRange: mediarange.Create("TEXT" , ""),
Expected: "text"+"/"+"*",
},
{
MediaRange: mediarange.Create("VIDEO" , ""),
Expected: "video"+"/"+"*",
},
{
MediaRange: mediarange.Create("XYZ" , ""),
Expected: "xyz"+"/"+"*",
},
{
MediaRange: mediarange.Create("application" , "activity+json"),
Expected: "application"+"/"+"activity+json",
},
{
MediaRange: mediarange.Create("application" , "epub+zip"),
Expected: "application"+"/"+"epub+zip",
},
{
MediaRange: mediarange.Create("application" , "gzip"),
Expected: "application"+"/"+"gzip",
},
{
MediaRange: mediarange.Create("application" , "java-archive"),
Expected: "application"+"/"+"java-archive",
},
{
MediaRange: mediarange.Create("application" , "json"),
Expected: "application"+"/"+"json",
},
{
MediaRange: mediarange.Create("application" , "ld+json"),
Expected: "application"+"/"+"ld+json",
},
{
MediaRange: mediarange.Create("application" , "pdf"),
Expected: "application"+"/"+"pdf",
},
{
MediaRange: mediarange.Create("application" , "msword"),
Expected: "application"+"/"+"msword",
},
{
MediaRange: mediarange.Create("application" , "octet-stream"),
Expected: "application"+"/"+"octet-stream",
},
{
MediaRange: mediarange.Create("application" , "ogg"),
Expected: "application"+"/"+"ogg",
},
{
MediaRange: mediarange.Create("application" , "rtf"),
Expected: "application"+"/"+"rtf",
},
{
MediaRange: mediarange.Create("application" , "vnd.oasis.opendocument.spreadsheet"),
Expected: "application"+"/"+"vnd.oasis.opendocument.spreadsheet",
},
{
MediaRange: mediarange.Create("application" , "vnd.openxmlformats-officedocument.wordprocessingml.document"),
Expected: "application"+"/"+"vnd.openxmlformats-officedocument.wordprocessingml.document",
},
{
MediaRange: mediarange.Create("application" , "vnd.mozilla.xul+xml"),
Expected: "application"+"/"+"vnd.mozilla.xul+xml",
},
{
MediaRange: mediarange.Create("application" , "vnd.ms-excel"),
Expected: "application"+"/"+"vnd.ms-excel",
},
{
MediaRange: mediarange.Create("application" , "x-7z-compressed"),
Expected: "application"+"/"+"x-7z-compressed",
},
{
MediaRange: mediarange.Create("application" , "x-bzip"),
Expected: "application"+"/"+"x-bzip",
},
{
MediaRange: mediarange.Create("application" , "x-bzip2"),
Expected: "application"+"/"+"x-bzip2",
},
{
MediaRange: mediarange.Create("application" , "x-cdf"),
Expected: "application"+"/"+"x-cdf",
},
{
MediaRange: mediarange.Create("application" , "x-csh"),
Expected: "application"+"/"+"x-csh",
},
{
MediaRange: mediarange.Create("application" , "x-freearc"),
Expected: "application"+"/"+"x-freearc",
},
{
MediaRange: mediarange.Create("application" , "x-httpd-php"),
Expected: "application"+"/"+"x-httpd-php",
},
{
MediaRange: mediarange.Create("application" , "x-sh"),
Expected: "application"+"/"+"x-sh",
},
{
MediaRange: mediarange.Create("application" , "x-tar"),
Expected: "application"+"/"+"x-tar",
},
{
MediaRange: mediarange.Create("application" , "xhtml+xml"),
Expected: "application"+"/"+"xhtml+xml",
},
{
MediaRange: mediarange.Create("audio" , "aac"),
Expected: "audio"+"/"+"aac",
},
{
MediaRange: mediarange.Create("audio" , "midi"),
Expected: "audio"+"/"+"midi",
},
{
MediaRange: mediarange.Create("audio" , "mpeg"),
Expected: "audio"+"/"+"mpeg",
},
{
MediaRange: mediarange.Create("audio" , "ogg"),
Expected: "audio"+"/"+"ogg",
},
{
MediaRange: mediarange.Create("audio" , "opus"),
Expected: "audio"+"/"+"opus",
},
{
MediaRange: mediarange.Create("audio" , "wav"),
Expected: "audio"+"/"+"wav",
},
{
MediaRange: mediarange.Create("audio" , "webm"),
Expected: "audio"+"/"+"webm",
},
{
MediaRange: mediarange.Create("audio" , "3gpp"),
Expected: "audio"+"/"+"3gpp",
},
{
MediaRange: mediarange.Create("audio" , "3gpp2"),
Expected: "audio"+"/"+"3gpp2",
},
{
MediaRange: mediarange.Create("audio" , "x-midi"),
Expected: "audio"+"/"+"x-midi",
},
{
MediaRange: mediarange.Create("font" , "ttf"),
Expected: "font"+"/"+"ttf",
},
{
MediaRange: mediarange.Create("image" , "avif"),
Expected: "image"+"/"+"avif",
},
{
MediaRange: mediarange.Create("image" , "bmp"),
Expected: "image"+"/"+"bmp",
},
{
MediaRange: mediarange.Create("image" , "gif"),
Expected: "image"+"/"+"gif",
},
{
MediaRange: mediarange.Create("image" , "png"),
Expected: "image"+"/"+"png",
},
{
MediaRange: mediarange.Create("image" , "tiff"),
Expected: "image"+"/"+"tiff",
},
{
MediaRange: mediarange.Create("text" , "css"),
Expected: "text"+"/"+"css",
},
{
MediaRange: mediarange.Create("text" , "csv"),
Expected: "text"+"/"+"csv",
},
{
MediaRange: mediarange.Create("text" , "html"),
Expected: "text"+"/"+"html",
},
{
MediaRange: mediarange.Create("text" , "javascript"),
Expected: "text"+"/"+"javascript",
},
{
MediaRange: mediarange.Create("text" , "markdown"),
Expected: "text"+"/"+"markdown",
},
{
MediaRange: mediarange.Create("text" , "plain"),
Expected: "text"+"/"+"plain",
},
{
MediaRange: mediarange.Create("text" , "x-markdown"),
Expected: "text"+"/"+"x-markdown",
},
{
MediaRange: mediarange.Create("video" , "3gpp2"),
Expected: "video"+"/"+"3gpp2",
},
{
MediaRange: mediarange.Create("video" , "ogg"),
Expected: "video"+"/"+"ogg",
},
{
MediaRange: mediarange.Create("video" , "mp2t"),
Expected: "video"+"/"+"mp2t",
},
{
MediaRange: mediarange.Create("video" , "mp4"),
Expected: "video"+"/"+"mp4",
},
{
MediaRange: mediarange.Create("video" , "mpeg"),
Expected: "video"+"/"+"mpeg",
},
{
MediaRange: mediarange.Create("video" , "webm"),
Expected: "video"+"/"+"webm",
},
{
MediaRange: mediarange.Create("video" , "x-msvideo"),
Expected: "video"+"/"+"x-msvideo",
},
{
MediaRange: mediarange.Create("application" , "ACTIVITY+JSON"),
Expected: "application"+"/"+"activity+json",
},
{
MediaRange: mediarange.Create("audio" , "MPEG"),
Expected: "audio"+"/"+"mpeg",
},
{
MediaRange: mediarange.Create("font" , "TTF"),
Expected: "font"+"/"+"ttf",
},
{
MediaRange: mediarange.Create("image" , "PNG"),
Expected: "image"+"/"+"png",
},
{
MediaRange: mediarange.Create("text" , "HTML"),
Expected: "text"+"/"+"html",
},
{
MediaRange: mediarange.Create("video" , "OGG"),
Expected: "video"+"/"+"ogg",
},
{
MediaRange: mediarange.Create("xyz" , "BANANA"),
Expected: "xyz"+"/"+"banana",
},
}
for testNumber, test := range tests {
actual := test.MediaRange.String()
expected := test.Expected
if expected != actual {
t.Errorf("For test #%d, the actual (serialized) stringer value is not what was expected.", testNumber)
t.Logf("MEDIA-RANGE: %#v", test.MediaRange)
t.Logf("EXPECTED: %q", expected)
t.Logf("ACTUAL: %q", actual)
continue
}
}
}

View File

@ -0,0 +1,481 @@
package mediarange_test
import (
"sourcecode.social/reiver/go-httpaccept/mediarange"
"testing"
)
func TestMediaRange_SubType(t *testing.T) {
tests := []struct{
MediaRange mediarange.MediaRange
Expected string
}{
{
MediaRange: mediarange.Create("" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("application" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("audio" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("font" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("image" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("text" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("video" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("xyz" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("application" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("audio" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("font" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("image" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("text" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("video" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("xyz" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("Application" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("Audio" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("Font" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("Image" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("Text" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("Video" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("Xyz" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("APPLICATION" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("AUDIO" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("FONT" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("IMAGE" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("TEXT" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("VIDEO" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("XYZ" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("application" , "activity+json"),
Expected: "activity+json",
},
{
MediaRange: mediarange.Create("application" , "epub+zip"),
Expected: "epub+zip",
},
{
MediaRange: mediarange.Create("application" , "gzip"),
Expected: "gzip",
},
{
MediaRange: mediarange.Create("application" , "java-archive"),
Expected: "java-archive",
},
{
MediaRange: mediarange.Create("application" , "json"),
Expected: "json",
},
{
MediaRange: mediarange.Create("application" , "ld+json"),
Expected: "ld+json",
},
{
MediaRange: mediarange.Create("application" , "pdf"),
Expected: "pdf",
},
{
MediaRange: mediarange.Create("application" , "msword"),
Expected: "msword",
},
{
MediaRange: mediarange.Create("application" , "octet-stream"),
Expected: "octet-stream",
},
{
MediaRange: mediarange.Create("application" , "ogg"),
Expected: "ogg",
},
{
MediaRange: mediarange.Create("application" , "rtf"),
Expected: "rtf",
},
{
MediaRange: mediarange.Create("application" , "vnd.oasis.opendocument.spreadsheet"),
Expected: "vnd.oasis.opendocument.spreadsheet",
},
{
MediaRange: mediarange.Create("application" , "vnd.openxmlformats-officedocument.wordprocessingml.document"),
Expected: "vnd.openxmlformats-officedocument.wordprocessingml.document",
},
{
MediaRange: mediarange.Create("application" , "vnd.mozilla.xul+xml"),
Expected: "vnd.mozilla.xul+xml",
},
{
MediaRange: mediarange.Create("application" , "vnd.ms-excel"),
Expected: "vnd.ms-excel",
},
{
MediaRange: mediarange.Create("application" , "x-7z-compressed"),
Expected: "x-7z-compressed",
},
{
MediaRange: mediarange.Create("application" , "x-bzip"),
Expected: "x-bzip",
},
{
MediaRange: mediarange.Create("application" , "x-bzip2"),
Expected: "x-bzip2",
},
{
MediaRange: mediarange.Create("application" , "x-cdf"),
Expected: "x-cdf",
},
{
MediaRange: mediarange.Create("application" , "x-csh"),
Expected: "x-csh",
},
{
MediaRange: mediarange.Create("application" , "x-freearc"),
Expected: "x-freearc",
},
{
MediaRange: mediarange.Create("application" , "x-httpd-php"),
Expected: "x-httpd-php",
},
{
MediaRange: mediarange.Create("application" , "x-sh"),
Expected: "x-sh",
},
{
MediaRange: mediarange.Create("application" , "x-tar"),
Expected: "x-tar",
},
{
MediaRange: mediarange.Create("application" , "xhtml+xml"),
Expected: "xhtml+xml",
},
{
MediaRange: mediarange.Create("audio" , "aac"),
Expected: "aac",
},
{
MediaRange: mediarange.Create("audio" , "midi"),
Expected: "midi",
},
{
MediaRange: mediarange.Create("audio" , "mpeg"),
Expected: "mpeg",
},
{
MediaRange: mediarange.Create("audio" , "ogg"),
Expected: "ogg",
},
{
MediaRange: mediarange.Create("audio" , "opus"),
Expected: "opus",
},
{
MediaRange: mediarange.Create("audio" , "wav"),
Expected: "wav",
},
{
MediaRange: mediarange.Create("audio" , "webm"),
Expected: "webm",
},
{
MediaRange: mediarange.Create("audio" , "3gpp"),
Expected: "3gpp",
},
{
MediaRange: mediarange.Create("audio" , "3gpp2"),
Expected: "3gpp2",
},
{
MediaRange: mediarange.Create("audio" , "x-midi"),
Expected: "x-midi",
},
{
MediaRange: mediarange.Create("font" , "ttf"),
Expected: "ttf",
},
{
MediaRange: mediarange.Create("image" , "avif"),
Expected: "avif",
},
{
MediaRange: mediarange.Create("image" , "bmp"),
Expected: "bmp",
},
{
MediaRange: mediarange.Create("image" , "gif"),
Expected: "gif",
},
{
MediaRange: mediarange.Create("image" , "png"),
Expected: "png",
},
{
MediaRange: mediarange.Create("image" , "tiff"),
Expected: "tiff",
},
{
MediaRange: mediarange.Create("text" , "css"),
Expected: "css",
},
{
MediaRange: mediarange.Create("text" , "csv"),
Expected: "csv",
},
{
MediaRange: mediarange.Create("text" , "html"),
Expected: "html",
},
{
MediaRange: mediarange.Create("text" , "javascript"),
Expected: "javascript",
},
{
MediaRange: mediarange.Create("text" , "markdown"),
Expected: "markdown",
},
{
MediaRange: mediarange.Create("text" , "plain"),
Expected: "plain",
},
{
MediaRange: mediarange.Create("text" , "x-markdown"),
Expected: "x-markdown",
},
{
MediaRange: mediarange.Create("video" , "3gpp2"),
Expected: "3gpp2",
},
{
MediaRange: mediarange.Create("video" , "ogg"),
Expected: "ogg",
},
{
MediaRange: mediarange.Create("video" , "mp2t"),
Expected: "mp2t",
},
{
MediaRange: mediarange.Create("video" , "mp4"),
Expected: "mp4",
},
{
MediaRange: mediarange.Create("video" , "mpeg"),
Expected: "mpeg",
},
{
MediaRange: mediarange.Create("video" , "webm"),
Expected: "webm",
},
{
MediaRange: mediarange.Create("video" , "x-msvideo"),
Expected: "x-msvideo",
},
{
MediaRange: mediarange.Create("application" , "ACTIVITY+JSON"),
Expected: "activity+json",
},
{
MediaRange: mediarange.Create("audio" , "MPEG"),
Expected: "mpeg",
},
{
MediaRange: mediarange.Create("font" , "TTF"),
Expected: "ttf",
},
{
MediaRange: mediarange.Create("image" , "PNG"),
Expected: "png",
},
{
MediaRange: mediarange.Create("text" , "HTML"),
Expected: "html",
},
{
MediaRange: mediarange.Create("video" , "OGG"),
Expected: "ogg",
},
{
MediaRange: mediarange.Create("xyz" , "BANANA"),
Expected: "banana",
},
{
MediaRange: mediarange.Create("*" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "apple"),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "BANANA"),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "Cherry"),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "gif"),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "html"),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "javascript"),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "json"),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "png"),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "webm"),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "xml"),
Expected: "*",
},
}
for testNumber, test := range tests {
actual := test.MediaRange.SubType()
expected := test.Expected
if expected != actual {
t.Errorf("For test #%d, the actual canonical-subtype is not what was expected.", testNumber)
t.Logf("MEDIA-RANGE: %#v", test.MediaRange)
t.Logf("EXPECTED: %q", expected)
t.Logf("ACTUAL: %q", actual)
continue
}
}
}

View File

@ -0,0 +1,434 @@
package mediarange_test
import (
"sourcecode.social/reiver/go-httpaccept/mediarange"
"testing"
)
func TestMediaRange_Type(t *testing.T) {
tests := []struct{
MediaRange mediarange.MediaRange
Expected string
}{
{
MediaRange: mediarange.Create("" , ""),
Expected: "*",
},
{
MediaRange: mediarange.Create("*" , "*"),
Expected: "*",
},
{
MediaRange: mediarange.Create("application" , ""),
Expected: "application",
},
{
MediaRange: mediarange.Create("audio" , ""),
Expected: "audio",
},
{
MediaRange: mediarange.Create("font" , ""),
Expected: "font",
},
{
MediaRange: mediarange.Create("image" , ""),
Expected: "image",
},
{
MediaRange: mediarange.Create("text" , ""),
Expected: "text",
},
{
MediaRange: mediarange.Create("video" , ""),
Expected: "video",
},
{
MediaRange: mediarange.Create("xyz" , ""),
Expected: "xyz",
},
{
MediaRange: mediarange.Create("application" , "*"),
Expected: "application",
},
{
MediaRange: mediarange.Create("audio" , "*"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("font" , "*"),
Expected: "font",
},
{
MediaRange: mediarange.Create("image" , "*"),
Expected: "image",
},
{
MediaRange: mediarange.Create("text" , ""),
Expected: "text",
},
{
MediaRange: mediarange.Create("video" , ""),
Expected: "video",
},
{
MediaRange: mediarange.Create("xyz" , ""),
Expected: "xyz",
},
{
MediaRange: mediarange.Create("Application" , "*"),
Expected: "application",
},
{
MediaRange: mediarange.Create("Audio" , "*"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("Font" , "*"),
Expected: "font",
},
{
MediaRange: mediarange.Create("Image" , "*"),
Expected: "image",
},
{
MediaRange: mediarange.Create("Text" , ""),
Expected: "text",
},
{
MediaRange: mediarange.Create("Video" , ""),
Expected: "video",
},
{
MediaRange: mediarange.Create("Xyz" , ""),
Expected: "xyz",
},
{
MediaRange: mediarange.Create("APPLICATION" , "*"),
Expected: "application",
},
{
MediaRange: mediarange.Create("AUDIO" , "*"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("FONT" , "*"),
Expected: "font",
},
{
MediaRange: mediarange.Create("IMAGE" , "*"),
Expected: "image",
},
{
MediaRange: mediarange.Create("TEXT" , ""),
Expected: "text",
},
{
MediaRange: mediarange.Create("VIDEO" , ""),
Expected: "video",
},
{
MediaRange: mediarange.Create("XYZ" , ""),
Expected: "xyz",
},
{
MediaRange: mediarange.Create("application" , "activity+json"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "epub+zip"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "gzip"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "java-archive"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "json"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "ld+json"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "pdf"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "msword"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "octet-stream"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "ogg"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "rtf"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "vnd.oasis.opendocument.spreadsheet"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "vnd.openxmlformats-officedocument.wordprocessingml.document"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "vnd.mozilla.xul+xml"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "vnd.ms-excel"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "x-7z-compressed"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "x-bzip"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "x-bzip2"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "x-cdf"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "x-csh"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "x-freearc"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "x-httpd-php"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "x-sh"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "x-tar"),
Expected: "application",
},
{
MediaRange: mediarange.Create("application" , "xhtml+xml"),
Expected: "application",
},
{
MediaRange: mediarange.Create("audio" , "aac"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("audio" , "midi"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("audio" , "mpeg"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("audio" , "ogg"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("audio" , "opus"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("audio" , "wav"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("audio" , "webm"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("audio" , "3gpp"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("audio" , "3gpp2"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("audio" , "x-midi"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("font" , "ttf"),
Expected: "font",
},
{
MediaRange: mediarange.Create("image" , "avif"),
Expected: "image",
},
{
MediaRange: mediarange.Create("image" , "bmp"),
Expected: "image",
},
{
MediaRange: mediarange.Create("image" , "gif"),
Expected: "image",
},
{
MediaRange: mediarange.Create("image" , "png"),
Expected: "image",
},
{
MediaRange: mediarange.Create("image" , "tiff"),
Expected: "image",
},
{
MediaRange: mediarange.Create("text" , "css"),
Expected: "text",
},
{
MediaRange: mediarange.Create("text" , "csv"),
Expected: "text",
},
{
MediaRange: mediarange.Create("text" , "html"),
Expected: "text",
},
{
MediaRange: mediarange.Create("text" , "javascript"),
Expected: "text",
},
{
MediaRange: mediarange.Create("text" , "markdown"),
Expected: "text",
},
{
MediaRange: mediarange.Create("text" , "plain"),
Expected: "text",
},
{
MediaRange: mediarange.Create("text" , "x-markdown"),
Expected: "text",
},
{
MediaRange: mediarange.Create("video" , "3gpp2"),
Expected: "video",
},
{
MediaRange: mediarange.Create("video" , "ogg"),
Expected: "video",
},
{
MediaRange: mediarange.Create("video" , "mp2t"),
Expected: "video",
},
{
MediaRange: mediarange.Create("video" , "mp4"),
Expected: "video",
},
{
MediaRange: mediarange.Create("video" , "mpeg"),
Expected: "video",
},
{
MediaRange: mediarange.Create("video" , "webm"),
Expected: "video",
},
{
MediaRange: mediarange.Create("video" , "x-msvideo"),
Expected: "video",
},
{
MediaRange: mediarange.Create("application" , "ACTIVITY+JSON"),
Expected: "application",
},
{
MediaRange: mediarange.Create("audio" , "MPEG"),
Expected: "audio",
},
{
MediaRange: mediarange.Create("font" , "TTF"),
Expected: "font",
},
{
MediaRange: mediarange.Create("image" , "PNG"),
Expected: "image",
},
{
MediaRange: mediarange.Create("text" , "HTML"),
Expected: "text",
},
{
MediaRange: mediarange.Create("video" , "OGG"),
Expected: "video",
},
{
MediaRange: mediarange.Create("xyz" , "BANANA"),
Expected: "xyz",
},
}
for testNumber, test := range tests {
actual := test.MediaRange.Type()
expected := test.Expected
if expected != actual {
t.Errorf("For test #%d, the actual canonical-type is not what was expected.", testNumber)
t.Logf("MEDIA-RANGEE: %#v", test.MediaRange)
t.Logf("EXPECTED: %q", expected)
t.Logf("ACTUAL: %q", actual)
continue
}
}
}