initial commits
commit
76045c518f
|
@ -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)
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue