From 695222dff594a788828382a4ff385c0c355ebe6f Mon Sep 17 00:00:00 2001 From: Hraban Luyat Date: Thu, 9 Jul 2015 16:36:30 +0000 Subject: [PATCH] Test real Opus file --- stream_test.go | 47 ++++++++++++++++++++++++++++++++++++++++- testdata/speech_8.opus | Bin 0 -> 10941 bytes 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 testdata/speech_8.opus diff --git a/stream_test.go b/stream_test.go index f97089d..0654a52 100644 --- a/stream_test.go +++ b/stream_test.go @@ -5,20 +5,65 @@ package opus import ( + "bytes" + "fmt" "io" + "os" "strings" "testing" ) func TestStream(t *testing.T) { // Simple testing, no actual decoding - reader := strings.NewReader("hello") + reader := strings.NewReader("hello test test this is not a legal Opus stream") _, err := NewStream(reader) if err == nil { t.Fatalf("Expected error while initializing illegal opus stream") } } +func readStreamWav(stream *Stream) ([]byte, error) { + var buf bytes.Buffer + pcm := make([]int16, 1000) + for { + n, err := stream.Read(pcm) + switch err { + case io.EOF: + return buf.Bytes(), nil + case nil: + break + default: + return nil, err + } + if n == 0 { + return nil, fmt.Errorf("Nil-error Read() must not return 0") + } + for i := 0; i < n; i++ { + buf.WriteByte(byte(pcm[i] & 0xff)) + buf.WriteByte(byte(pcm[i] >> 8)) + } + } +} + +func TestFile(t *testing.T) { + // Simple testing, no actual decoding + reader, err := os.Open("testdata/speech_8.opus") + if err != nil { + t.Fatalf("Error while opening file: %v", err) + } + stream, err := NewStream(reader) + if err != nil { + t.Fatalf("Error while creating opus stream: %v", err) + } + wav, err := readStreamWav(stream) + if err != nil { + t.Fatalf("Error while decoding opus file: %v", err) + } + if len(wav) != 1036800 { + t.Fatalf("Unexpected length of WAV file: %d", len(wav)) + } +} + func TestCloser(t *testing.T) { /* TODO: test if stream.Close() also closes the underlying reader */ } diff --git a/testdata/speech_8.opus b/testdata/speech_8.opus new file mode 100644 index 0000000000000000000000000000000000000000..ec2764572a384326ce3a1b41662b3eb56ab0bcdc GIT binary patch literal 10941 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