From 53cba69b1cdafbb169372c88b051876881c583ae Mon Sep 17 00:00:00 2001 From: Eddy Pedroni Date: Sat, 1 Jan 2022 16:34:53 +0100 Subject: Refactored launchpad tests to use real SoloTool class with player mock --- midi_launchpad_mini_unittest.py | 101 ++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 67 deletions(-) (limited to 'midi_launchpad_mini_unittest.py') diff --git a/midi_launchpad_mini_unittest.py b/midi_launchpad_mini_unittest.py index 4ae5480..4601c8d 100644 --- a/midi_launchpad_mini_unittest.py +++ b/midi_launchpad_mini_unittest.py @@ -1,6 +1,8 @@ import pytest from midi_controller_launchpad_mini import MidiController +from solo_tool import SoloTool +from player_mock import Player as PlayerMock class MidiWrapperMock: def __init__(self): @@ -23,62 +25,21 @@ class MidiWrapperMock: msg = Message("note_on", note=note, velocity=velocity, channel=channel) self.callback(msg) -class SoloToolMock: - STOPPED = 0 - PLAYING = 1 - PAUSED = 2 - - def __init__(self): - self.state = SoloToolMock.STOPPED - self.position = 0.0 - self.currentAbLimit = (0.0, 0.0) - self.currentLoadedAbLimitIndex = None - self.currentSong = None - - def play(self): - self.state = SoloToolMock.PLAYING - - def pause(self): - self.state = SoloToolMock.PAUSED - - def stop(self): - self.state = SoloToolMock.STOPPED - - def isPlaying(self): - return self.state == SoloToolMock.PLAYING - - def jumpToA(self): - self.position = self.currentAbLimit[0] - - def loadAbLimits(self, index): - self.currentLoadedAbLimitIndex = index - - def setSong(self, index): - self.currentSong = index - - def nextSong(self): - if self.currentSong is None: - self.currentSong = 0 - else: - self.currentSong += 1 - - def previousSong(self): - if self.currentSong is None: - self.currentSong = 0 - else: - self.currentSong = max(self.currentSong - 1, 0) +@pytest.fixture +def playerMock(): + return PlayerMock() @pytest.fixture -def soloToolMock(): - return SoloToolMock() +def soloTool(playerMock): + return SoloTool(playerMock) @pytest.fixture def midiWrapperMock(): return MidiWrapperMock() @pytest.fixture -def uut(soloToolMock, midiWrapperMock): - return MidiController(soloToolMock, midiWrapperMock) +def uut(soloTool, midiWrapperMock): + return MidiController(soloTool, midiWrapperMock) def test_connect(uut, midiWrapperMock): expectedDevice = "Launchpad Mini MIDI 1" @@ -86,57 +47,63 @@ def test_connect(uut, midiWrapperMock): assert midiWrapperMock.connectedDevice == expectedDevice -def test_startStopAndPauseButtons(uut, midiWrapperMock, soloToolMock): +def test_startStopAndPauseButtons(uut, midiWrapperMock, playerMock): playPauseButton = 112 stopButton = 96 uut.connect() - assert soloToolMock.state == SoloToolMock.STOPPED + assert playerMock.state == PlayerMock.STOPPED midiWrapperMock.simulateInput(playPauseButton) - assert soloToolMock.state == SoloToolMock.PLAYING + assert playerMock.state == PlayerMock.PLAYING midiWrapperMock.simulateInput(stopButton) - assert soloToolMock.state == SoloToolMock.STOPPED + assert playerMock.state == PlayerMock.STOPPED midiWrapperMock.simulateInput(playPauseButton) midiWrapperMock.simulateInput(playPauseButton) - assert soloToolMock.state == SoloToolMock.PAUSED + assert playerMock.state == PlayerMock.PAUSED midiWrapperMock.simulateInput(playPauseButton) - assert soloToolMock.state == SoloToolMock.PLAYING + assert playerMock.state == PlayerMock.PLAYING midiWrapperMock.simulateInput(playPauseButton) midiWrapperMock.simulateInput(stopButton) - assert soloToolMock.state == SoloToolMock.STOPPED + assert playerMock.state == PlayerMock.STOPPED -def test_jumpToAButton(uut, midiWrapperMock, soloToolMock): +def test_jumpToAButton(uut, midiWrapperMock, soloTool, playerMock): ab = (0.5, 0.6) uut.connect() - soloToolMock.currentAbLimit = (ab[0], ab[1]) - assert soloToolMock.position == 0.0 + soloTool.setAbLimits(ab[0], ab[1]) + assert playerMock.position == 0.0 midiWrapperMock.simulateInput(101) - assert soloToolMock.position == ab[0] - -def test_previousAndNextSongButtons(uut, midiWrapperMock, soloToolMock): + assert playerMock.position == ab[0] + +def test_previousAndNextSongButtons(uut, midiWrapperMock, soloTool, playerMock): + songs = [ + "test.flac", + "test.mp3" + ] + for s in songs: + soloTool.addSong(s) uut.connect() - assert soloToolMock.currentSong == None + assert playerMock.currentSong == None midiWrapperMock.simulateInput(119) - assert soloToolMock.currentSong == 0 + assert playerMock.currentSong == songs[0] midiWrapperMock.simulateInput(119) - assert soloToolMock.currentSong == 1 + assert playerMock.currentSong == songs[1] midiWrapperMock.simulateInput(118) - assert soloToolMock.currentSong == 0 + assert playerMock.currentSong == songs[0] midiWrapperMock.simulateInput(118) - assert soloToolMock.currentSong == 0 + assert playerMock.currentSong == songs[0] -def test_unprogrammedButton(uut, midiWrapperMock, soloToolMock): +def test_unprogrammedButton(uut, midiWrapperMock): unusedButton = 48 uut.connect() -- cgit v1.2.3