-
Notifications
You must be signed in to change notification settings - Fork 1
/
flac_test.go
123 lines (102 loc) · 3.39 KB
/
flac_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package audiometa
import (
"errors"
"testing"
"github.com/gcottom/audiometa/v2/flac"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
func TestExtractFLACCommentErrorCases(t *testing.T) {
// Test case where flac.ParseMetadata returns an error
// Mock the input io.Reader to return an error when passed to flac.ParseMetadata
input := &mockReader{}
_, _, err := extractFLACComment(input)
assert.Error(t, err)
}
func TestRemoveFLACMetaBlock(t *testing.T) {
// Test case where s is out of bounds
// Create a slice with some elements
slice := []*flac.MetaDataBlock{{}, {}, {}}
// Call removeFLACMetaBlock with an index greater than the length of the slice
result := removeFLACMetaBlock(slice, 1)
assert.Len(t, result, 2)
// Add more test cases as needed
}
func TestFLACSaveErrorCases(t *testing.T) {
// Test case where needsTemp is true and creating temp file fails
// Mock the input io.Reader and io.Writer
input := &mockReader{}
output := &mockWriter{}
// Set needsTemp to true
needsTemp := true
err := flacSave(input, output, []*flac.MetaDataBlock{}, needsTemp)
assert.Error(t, err)
// Add more test cases as needed
}
func TestFLACSave(t *testing.T) {
t.Run("Error Writing FLAC Header", func(t *testing.T) {
mockReader := new(mockReader2)
mockWriter := new(mockWriter2)
metaBlocks := []*flac.MetaDataBlock{
// Add mock MetaDataBlocks as needed
}
mockWriter.On("Write", mock.Anything).Return(0, errors.New("write error"))
err := flacSave(mockReader, mockWriter, metaBlocks, false)
assert.Error(t, err)
assert.Equal(t, "write error", err.Error())
mockWriter.AssertExpectations(t)
})
t.Run("Error Writing MetaDataBlock", func(t *testing.T) {
mockReader := new(mockReader2)
mockWriter := new(mockWriter2)
metaBlocks := []*flac.MetaDataBlock{
// Add mock MetaDataBlocks as needed
}
mockReader.On("Read", mock.Anything).Return(8, nil)
mockWriter.On("Write", mock.Anything).Return(0, errors.New("write error"))
err := flacSave(mockReader, mockWriter, metaBlocks, false)
assert.Error(t, err)
assert.Equal(t, "write error", err.Error())
mockWriter.AssertExpectations(t)
})
t.Run("Error Copying Data", func(t *testing.T) {
mockReader := new(mockReader2)
mockWriter := new(mockWriter2)
metaBlocks := []*flac.MetaDataBlock{
// Add mock MetaDataBlocks as needed
}
mockWriter.On("Write", mock.Anything).Return(0, nil)
mockReader.On("Read", mock.Anything).Return(0, errors.New("read error"))
err := flacSave(mockReader, mockWriter, metaBlocks, false)
assert.Error(t, err)
assert.Equal(t, "read error", err.Error())
mockWriter.AssertExpectations(t)
})
}
// Helper structs for mocking io.Reader and io.Writer
type mockReader struct{}
func (m *mockReader) Read(p []byte) (n int, err error) {
return 0, errors.New("error while mock reading")
}
type mockWriter struct{}
func (m *mockWriter) Write(p []byte) (n int, err error) {
return 0, errors.New("mock error writing to writer")
}
type mockReader2 struct {
mock.Mock
}
func (m *mockReader2) Read(p []byte) (n int, err error) {
args := m.Called(p)
return args.Int(0), args.Error(1)
}
type mockWriter2 struct {
mock.Mock
}
func (m *mockWriter2) Write(p []byte) (n int, err error) {
args := m.Called(p)
return args.Int(0), args.Error(1)
}
func (m *mockWriter2) Seek(offset int64, whence int) (int64, error) {
args := m.Called(offset, whence)
return args.Get(0).(int64), args.Error(1)
}