diff options
Diffstat (limited to 'solo-tool-project/test')
-rw-r--r-- | solo-tool-project/test/session_manager_unittest.py | 14 | ||||
-rw-r--r-- | solo-tool-project/test/solo_tool_integrationtest.py | 37 | ||||
-rw-r--r-- | solo-tool-project/test/solo_tool_volume_integrationtest.py | 54 |
3 files changed, 100 insertions, 5 deletions
diff --git a/solo-tool-project/test/session_manager_unittest.py b/solo-tool-project/test/session_manager_unittest.py index bf0d8d9..5786b23 100644 --- a/solo-tool-project/test/session_manager_unittest.py +++ b/solo-tool-project/test/session_manager_unittest.py @@ -10,7 +10,8 @@ def testSessionFile(sessionPath, testSongs): contents = """[ { "path" : "test.flac", - "key_points" : [] + "key_points" : [], + "vol" : 0.5 }, { "path" : "test.mp3", @@ -35,24 +36,29 @@ def test_loadSession(sessionManager, mockPlayer, testSessionFile): soloTool.song = 0 assert soloTool.keyPoints == [] + assert soloTool.volume == 0.5 soloTool.song = 1 assert soloTool.keyPoints == [0.1, 0.3] + assert soloTool.volume == 1.0 def test_saveSession(sessionManager, soloTool, testSessionFile, sessionPath): soloTool.addSong("test.flac") + soloTool.volume = 0.5 + soloTool.addSong("test.mp3") soloTool.song = 1 soloTool.keyPoints = [0.1, 0.3] - sessionKey = "test_session_saved" - sessionManager.saveSession(soloTool, sessionKey) + sessionId = "test_session_saved" + sessionManager.saveSession(soloTool, sessionId) - with open(sessionPath / f"{sessionKey}.json", "r") as f: + with open(sessionPath / f"{sessionId}.json", "r") as f: savedSession = loads(f.read()) with open(testSessionFile, "r") as f: testSession = loads(f.read()) + testSession[1]["vol"] = 1.0 # Needed to handle default behaviour when vol is missing assert savedSession == testSession diff --git a/solo-tool-project/test/solo_tool_integrationtest.py b/solo-tool-project/test/solo_tool_integrationtest.py index b92cd85..e5745bb 100644 --- a/solo-tool-project/test/solo_tool_integrationtest.py +++ b/solo-tool-project/test/solo_tool_integrationtest.py @@ -1,6 +1,6 @@ from fixtures import soloTool as uut, mockPlayer, testSongs -def test_playerControls(uut, mockPlayer): +def test_playerControls(uut, mockPlayer, testSongs): assert not mockPlayer.playing assert not uut.playing uut.play() @@ -130,6 +130,41 @@ def test_playbackVolumeNotification(uut, mockPlayer, testSongs): uut.volume = 0.3 assert not called + # Volume can also change when the song changes + uut.addSong(testSongs[1]) + uut.song = 1 + assert called + assert receivedValue == 1.0 + called = False + + uut.volume = 0.3 + assert called + assert receivedValue == 0.3 + called = False + + uut.song = 0 + assert not called + +def test_playbackVolumeNotificationBeforeFirstSong(uut, mockPlayer, testSongs): + called = False + receivedValue = None + def callback(value): + nonlocal called, receivedValue + called = True + receivedValue = value + + uut.registerVolumeCallback(callback) + assert not called + + uut.volume = 0.3 + assert called + assert receivedValue == 0.3 + called = False + + uut.addSong(testSongs[0]) + assert called + assert receivedValue == 1.0 + def test_playbackRateNotification(uut, mockPlayer, testSongs): uut.addSong(testSongs[0]) diff --git a/solo-tool-project/test/solo_tool_volume_integrationtest.py b/solo-tool-project/test/solo_tool_volume_integrationtest.py new file mode 100644 index 0000000..cc1aeef --- /dev/null +++ b/solo-tool-project/test/solo_tool_volume_integrationtest.py @@ -0,0 +1,54 @@ +import pytest + +from fixtures import soloTool as uut, mockPlayer, testSongs + +def test_perSongVolumeFlow(uut, mockPlayer, testSongs): + # Before a song is added, the volume starts at 100% + assert uut.song is None + assert mockPlayer.currentSong == None + assert uut.volume == 1.0 + assert mockPlayer.volume == 1.0 + + # When songs are added, their volume starts at 100% + uut.addSong(testSongs[0]) + assert uut.song == 0 + assert uut.volume == 1.0 + assert mockPlayer.volume == 1.0 + + # It's possible to change the volume + uut.volume = 0.5 + assert uut.volume == 0.5 + assert mockPlayer.volume == 0.5 + + # New song song is added, volume stays because the new song is not selected + uut.addSong(testSongs[1]) + assert uut.song == 0 + assert uut.volume == 0.5 + assert mockPlayer.volume == 0.5 + + # Select new song, volume is 100% + uut.song = 1 + assert uut.volume == 1.0 + assert mockPlayer.volume == 1.0 + + uut.volume = 0.75 + + # Previous song retains its volume + uut.song = 0 + assert uut.volume == 0.5 + assert mockPlayer.volume == 0.5 + + # New song also + uut.song = 1 + assert uut.volume == 0.75 + assert mockPlayer.volume == 0.75 + +def test_perSongVolumeEdgeCases(uut, mockPlayer, testSongs): + # If the player volume is not 100% when the first song is added, it is set to 100% + uut.volume = 0.5 + assert mockPlayer.volume == 0.5 + + uut.addSong(testSongs[0]) + assert uut.volume == 1.0 + assert mockPlayer.volume == 1.0 + |