goflac/libflac_test.go

440 lines
7.8 KiB
Go
Raw Normal View History

2016-08-12 08:20:15 +00:00
// Copyright 2015-2016 Cocoon Labs Ltd.
2015-03-05 11:09:17 +00:00
//
// See LICENSE file for terms and conditions.
package libflac
import (
"io"
"os"
"testing"
2016-02-18 17:17:58 +00:00
"github.com/cocoonlife/testify/assert"
2015-03-05 11:09:17 +00:00
)
func TestDecode(t *testing.T) {
a := assert.New(t)
2015-05-12 15:48:22 +00:00
d, err := NewDecoder("testdata/nonexistent.flac")
2015-03-05 11:09:17 +00:00
a.Equal(d, (*Decoder)(nil), "decoder is nil")
a.NotNil(err, "err is not nil")
2015-03-05 11:09:17 +00:00
2015-05-12 15:48:22 +00:00
d, err = NewDecoder("testdata/sine24-00.flac")
2015-03-05 11:09:17 +00:00
a.Equal(err, nil, "err is nil")
a.Equal(d.Channels, 1, "channels is 1")
a.Equal(d.Depth, 24, "depth is 24")
a.Equal(d.Rate, 48000, "depth is 48000")
samples := 0
f, err := d.ReadFrame()
a.Equal(err, nil, "err is nil")
a.Equal(f.Channels, 1, "channels is 1")
a.Equal(f.Depth, 24, "depth is 24")
a.Equal(f.Rate, 48000, "depth is 48000")
samples = samples + len(f.Buffer)
for {
f, err := d.ReadFrame()
2015-03-12 14:17:52 +00:00
if err == nil || err == io.EOF {
if f != nil {
2015-03-05 11:09:17 +00:00
samples = samples + len(f.Buffer)
}
} else {
a.Equal(err, nil, "error reported")
break
}
2015-03-12 14:17:52 +00:00
if err == io.EOF {
2015-03-05 11:09:17 +00:00
break
}
}
a.Equal(samples, 200000, "all samples read")
d.Close()
}
2022-03-05 09:34:19 +00:00
func TestDecodeOgg(t *testing.T) {
a := assert.New(t)
d, err := NewDecoderOgg("testdata/nonexistent.ogg")
a.Equal(d, (*Decoder)(nil), "decoder is nil")
a.NotNil(err, "err is not nil")
d, err = NewDecoderOgg("testdata/sine24-00.ogg")
a.Equal(err, nil, "err is nil")
a.Equal(d.Channels, 1, "channels is 1")
a.Equal(d.Depth, 24, "depth is 24")
a.Equal(d.Rate, 48000, "depth is 48000")
samples := 0
f, err := d.ReadFrame()
a.Equal(err, nil, "err is nil")
a.Equal(f.Channels, 1, "channels is 1")
a.Equal(f.Depth, 24, "depth is 24")
a.Equal(f.Rate, 48000, "depth is 48000")
samples = samples + len(f.Buffer)
for {
f, err := d.ReadFrame()
if err == nil || err == io.EOF {
if f != nil {
samples = samples + len(f.Buffer)
}
} else {
a.Equal(err, nil, "error reported")
break
}
if err == io.EOF {
break
}
}
a.Equal(samples, 200000, "all samples read")
d.Close()
}
func TestDecodeReader(t *testing.T) {
a := assert.New(t)
2015-05-12 15:48:22 +00:00
reader, _ := os.Open("testdata/nonexistent.flac")
d, err := NewDecoderReader(reader)
a.Equal(d, (*Decoder)(nil), "decoder is nil")
a.Error(err)
2015-05-12 15:48:22 +00:00
reader, _ = os.Open("testdata/sine24-00.flac")
d, err = NewDecoderReader(reader)
a.Equal(err, nil, "err is nil")
a.Equal(d.Channels, 1, "channels is 1")
a.Equal(d.Depth, 24, "depth is 24")
a.Equal(d.Rate, 48000, "depth is 48000")
samples := 0
f, err := d.ReadFrame()
a.Equal(err, nil, "err is nil")
a.Equal(f.Channels, 1, "channels is 1")
a.Equal(f.Depth, 24, "depth is 24")
a.Equal(f.Rate, 48000, "depth is 48000")
samples = samples + len(f.Buffer)
for {
f, err := d.ReadFrame()
if err == nil || err == io.EOF {
if f != nil {
samples = samples + len(f.Buffer)
}
} else {
a.Equal(err, nil, "error reported")
break
}
if err == io.EOF {
break
}
}
a.Equal(samples, 200000, "all samples read")
d.Close()
}
2022-03-05 09:34:19 +00:00
func TestDecodeReaderOgg(t *testing.T) {
a := assert.New(t)
reader, _ := os.Open("testdata/nonexistent.ogg")
d, err := NewDecoderReaderOgg(reader)
a.Equal(d, (*Decoder)(nil), "decoder is nil")
a.Error(err)
reader, _ = os.Open("testdata/sine24-00.ogg")
d, err = NewDecoderReaderOgg(reader)
a.Equal(err, nil, "err is nil")
a.Equal(d.Channels, 1, "channels is 1")
a.Equal(d.Depth, 24, "depth is 24")
a.Equal(d.Rate, 48000, "depth is 48000")
samples := 0
f, err := d.ReadFrame()
a.Equal(err, nil, "err is nil")
a.Equal(f.Channels, 1, "channels is 1")
a.Equal(f.Depth, 24, "depth is 24")
a.Equal(f.Rate, 48000, "depth is 48000")
samples = samples + len(f.Buffer)
for {
f, err := d.ReadFrame()
if err == nil || err == io.EOF {
if f != nil {
samples = samples + len(f.Buffer)
}
} else {
a.Equal(err, nil, "error reported")
break
}
if err == io.EOF {
break
}
}
a.Equal(samples, 200000, "all samples read")
d.Close()
}
2015-03-05 11:09:17 +00:00
func TestEncode(t *testing.T) {
a := assert.New(t)
e, err := NewEncoder("not-existdir/foo.flac", 2, 24, 48000)
a.Equal(e, (*Encoder)(nil), "encoder is nil")
a.NotNil(err, "err is not nil")
2015-05-12 15:48:22 +00:00
fileName := "testdata/test.flac"
2015-03-05 11:09:17 +00:00
e, err = NewEncoder(fileName, 2, 24, 48000)
2022-04-17 18:02:27 +00:00
a.Equal(err, nil, "err is nil")
f := Frame{Channels: 1, Depth: 24, Rate: 48000}
err = e.WriteFrame(f)
a.Error(err, "channels mismatch")
f.Channels = 2
f.Buffer = make([]int32, 2*100)
err = e.WriteFrame(f)
a.Equal(err, nil, "frame encoded")
e.Close()
os.Remove(fileName)
}
func TestEncodeOgg(t *testing.T) {
a := assert.New(t)
e, err := NewEncoder("not-existdir/foo.ogg", 2, 24, 48000)
a.Equal(e, (*Encoder)(nil), "encoder is nil")
a.NotNil(err, "err is not nil")
fileName := "testdata/test.ogg"
e, err = NewEncoder(fileName, 2, 24, 48000)
2015-03-05 11:09:17 +00:00
a.Equal(err, nil, "err is nil")
f := Frame{Channels: 1, Depth: 24, Rate: 48000}
err = e.WriteFrame(f)
a.Error(err, "channels mismatch")
f.Channels = 2
2015-03-12 14:17:52 +00:00
f.Buffer = make([]int32, 2*100)
2015-03-05 11:09:17 +00:00
err = e.WriteFrame(f)
a.Equal(err, nil, "frame encoded")
e.Close()
os.Remove(fileName)
}
func TestRoundTrip(t *testing.T) {
a := assert.New(t)
2015-05-12 15:48:22 +00:00
inputFile := "testdata/sine24-00.flac"
outputFile := "testdata/test.flac"
2015-03-05 11:09:17 +00:00
d, err := NewDecoder(inputFile)
a.Equal(err, nil, "err is nil")
e, err := NewEncoder(outputFile, d.Channels, d.Depth, d.Rate)
samples := 0
for {
f, err := d.ReadFrame()
2015-03-12 14:17:52 +00:00
if err == nil || err == io.EOF {
if f != nil {
2015-03-05 11:09:17 +00:00
_ = e.WriteFrame(*f)
samples = samples + len(f.Buffer)
}
} else {
a.Equal(err, nil, "error reported")
break
}
2015-03-12 14:17:52 +00:00
if err == io.EOF {
2015-03-05 11:09:17 +00:00
break
}
}
a.Equal(samples, 200000, "all samples read")
d.Close()
e.Close()
os.Remove(outputFile)
}
func TestRoundTripStereo(t *testing.T) {
a := assert.New(t)
2015-05-12 15:48:22 +00:00
inputFile := "testdata/sine16-12.flac"
outputFile := "testdata/test.flac"
d, err := NewDecoder(inputFile)
a.Equal(err, nil, "err is nil")
e, err := NewEncoder(outputFile, d.Channels, d.Depth, d.Rate)
samples := 0
for {
f, err := d.ReadFrame()
2015-03-12 14:17:52 +00:00
if err == nil || err == io.EOF {
if f != nil {
_ = e.WriteFrame(*f)
samples = samples + len(f.Buffer)
}
} else {
a.Equal(err, nil, "error reported")
break
}
2015-03-12 14:17:52 +00:00
if err == io.EOF {
break
}
}
a.Equal(samples, 400000, "all samples read")
d.Close()
e.Close()
os.Remove(outputFile)
}
func TestRoundTripReaderWriter(t *testing.T) {
a := assert.New(t)
2015-05-12 15:48:22 +00:00
inputFile := "testdata/sine24-00.flac"
outputFile := "testdata/test.flac"
reader, _ := os.Open(inputFile)
d, err := NewDecoderReader(reader)
a.Equal(err, nil, "err is nil")
writer, _ := os.Create(outputFile)
e, err := NewEncoderWriter(writer, d.Channels, d.Depth, d.Rate, 8, true, 0)
samples := 0
for {
f, err := d.ReadFrame()
if err == nil || err == io.EOF {
if f != nil {
_ = e.WriteFrame(*f)
samples = samples + len(f.Buffer)
}
} else {
a.Equal(err, nil, "error reported")
break
}
if err == io.EOF {
break
}
}
a.Equal(samples, 200000, "all samples read")
d.Close()
e.Close()
os.Remove(outputFile)
}
func TestRoundTripReaderWriterSeeker(t *testing.T) {
a := assert.New(t)
inputFile := "testdata/sine24-00.flac"
outputFile := "testdata/test-seek.flac"
reader, _ := os.Open(inputFile)
d, err := NewDecoderReader(reader)
a.Equal(err, nil, "err is nil")
writer, _ := os.Create(outputFile)
e, err := NewEncoderWriteSeeker(writer, d.Channels, d.Depth, d.Rate, 8, false, 0)
samples := 0
for {
f, err := d.ReadFrame()
if err == nil || err == io.EOF {
if f != nil {
_ = e.WriteFrame(*f)
samples = samples + len(f.Buffer)
}
} else {
a.Equal(err, nil, "error reported")
break
}
if err == io.EOF {
break
}
}
a.Equal(samples, 200000, "all samples read")
d.Close()
e.Close()
os.Remove(outputFile)
}
2022-05-15 17:22:02 +00:00
func TestVersion(t *testing.T) {
t.Logf("version: %s", Version())
}
func TestVendor(t *testing.T) {
t.Logf("vendor: %s", Vendor())
}