Skip to main content
Glama
johannhartmann

MCP Code Analysis Server

test_language_config.py7.5 kB
"""Tests for language configuration.""" from src.parser.language_config import LanguageConfig, LanguageRegistry class TestLanguageConfig: """Tests for LanguageConfig class.""" def test_language_config_creation(self) -> None: """Test creating a language configuration.""" config = LanguageConfig( name="test", display_name="Test Language", extensions=[".test", ".tst"], parser_available=True, ) assert config.name == "test" assert config.display_name == "Test Language" assert config.extensions == [".test", ".tst"] assert config.parser_available is True assert config.features["classes"] is False assert config.features["functions"] is False def test_language_config_with_features(self) -> None: """Test creating a language configuration with features.""" features = { "classes": True, "functions": True, "imports": False, "modules": True, "docstrings": False, "type_hints": True, } config = LanguageConfig( name="test", display_name="Test Language", extensions=[".test"], features=features, ) assert config.features == features class TestLanguageRegistry: """Tests for LanguageRegistry class.""" def test_get_language(self) -> None: """Test getting a language by name.""" python = LanguageRegistry.get_language("python") assert python is not None assert python.name == "python" assert python.display_name == "Python" assert ".py" in python.extensions # Test case insensitive python_upper = LanguageRegistry.get_language("PYTHON") assert python_upper is not None assert python_upper.name == "python" # Test non-existent language unknown = LanguageRegistry.get_language("unknown") assert unknown is None def test_get_language_by_extension(self) -> None: """Test getting a language by file extension.""" python = LanguageRegistry.get_language_by_extension(".py") assert python is not None assert python.name == "python" # Test case insensitive python_upper = LanguageRegistry.get_language_by_extension(".PY") assert python_upper is not None assert python_upper.name == "python" # Test non-existent extension unknown = LanguageRegistry.get_language_by_extension(".unknown") assert unknown is None def test_get_supported_languages(self) -> None: """Test getting list of supported languages.""" languages = LanguageRegistry.get_supported_languages() assert isinstance(languages, list) assert "python" in languages assert "javascript" in languages assert "typescript" in languages assert len(languages) >= 10 # We defined at least 10 languages def test_get_available_languages(self) -> None: """Test getting list of available languages.""" available = LanguageRegistry.get_available_languages() assert isinstance(available, list) # By default, only Python should be available assert "python" in available assert len(available) >= 1 def test_get_supported_extensions(self) -> None: """Test getting all supported extensions.""" extensions = LanguageRegistry.get_supported_extensions() assert isinstance(extensions, set) assert ".py" in extensions assert ".js" in extensions assert ".ts" in extensions assert ".java" in extensions assert len(extensions) >= 20 # Multiple extensions across languages def test_get_available_extensions(self) -> None: """Test getting extensions for available parsers.""" extensions = LanguageRegistry.get_available_extensions() assert isinstance(extensions, set) # By default, only Python extensions should be available assert ".py" in extensions assert ".pyw" in extensions assert ".pyi" in extensions def test_register_language(self) -> None: """Test registering a new language.""" # Create a copy of the registry to avoid side effects original_languages = LanguageRegistry._languages.copy() try: # Register a new language config = LanguageConfig( name="newlang", display_name="New Language", extensions=[".new", ".nlg"], parser_available=True, ) LanguageRegistry.register_language(config) # Check it was registered newlang = LanguageRegistry.get_language("newlang") assert newlang is not None assert newlang.display_name == "New Language" assert newlang.extensions == [".new", ".nlg"] # Check extensions are available assert LanguageRegistry.get_language_by_extension(".new") == newlang assert LanguageRegistry.get_language_by_extension(".nlg") == newlang finally: # Restore original registry LanguageRegistry._languages = original_languages def test_update_language(self) -> None: """Test updating an existing language.""" # Create a copy of the registry to avoid side effects original_languages = LanguageRegistry._languages.copy() try: # Update Python to mark it as unavailable (for testing) LanguageRegistry.update_language("python", parser_available=False) python = LanguageRegistry.get_language("python") assert python is not None assert python.parser_available is False # Update with multiple attributes LanguageRegistry.update_language( "python", parser_available=True, display_name="Python Programming Language", ) python = LanguageRegistry.get_language("python") assert python.parser_available is True assert python.display_name == "Python Programming Language" # Try updating non-existent language LanguageRegistry.update_language("nonexistent", parser_available=True) # Should not raise an error finally: # Restore original registry LanguageRegistry._languages = original_languages def test_is_extension_supported(self) -> None: """Test checking if an extension is supported.""" assert LanguageRegistry.is_extension_supported(".py") is True assert ( LanguageRegistry.is_extension_supported(".PY") is True ) # Case insensitive assert LanguageRegistry.is_extension_supported(".js") is True assert LanguageRegistry.is_extension_supported(".unknown") is False def test_is_extension_available(self) -> None: """Test checking if an extension has an available parser.""" assert LanguageRegistry.is_extension_available(".py") is True assert ( LanguageRegistry.is_extension_available(".PY") is True ) # Case insensitive # JavaScript parser not available by default assert LanguageRegistry.is_extension_available(".js") is False assert LanguageRegistry.is_extension_available(".unknown") is False

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/johannhartmann/mcpcodeanalysis'

If you have feedback or need assistance with the MCP directory API, please join our Discord server