tag/id3v2_test.go
2015-05-03 09:58:40 +10:00

132 lines
2.5 KiB
Go

// Copyright 2015, David Howden
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package tag
import (
"bytes"
"reflect"
"testing"
)
func TestUnsynchroniser(t *testing.T) {
tests := []struct {
input []byte
output []byte
}{
{
input: []byte{},
output: []byte{},
},
{
input: []byte{0x00},
output: []byte{0x00},
},
{
input: []byte{0xFF},
output: []byte{0xFF},
},
{
input: []byte{0xFF, 0x00},
output: []byte{0xFF},
},
{
input: []byte{0xFF, 0x00, 0x00},
output: []byte{0xFF, 0x00},
},
{
input: []byte{0xFF, 0x00, 0x01},
output: []byte{0xFF, 0x01},
},
{
input: []byte{0xFF, 0x00, 0xFF, 0x00},
output: []byte{0xFF, 0xFF},
},
{
input: []byte{0xFF, 0x00, 0xFF, 0xFF, 0x00},
output: []byte{0xFF, 0xFF, 0xFF},
},
{
input: []byte{0x00, 0x01, 0x02},
output: []byte{0x00, 0x01, 0x02},
},
}
for ii, tt := range tests {
r := bytes.NewReader(tt.input)
ur := unsynchroniser{Reader: r}
got := make([]byte, len(tt.output))
n, err := ur.Read(got)
if n != len(got) || err != nil {
t.Errorf("[%d] got: n = %d, err = %v, expected: n = %d, err = nil", ii, n, err, len(got))
}
if !reflect.DeepEqual(got, tt.output) {
t.Errorf("[%d] got: %v, expected %v", ii, got, tt.output)
}
}
}
func TestUnsynchroniserSplitReads(t *testing.T) {
tests := []struct {
input []byte
output []byte
split []int
}{
{
input: []byte{0x00, 0xFF, 0x00},
output: []byte{0x00, 0xFF},
split: []int{1, 1},
},
{
input: []byte{0xFF, 0x00, 0x01},
output: []byte{0xFF, 0x01},
split: []int{1, 1},
},
{
input: []byte{0xFF, 0x00, 0x01, 0x02},
output: []byte{0xFF, 0x01, 0x02},
split: []int{1, 1, 1},
},
{
input: []byte{0xFF, 0x00, 0x01, 0x02},
output: []byte{0xFF, 0x01, 0x02},
split: []int{2, 1},
},
{
input: []byte{0xFF, 0x00, 0x01, 0x02},
output: []byte{0xFF, 0x01, 0x02},
split: []int{1, 2},
},
}
for ii, tt := range tests {
r := bytes.NewReader(tt.input)
ur := unsynchroniser{Reader: r}
var got []byte
for i, l := range tt.split {
chunk := make([]byte, l)
n, err := ur.Read(chunk)
if n != len(chunk) || err != nil {
t.Errorf("[%d : %d] got: n = %d, err = %v, expected: n = %d, err = nil", ii, i, n, err, l)
}
got = append(got, chunk...)
}
if !reflect.DeepEqual(got, tt.output) {
t.Errorf("[%d] got: %v, expected %v", ii, got, tt.output)
}
}
}