Skip to content

Commit 08d12ba

Browse files
Fix test_audioflinger.py
1 parent 3a5f7ca commit 08d12ba

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

tests/test_audioflinger.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,16 @@ def setUp(self):
3131
self.buzzer = MockPWM(MockPin(46))
3232
self.i2s_pins = {'sck': 2, 'ws': 47, 'sd': 16}
3333

34-
# Reset volume to default before each test
35-
AudioFlinger.set_volume(70)
34+
# Reset singleton instance for each test
35+
AudioFlinger._instance = None
3636

3737
AudioFlinger(
3838
i2s_pins=self.i2s_pins,
3939
buzzer_instance=self.buzzer
4040
)
41+
42+
# Reset volume to default after creating instance
43+
AudioFlinger.set_volume(70)
4144

4245
def tearDown(self):
4346
"""Clean up after each test."""
@@ -52,20 +55,24 @@ def test_initialization(self):
5255
def test_has_i2s(self):
5356
"""Test has_i2s() returns correct value."""
5457
# With I2S configured
58+
AudioFlinger._instance = None
5559
AudioFlinger(i2s_pins=self.i2s_pins, buzzer_instance=None)
5660
self.assertTrue(AudioFlinger.has_i2s())
5761

5862
# Without I2S configured
63+
AudioFlinger._instance = None
5964
AudioFlinger(i2s_pins=None, buzzer_instance=self.buzzer)
6065
self.assertFalse(AudioFlinger.has_i2s())
6166

6267
def test_has_buzzer(self):
6368
"""Test has_buzzer() returns correct value."""
6469
# With buzzer configured
70+
AudioFlinger._instance = None
6571
AudioFlinger(i2s_pins=None, buzzer_instance=self.buzzer)
6672
self.assertTrue(AudioFlinger.has_buzzer())
6773

6874
# Without buzzer configured
75+
AudioFlinger._instance = None
6976
AudioFlinger(i2s_pins=self.i2s_pins, buzzer_instance=None)
7077
self.assertFalse(AudioFlinger.has_buzzer())
7178

@@ -95,6 +102,7 @@ def test_volume_control(self):
95102
def test_no_hardware_rejects_playback(self):
96103
"""Test that no hardware rejects all playback requests."""
97104
# Re-initialize with no hardware
105+
AudioFlinger._instance = None
98106
AudioFlinger(i2s_pins=None, buzzer_instance=None)
99107

100108
# WAV should be rejected (no I2S)
@@ -108,6 +116,7 @@ def test_no_hardware_rejects_playback(self):
108116
def test_i2s_only_rejects_rtttl(self):
109117
"""Test that I2S-only config rejects buzzer playback."""
110118
# Re-initialize with I2S only
119+
AudioFlinger._instance = None
111120
AudioFlinger(i2s_pins=self.i2s_pins, buzzer_instance=None)
112121

113122
# RTTTL should be rejected (no buzzer)
@@ -117,6 +126,7 @@ def test_i2s_only_rejects_rtttl(self):
117126
def test_buzzer_only_rejects_wav(self):
118127
"""Test that buzzer-only config rejects I2S playback."""
119128
# Re-initialize with buzzer only
129+
AudioFlinger._instance = None
120130
AudioFlinger(i2s_pins=None, buzzer_instance=self.buzzer)
121131

122132
# WAV should be rejected (no I2S)
@@ -125,6 +135,9 @@ def test_buzzer_only_rejects_wav(self):
125135

126136
def test_is_playing_initially_false(self):
127137
"""Test that is_playing() returns False initially."""
138+
# Reset to ensure clean state
139+
AudioFlinger._instance = None
140+
AudioFlinger(i2s_pins=self.i2s_pins, buzzer_instance=self.buzzer)
128141
self.assertFalse(AudioFlinger.is_playing())
129142

130143
def test_stop_with_no_playback(self):
@@ -157,32 +170,36 @@ def setUp(self):
157170
# I2S pins without microphone input
158171
self.i2s_pins_no_mic = {'sck': 2, 'ws': 47, 'sd': 16}
159172

160-
# Reset state
161-
af = AudioFlinger.get()
162-
af._current_recording = None
163-
AudioFlinger.set_volume(70)
173+
# Reset singleton instance for each test
174+
AudioFlinger._instance = None
164175

165176
AudioFlinger(
166177
i2s_pins=self.i2s_pins_with_mic,
167178
buzzer_instance=self.buzzer
168179
)
180+
181+
# Reset volume to default after creating instance
182+
AudioFlinger.set_volume(70)
169183

170184
def tearDown(self):
171185
"""Clean up after each test."""
172186
AudioFlinger.stop()
173187

174188
def test_has_microphone_with_sd_in(self):
175189
"""Test has_microphone() returns True when sd_in pin is configured."""
190+
AudioFlinger._instance = None
176191
AudioFlinger(i2s_pins=self.i2s_pins_with_mic, buzzer_instance=None)
177192
self.assertTrue(AudioFlinger.has_microphone())
178193

179194
def test_has_microphone_without_sd_in(self):
180195
"""Test has_microphone() returns False when sd_in pin is not configured."""
196+
AudioFlinger._instance = None
181197
AudioFlinger(i2s_pins=self.i2s_pins_no_mic, buzzer_instance=None)
182198
self.assertFalse(AudioFlinger.has_microphone())
183199

184200
def test_has_microphone_no_i2s(self):
185201
"""Test has_microphone() returns False when no I2S is configured."""
202+
AudioFlinger._instance = None
186203
AudioFlinger(i2s_pins=None, buzzer_instance=self.buzzer)
187204
self.assertFalse(AudioFlinger.has_microphone())
188205

@@ -192,11 +209,13 @@ def test_is_recording_initially_false(self):
192209

193210
def test_record_wav_no_microphone(self):
194211
"""Test that record_wav() fails when no microphone is configured."""
212+
AudioFlinger._instance = None
195213
AudioFlinger(i2s_pins=self.i2s_pins_no_mic, buzzer_instance=None)
196214
result = AudioFlinger.record_wav("test.wav")
197215
self.assertFalse(result, "record_wav() fails when no microphone is configured")
198216

199217
def test_record_wav_no_i2s(self):
218+
AudioFlinger._instance = None
200219
AudioFlinger(i2s_pins=None, buzzer_instance=self.buzzer)
201220
result = AudioFlinger.record_wav("test.wav")
202221
self.assertFalse(result, "record_wav() should fail when no I2S is configured")

0 commit comments

Comments
 (0)