Add documentation and basic tests
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
"""
|
||||
Basic tests for the Ubuntu Voice Typing application.
|
||||
"""
|
||||
|
||||
import unittest
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from src.speech_recognition.recognition_manager import SpeechRecognitionManager, RecognitionState
|
||||
from src.text_injection.text_injector import TextInjector, DesktopEnvironment
|
||||
|
||||
|
||||
class TestSpeechRecognition(unittest.TestCase):
|
||||
"""Test cases for the speech recognition manager."""
|
||||
|
||||
@patch('src.speech_recognition.recognition_manager.os.makedirs')
|
||||
def test_init_state(self, mock_makedirs):
|
||||
"""Test the initial state of the speech recognition manager."""
|
||||
manager = SpeechRecognitionManager(engine="vosk", model_size="small")
|
||||
self.assertEqual(manager.state, RecognitionState.IDLE)
|
||||
self.assertEqual(manager.engine, "vosk")
|
||||
self.assertEqual(manager.model_size, "small")
|
||||
|
||||
@patch('src.speech_recognition.recognition_manager.os.makedirs')
|
||||
def test_callbacks(self, mock_makedirs):
|
||||
"""Test callback registration and invocation."""
|
||||
manager = SpeechRecognitionManager(engine="vosk", model_size="small")
|
||||
|
||||
# Mock callbacks
|
||||
text_callback = MagicMock()
|
||||
state_callback = MagicMock()
|
||||
|
||||
# Register callbacks
|
||||
manager.register_text_callback(text_callback)
|
||||
manager.register_state_callback(state_callback)
|
||||
|
||||
# Verify callbacks were registered
|
||||
self.assertIn(text_callback, manager.text_callbacks)
|
||||
self.assertIn(state_callback, manager.state_callbacks)
|
||||
|
||||
# Test state update
|
||||
manager._update_state(RecognitionState.LISTENING)
|
||||
state_callback.assert_called_once_with(RecognitionState.LISTENING)
|
||||
|
||||
|
||||
class TestTextInjection(unittest.TestCase):
|
||||
"""Test cases for the text injector."""
|
||||
|
||||
@patch('src.text_injection.text_injector.shutil.which')
|
||||
@patch('src.text_injection.text_injector.TextInjector._detect_environment')
|
||||
def test_init_x11(self, mock_detect, mock_which):
|
||||
"""Test initialization in X11 environment."""
|
||||
mock_detect.return_value = DesktopEnvironment.X11
|
||||
mock_which.return_value = '/usr/bin/xdotool' # Simulate xdotool exists
|
||||
|
||||
injector = TextInjector()
|
||||
self.assertEqual(injector.environment, DesktopEnvironment.X11)
|
||||
|
||||
@patch('src.text_injection.text_injector.subprocess.run')
|
||||
@patch('src.text_injection.text_injector.shutil.which')
|
||||
@patch('src.text_injection.text_injector.TextInjector._detect_environment')
|
||||
def test_inject_text_x11(self, mock_detect, mock_which, mock_run):
|
||||
"""Test text injection in X11 environment."""
|
||||
mock_detect.return_value = DesktopEnvironment.X11
|
||||
mock_which.return_value = '/usr/bin/xdotool'
|
||||
|
||||
injector = TextInjector()
|
||||
injector.inject_text("Hello, world!")
|
||||
|
||||
mock_run.assert_called_once()
|
||||
args, kwargs = mock_run.call_args
|
||||
self.assertEqual(args[0][0], "xdotool")
|
||||
self.assertEqual(args[0][2], "--clearmodifiers")
|
||||
self.assertEqual(args[0][3], "Hello, world!")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user