diff options
-rw-r--r-- | diagram.drawio | 2 | ||||
-rw-r--r-- | playlist.py | 4 | ||||
-rw-r--r-- | playlist_unittest.py | 53 | ||||
-rw-r--r-- | solo_tool.py | 5 | ||||
-rw-r--r-- | solo_tool_integrationtest.py | 9 |
5 files changed, 47 insertions, 26 deletions
diff --git a/diagram.drawio b/diagram.drawio index 3fc9e3f..2600d4c 100644 --- a/diagram.drawio +++ b/diagram.drawio @@ -1 +1 @@ -<mxfile host="app.diagrams.net" modified="2021-12-21T17:41:54.343Z" agent="5.0 (X11)" etag="0TS7O8wDBKDC3BJ4ppdc" version="16.0.0" type="device"><diagram id="g-wcGVps3MkI6_XAwNEs" name="Page-1">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</diagram></mxfile>
\ No newline at end of file +<mxfile host="app.diagrams.net" modified="2021-12-21T19:25:27.462Z" agent="5.0 (X11)" etag="_IciWg4MnHRTNr6CcxUi" version="16.0.0" type="device"><diagram id="g-wcGVps3MkI6_XAwNEs" name="Page-1">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</diagram></mxfile>
\ No newline at end of file diff --git a/playlist.py b/playlist.py index e5a4daf..5c52774 100644 --- a/playlist.py +++ b/playlist.py @@ -1,10 +1,10 @@ import logging class Playlist: - def __init__(self, player): + def __init__(self, callback): self._songList = list() self._currentSong = None - self._setSongCallback = player.setCurrentSong + self._setSongCallback = callback def addSong(self, path): self._songList.append(path) diff --git a/playlist_unittest.py b/playlist_unittest.py index 06785cc..ff5a79c 100644 --- a/playlist_unittest.py +++ b/playlist_unittest.py @@ -1,67 +1,76 @@ from playlist import Playlist -class MockPlayer: - def __init__(self): - self.songSetByCallback = None - - def setCurrentSong(self, path): - self.songSetByCallback = path - def test_addAndSelectOneSong(): songAddedByUser = "/path/to/song" - mockPlayer = MockPlayer() + songSetByCallback = None + + def testCallback(song): + nonlocal songSetByCallback + songSetByCallback = song - uut = Playlist(mockPlayer) + uut = Playlist(testCallback) uut.addSong(songAddedByUser) uut.setCurrentSong(0) - assert songAddedByUser == mockPlayer.songSetByCallback + assert songAddedByUser == songSetByCallback assert uut.getCurrentSong() == songAddedByUser assert uut.getSongs() == [songAddedByUser] def test_addTwoSongsAndSelectBoth(): songAddedByUser = ["/path/to/song", "/path/to/second/song"] - mockPlayer = MockPlayer() + songSetByCallback = None - uut = Playlist(mockPlayer) + def testCallback(song): + nonlocal songSetByCallback + songSetByCallback = song + + uut = Playlist(testCallback) uut.addSong(songAddedByUser[0]) uut.addSong(songAddedByUser[1]) assert uut.getSongs() == songAddedByUser uut.setCurrentSong(0) - assert songAddedByUser[0] == mockPlayer.songSetByCallback + assert songAddedByUser[0] == songSetByCallback assert uut.getCurrentSong() == songAddedByUser[0] uut.setCurrentSong(1) - assert songAddedByUser[1] == mockPlayer.songSetByCallback + assert songAddedByUser[1] == songSetByCallback assert uut.getCurrentSong() == songAddedByUser[1] def test_firstAddedSongIsNotSelected(): songAddedByUser = "/path/to/song" - mockPlayer = MockPlayer() + songSetByCallback = None + + def testCallback(song): + nonlocal songSetByCallback + songSetByCallback = song - uut = Playlist(mockPlayer) + uut = Playlist(testCallback) uut.addSong(songAddedByUser) - assert mockPlayer.songSetByCallback == None + assert songSetByCallback == None assert uut.getCurrentSong() == None assert uut.getSongs() == [songAddedByUser] def test_invalidSongSelection(): songAddedByUser = "/path/to/song" - mockPlayer = MockPlayer() + songSetByCallback = None + + def testCallback(song): + nonlocal songSetByCallback + songSetByCallback = song - uut = Playlist(mockPlayer) - assert mockPlayer.songSetByCallback == None + uut = Playlist(testCallback) + assert songSetByCallback == None assert uut.getCurrentSong() == None uut.setCurrentSong(10) - assert mockPlayer.songSetByCallback == None + assert songSetByCallback == None assert uut.getCurrentSong() == None uut.addSong(songAddedByUser) uut.setCurrentSong(10) - assert mockPlayer.songSetByCallback == None + assert songSetByCallback == None assert uut.getCurrentSong() == None assert uut.getSongs() == [songAddedByUser] diff --git a/solo_tool.py b/solo_tool.py index da1a402..b1edba6 100644 --- a/solo_tool.py +++ b/solo_tool.py @@ -6,10 +6,13 @@ from player_vlc import Player class SoloTool: def __init__(self, player=None): self._player = Player() if player is None else player - self._playlist = Playlist(self._player) + self._playlist = Playlist(self._playlistCallback) self._abController = ABController() self._sessionManager = SessionManager(self._playlist, self._abController) + def _playlistCallback(self, path): + self._player.setCurrentSong("") + def addSong(self, path): self._sessionManager.addSong(path) diff --git a/solo_tool_integrationtest.py b/solo_tool_integrationtest.py index 19bb406..561778b 100644 --- a/solo_tool_integrationtest.py +++ b/solo_tool_integrationtest.py @@ -43,6 +43,15 @@ class MockPlayer(): def setCurrentSong(self, path): self.currentSong = path +def test_addAndSetSong(): + song = "/path/to/song" + mockPlayer = MockPlayer() + + uut = SoloTool(mockPlayer) + + uut.addSong(song) + uut.setSong(0) + def test_playerControls(): mockPlayer = MockPlayer() uut = SoloTool(mockPlayer) |