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 + | 
