import pytest import io from contextlib import redirect_stdout from solo_tool_cli import SoloToolCLI from solo_tool import SoloTool from player_mock import Player class MockMidiController: def __init__(self, soloTool): self.connected = False def connect(self): self.connected = True @pytest.fixture def mockPlayer(): return Player() @pytest.fixture def soloTool(mockPlayer): return SoloTool(playerOverride=mockPlayer) @pytest.fixture def mockMidi(soloTool): return MockMidiController(soloTool) @pytest.fixture def uut(soloTool, mockMidi): return SoloToolCLI("test_session.json", soloToolOverride=soloTool, midiOverride=mockMidi) def test_songSelection(uut, soloTool, mockPlayer): expectedOutput = """\ Songs: 0 test.flac 1 test.mp3 Songs: 0 test.flac 1 test.mp3 Songs: 0 test.flac 1 test.mp3 """ with io.StringIO() as buf, redirect_stdout(buf): uut.input("song") assert mockPlayer.currentSong == None uut.input("song 0") assert mockPlayer.currentSong == "test.flac" uut.input("song ") uut.input("song 1") assert mockPlayer.currentSong == "test.mp3" uut.input("song") assert buf.getvalue() == expectedOutput def test_connectMidi(uut, mockMidi): expectedOutput = """\ Supported device: Novation Launchpad Mini MkII Connecting to MIDI device... """ with io.StringIO() as buf, redirect_stdout(buf): uut.input("midi") assert not mockMidi.connected uut.input("midi connect") assert mockMidi.connected assert buf.getvalue() == expectedOutput