You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.5 KiB
102 lines
2.5 KiB
package v2 |
|
|
|
import ( |
|
"os" |
|
"path/filepath" |
|
"testing" |
|
|
|
"github.com/Unbewohnte/id3ed/util" |
|
) |
|
|
|
func TestReadNextFrame(t *testing.T) { |
|
f, err := os.Open(filepath.Join(TESTDATAPATH, "testreadv2.mp3")) |
|
if err != nil { |
|
t.Errorf("%s", err) |
|
} |
|
|
|
header, err := readHeader(f) |
|
if err != nil { |
|
t.Errorf("%s", err) |
|
} |
|
|
|
firstFrame, _, err := readNextFrame(f, header) |
|
if err != nil { |
|
t.Errorf("ReadFrame failed: %s", err) |
|
} |
|
|
|
if firstFrame.Header.ID != "TRCK" { |
|
t.Errorf("GetFrame failed: expected ID %s; got %s", |
|
"TRCK", firstFrame.Header.ID) |
|
} |
|
|
|
if firstFrame.Header.Flags.Encrypted != false { |
|
t.Errorf("ReadFrame failed: expected compressed flag to be %v; got %v", |
|
false, firstFrame.Header.Flags.Encrypted) |
|
} |
|
|
|
secondFrame, _, err := readNextFrame(f, header) |
|
if err != nil { |
|
t.Errorf("ReadFrame failed: %s", err) |
|
} |
|
|
|
if secondFrame.Header.ID != "TDRC" { |
|
t.Errorf("ReadFrame failed: expected ID %s; got %s", |
|
"TDRC", secondFrame.Header.ID) |
|
} |
|
|
|
if util.ToStringLossy(secondFrame.Contents) != "2006" { |
|
t.Errorf("ReadFrame failed: expected contents to be %s; got %s", |
|
"2006", secondFrame.Contents) |
|
} |
|
} |
|
|
|
func TestFrameFlagsToBytes(t *testing.T) { |
|
testFlags := FrameFlags{ |
|
TagAlterPreservation: true, |
|
ReadOnly: true, |
|
} |
|
|
|
versions := []string{V2_2, V2_3, V2_4} |
|
|
|
for _, version := range versions { |
|
flagBytes := frameFlagsToBytes(testFlags, version) |
|
if version == V2_2 && flagBytes != nil { |
|
t.Errorf("frameFlagsToBytes failed: V2_2, expected flagbytes to be nil; got %v", flagBytes) |
|
} |
|
if version != V2_2 && len(flagBytes) != 2 { |
|
t.Errorf("frameFlagsToBytes failed: expected flagbytes to be len of 2; got %v", len(flagBytes)) |
|
} |
|
} |
|
} |
|
|
|
func TestFrameToBytes(t *testing.T) { |
|
testframe := Frame{ |
|
Header: FrameHeader{ |
|
ID: "TEST", |
|
Flags: FrameFlags{}, // all false |
|
Size: 4, |
|
}, |
|
Contents: []byte{util.EncodingUTF8, 60, 60, 60}, // 60 == < |
|
} |
|
|
|
frameBytes := testframe.toBytes(V2_4) |
|
|
|
// t.Errorf("%+v", frameBytes) |
|
// 84 69 83 84 0 0 0 4 0 0 3 60 60 60 |
|
|
|
// 84 69 83 84 - id (4) |
|
// 0 0 - flags (2) |
|
// 0 4 0 0 - size (4) |
|
// header - 4 + 4 + 2 = 10 bytes (success) |
|
// 3 60 60 60 - contents |
|
|
|
if len(frameBytes)-int(testframe.Header.Size) != HEADERSIZE { |
|
t.Errorf("FrameToBytes failed: expected header size to be %d; got %d", |
|
HEADERSIZE, len(frameBytes)-int(testframe.Header.Size)) |
|
} |
|
|
|
if util.DecodeText(frameBytes[10:]) != "<<<" { |
|
t.Errorf("FrameToBytes failed: expected contents to be %v; got %v", |
|
testframe.Contents, frameBytes[10:]) |
|
} |
|
}
|
|
|