further test coverage
This commit is contained in:
parent
5c836c4f70
commit
c612714efa
9
main.go
9
main.go
|
@ -13,9 +13,10 @@ const fname = "/home/rob/share/home-office/example.mp3"
|
||||||
type (
|
type (
|
||||||
AudioVersionId int
|
AudioVersionId int
|
||||||
Layer int
|
Layer int
|
||||||
header []byte
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Decoder struct{}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
AudioVersionMPEG25 AudioVersionId = iota
|
AudioVersionMPEG25 AudioVersionId = iota
|
||||||
AudioVersionReserved
|
AudioVersionReserved
|
||||||
|
@ -54,6 +55,8 @@ var (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type header []byte
|
||||||
|
|
||||||
func (h header) HasSyncWord() bool {
|
func (h header) HasSyncWord() bool {
|
||||||
return h[0] == 0xff && h[1]&0xe0 == 0xe0
|
return h[0] == 0xff && h[1]&0xe0 == 0xe0
|
||||||
}
|
}
|
||||||
|
@ -99,6 +102,9 @@ func (h header) PaddingBytes() int {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h header) IsValid() bool {
|
func (h header) IsValid() bool {
|
||||||
|
if len(h) < 4 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
if !h.HasSyncWord() {
|
if !h.HasSyncWord() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -149,7 +155,6 @@ func (h header) BitRate() int {
|
||||||
j = 3
|
j = 3
|
||||||
default:
|
default:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bitRates[j][h[2]>>4]
|
return bitRates[j][h[2]>>4]
|
||||||
|
|
94
main_test.go
94
main_test.go
|
@ -79,13 +79,49 @@ func TestLayer(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPaddingBytes(t *testing.T) {
|
func TestPaddingBytes(t *testing.T) {
|
||||||
bytes := []byte{0xff, 0xe0, 0x2, 0}
|
testCases := []struct {
|
||||||
h := header(bytes)
|
name string
|
||||||
assert.Equal(t, 1, h.PaddingBytes())
|
bytes []byte
|
||||||
|
expPadding int
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"MPEG1 Layer3 128kbps 44.1k, no padding",
|
||||||
|
[]byte{0xff, 0xfa, 0x90, 0},
|
||||||
|
0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG1 Layer3 128kbps 44.1k, padding",
|
||||||
|
[]byte{0xff, 0xfa, 0x92, 0},
|
||||||
|
1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG2 Layer1 144kbps 24k, no padding",
|
||||||
|
[]byte{0xff, 0xf6, 0x94, 0},
|
||||||
|
0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG2 Layer1 144kbps 24k, padding",
|
||||||
|
[]byte{0xff, 0xf6, 0x96, 0},
|
||||||
|
4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG25 Layer2 56kbps 8k, no padding",
|
||||||
|
[]byte{0xff, 0xe4, 0x78, 0},
|
||||||
|
0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG25 Layer2 56kbps 8k, padding",
|
||||||
|
[]byte{0xff, 0xe4, 0x7a, 0},
|
||||||
|
1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
bytes = []byte{0xff, 0xe0, 0x0, 0}
|
for _, tc := range testCases {
|
||||||
h = header(bytes)
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
assert.Equal(t, 0, h.PaddingBytes())
|
h := header(tc.bytes)
|
||||||
|
assert.Equal(t, tc.expPadding, h.PaddingBytes())
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestIsProtected(t *testing.T) {
|
func TestIsProtected(t *testing.T) {
|
||||||
|
@ -385,3 +421,49 @@ func TestSampleRate(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLen(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
bytes []byte
|
||||||
|
expLen int
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"MPEG1 Layer3 128kbps 44.1k, no padding",
|
||||||
|
[]byte{0xff, 0xfa, 0x90, 0},
|
||||||
|
417,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG1 Layer3 128kbps 44.1k, padding",
|
||||||
|
[]byte{0xff, 0xfa, 0x92, 0},
|
||||||
|
418,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG2 Layer1 144kbps 24k, no padding",
|
||||||
|
[]byte{0xff, 0xf6, 0x94, 0},
|
||||||
|
288,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG2 Layer1 144kbps 24k, padding",
|
||||||
|
[]byte{0xff, 0xf6, 0x96, 0},
|
||||||
|
292,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG25 Layer2 56kbps 8k, no padding",
|
||||||
|
[]byte{0xff, 0xe4, 0x78, 0},
|
||||||
|
1008,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MPEG25 Layer2 56kbps 8k, padding",
|
||||||
|
[]byte{0xff, 0xe4, 0x7a, 0},
|
||||||
|
1009,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
h := header(tc.bytes)
|
||||||
|
assert.Equal(t, tc.expLen, h.Len())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue