Files
cleveragents-core/features/lsp_discovery_coverage.feature
freemo 31472b5413
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 21s
CI / helm (pull_request) Successful in 22s
CI / lint (pull_request) Successful in 3m20s
CI / quality (pull_request) Successful in 3m43s
CI / typecheck (pull_request) Successful in 3m58s
CI / security (pull_request) Successful in 4m8s
CI / integration_tests (pull_request) Successful in 9m33s
CI / unit_tests (pull_request) Successful in 10m12s
CI / docker (pull_request) Successful in 1m28s
CI / coverage (pull_request) Successful in 12m18s
CI / e2e_tests (pull_request) Successful in 19m51s
CI / status-check (pull_request) Successful in 1s
CI / build (push) Successful in 15s
CI / helm (push) Successful in 22s
CI / lint (push) Successful in 3m18s
CI / quality (push) Successful in 3m41s
CI / typecheck (push) Successful in 3m57s
CI / benchmark-regression (push) Has been skipped
CI / security (push) Successful in 4m10s
CI / unit_tests (push) Failing after 6m58s
CI / docker (push) Has been skipped
CI / integration_tests (push) Successful in 9m15s
CI / coverage (push) Successful in 12m26s
CI / e2e_tests (push) Successful in 23m11s
CI / status-check (push) Failing after 1s
CI / benchmark-publish (push) Successful in 28m31s
CI / benchmark-regression (pull_request) Successful in 54m53s
test(coverage): add Behave scenarios for 39 under-covered modules
Add Behave feature/step pairs that exercise uncovered branches across handlers, LSP, CLI, and service layers to reach the coverage gate.

ISSUES CLOSED: #1232
2026-03-31 21:47:12 +00:00

106 lines
4.7 KiB
Gherkin
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Feature: LSP language discovery coverage
Exercise uncovered lines in src/cleveragents/lsp/discovery.py
covering shebang detection, cache behaviour, directory scanning,
special-name detection, UKO layer, and server matching.
# ------------------------------------------------------------------
# Layer 2 shebang detection edge cases (lines 142, 146, 157)
# ------------------------------------------------------------------
Scenario: Shebang returns None for non-shebang line
Given ldcov a first line "echo hello"
When ldcov I detect from shebang
Then ldcov the shebang result is None
Scenario: Shebang returns None for bare hashbang
Given ldcov a first line "#!"
When ldcov I detect from shebang
Then ldcov the shebang result is None
Scenario: Shebang returns None for empty hashbang with whitespace
Given ldcov a first line "#! "
When ldcov I detect from shebang
Then ldcov the shebang result is None
Scenario: Shebang returns None for unknown interpreter
Given ldcov a first line "#!/usr/bin/unknownlang"
When ldcov I detect from shebang
Then ldcov the shebang result is None
# ------------------------------------------------------------------
# Cache hit (line 201)
# ------------------------------------------------------------------
Scenario: detect_file_language returns cached result on second call
Given ldcov a LanguageDiscovery instance
And ldcov the cache already contains "/tmp/cached.py" mapped to "python"
When ldcov I detect file language for "/tmp/cached.py"
Then ldcov the detected language is "python"
# ------------------------------------------------------------------
# invalidate_all (line 246)
# ------------------------------------------------------------------
Scenario: invalidate_all clears the entire cache
Given ldcov a LanguageDiscovery instance
And ldcov the cache already contains "/a.py" mapped to "python"
And ldcov the cache already contains "/b.rs" mapped to "rust"
When ldcov I call invalidate_all
Then ldcov the cache is empty
# ------------------------------------------------------------------
# Special basenames Makefile (line 257), CMakeLists.txt (line 259)
# ------------------------------------------------------------------
Scenario: Makefile is detected as makefile language
Given ldcov a LanguageDiscovery instance
When ldcov I detect uncached language for "project/Makefile"
Then ldcov the detected language is "makefile"
Scenario: CMakeLists.txt is detected as cmake language
Given ldcov a LanguageDiscovery instance
When ldcov I detect uncached language for "project/CMakeLists.txt"
Then ldcov the detected language is "cmake"
# ------------------------------------------------------------------
# Layer 3 UKO classification (line 276)
# ------------------------------------------------------------------
Scenario: UKO classification is used when extension and shebang miss
Given ldcov a LanguageDiscovery instance with UKO mapping "/data/blob" to "python"
When ldcov I detect uncached language for "/data/blob"
Then ldcov the detected language is "python"
# ------------------------------------------------------------------
# Directory scanning (lines 219-231, 234)
# ------------------------------------------------------------------
Scenario: detect_directory_languages finds languages in a tree
Given ldcov a LanguageDiscovery instance
And ldcov a mock directory tree with files "app.py,lib.rs,readme.txt"
When ldcov I detect directory languages
Then ldcov the directory languages include "python"
And ldcov the directory languages include "rust"
Scenario: detect_directory_languages handles OSError gracefully
Given ldcov a LanguageDiscovery instance
And ldcov os.walk will raise an OSError
When ldcov I detect directory languages for "/nonexistent"
Then ldcov the directory languages result is an empty list
# ------------------------------------------------------------------
# get_servers_for_language (lines 298-301)
# ------------------------------------------------------------------
Scenario: get_servers_for_language filters matching configs
Given ldcov a LanguageDiscovery instance
And ldcov server configs with languages "python,rust" and "javascript"
When ldcov I get servers for language "python"
Then ldcov the matched server count is 1
Scenario: get_servers_for_language returns empty for no match
Given ldcov a LanguageDiscovery instance
And ldcov server configs with languages "python,rust" and "javascript"
When ldcov I get servers for language "haskell"
Then ldcov the matched server count is 0