"""Tests for platform utilities module.""" import pytest import unittest.mock as mock import sys import os from unittest.mock import patch from src.core.platform_utils import ( get_executable_directory, get_platform_tools_directory, get_platform_type ) class TestPlatformUtils: """Test platform utility functions.""" def test_get_executable_directory_frozen(self): """Test get_executable_directory when running as executable.""" with patch.object(sys, 'frozen', True, create=True): with patch.object(sys, 'executable', '/path/to/app'): result = get_executable_directory() assert result == '/path/to' def test_get_executable_directory_script(self): """Test get_executable_directory when running as script.""" with patch.object(sys, 'frozen', False, create=True): with patch('os.path.abspath') as mock_abspath: with patch('os.path.dirname') as mock_dirname: mock_abspath.return_value = '/path/to/script.py' mock_dirname.return_value = '/path/to' result = get_executable_directory() assert result == '/path/to' # The function calls abspath on the actual platform_utils.py file mock_abspath.assert_called_once() def test_get_platform_type_linux(self): """Test platform type detection for Linux.""" with patch('sys.platform', 'linux'): result = get_platform_type() assert result == 'linux' def test_get_platform_type_windows(self): """Test platform type detection for Windows.""" with patch('sys.platform', 'win32'): result = get_platform_type() assert result == 'win32' def test_get_platform_type_darwin(self): """Test platform type detection for macOS.""" with patch('sys.platform', 'darwin'): result = get_platform_type() assert result == 'darwin' def test_get_platform_tools_directory_frozen(self): """Test platform-tools directory when running as executable.""" with patch.object(sys, 'frozen', True, create=True): with patch('src.core.platform_utils.get_executable_directory', return_value='/app/dir'): result = get_platform_tools_directory() expected = os.path.join('/app/dir', 'platform-tools') assert result == expected def test_get_platform_tools_directory_src(self): """Test platform-tools directory when running from src.""" with patch.object(sys, 'frozen', False, create=True): with patch('src.core.platform_utils.get_executable_directory', return_value='/project/src'): result = get_platform_tools_directory() expected = os.path.join('/project/src', 'platform-tools') assert result == expected def test_get_platform_tools_directory_gui_subdirectory(self): """Test platform-tools directory when running from src/gui.""" with patch.object(sys, 'frozen', False, create=True): with patch('src.core.platform_utils.get_executable_directory', return_value='/project/src/gui'): result = get_platform_tools_directory() expected = os.path.join('/project/src', 'platform-tools') assert result == expected def test_get_platform_tools_directory_project_root(self): """Test platform-tools directory when running from project root.""" with patch.object(sys, 'frozen', False, create=True): with patch('src.core.platform_utils.get_executable_directory', return_value='/project'): with patch('os.path.exists', return_value=True): result = get_platform_tools_directory() expected = os.path.join('/project', 'src', 'platform-tools') assert result == expected def test_get_platform_tools_directory_fallback(self): """Test platform-tools directory fallback behavior.""" with patch.object(sys, 'frozen', False, create=True): with patch('src.core.platform_utils.get_executable_directory', return_value='/somewhere'): with patch('os.path.exists', return_value=False): result = get_platform_tools_directory() expected = os.path.join('/somewhere', 'src', 'platform-tools') assert result == expected