@lsp-hover-definitions
Feature: LSP hover and definitions methods
  Verifies that LspClient and LspRuntime implement get_hover
  and get_definitions with full path coverage.

  # ── LspClient method existence ─────────────────────────

  Scenario: LspClient has get_hover method for lsp_hd
    Then LspClient should have a "get_hover" method for lsp_hd

  Scenario: LspClient has get_definitions method for lsp_hd
    Then LspClient should have a "get_definitions" method for lsp_hd

  # ── LspClient get_hover paths ──────────────────────────

  Scenario: LspClient get_hover returns dict result for lsp_hd
    When I call LspClient.get_hover with mock returning a dict for lsp_hd
    Then the hover result should be a dict for lsp_hd

  Scenario: LspClient get_hover returns None when server returns null for lsp_hd
    When I call LspClient.get_hover with mock returning null for lsp_hd
    Then the hover result should be None for lsp_hd

  Scenario: LspClient get_hover returns None for unexpected type for lsp_hd
    When I call LspClient.get_hover with mock returning an integer for lsp_hd
    Then the hover result should be None for lsp_hd

  # ── LspClient get_definitions paths ────────────────────

  Scenario: LspClient get_definitions returns list of Locations for lsp_hd
    When I call LspClient.get_definitions with mock returning a list for lsp_hd
    Then the definitions result should be a list with 1 item for lsp_hd

  Scenario: LspClient get_definitions wraps single Location in list for lsp_hd
    When I call LspClient.get_definitions with mock returning a single dict for lsp_hd
    Then the definitions result should be a list with 1 item for lsp_hd

  Scenario: LspClient get_definitions returns empty list for null for lsp_hd
    When I call LspClient.get_definitions with mock returning null for lsp_hd
    Then the definitions result should be an empty list for lsp_hd

  Scenario: LspClient get_definitions returns empty for unexpected type for lsp_hd
    When I call LspClient.get_definitions with mock returning an integer for lsp_hd
    Then the definitions result should be an empty list for lsp_hd

  # ── LspRuntime method existence ────────────────────────

  Scenario: LspRuntime has get_hover method for lsp_hd
    Then LspRuntime should have a "get_hover" method for lsp_hd

  Scenario: LspRuntime has get_definitions method for lsp_hd
    Then LspRuntime should have a "get_definitions" method for lsp_hd

  # ── LspRuntime input validation ────────────────────────

  Scenario: LspRuntime get_hover rejects empty name for lsp_hd
    When I call LspRuntime.get_hover with empty name for lsp_hd
    Then a ValueError should be raised for lsp_hd with message "name"

  Scenario: LspRuntime get_hover rejects empty file_path for lsp_hd
    When I call LspRuntime.get_hover with empty file_path for lsp_hd
    Then a ValueError should be raised for lsp_hd with message "file_path"

  Scenario: LspRuntime get_hover rejects line 0 for lsp_hd
    When I call LspRuntime.get_hover with line 0 for lsp_hd
    Then a ValueError should be raised for lsp_hd with message "line"

  Scenario: LspRuntime get_hover rejects column 0 for lsp_hd
    When I call LspRuntime.get_hover with column 0 for lsp_hd
    Then a ValueError should be raised for lsp_hd with message "column"

  Scenario: LspRuntime get_definitions rejects empty name for lsp_hd
    When I call LspRuntime.get_definitions with empty name for lsp_hd
    Then a ValueError should be raised for lsp_hd with message "name"

  Scenario: LspRuntime get_definitions rejects empty file_path for lsp_hd
    When I call LspRuntime.get_definitions with empty file_path for lsp_hd
    Then a ValueError should be raised for lsp_hd with message "file_path"

  Scenario: LspRuntime get_definitions rejects line 0 for lsp_hd
    When I call LspRuntime.get_definitions with line 0 for lsp_hd
    Then a ValueError should be raised for lsp_hd with message "line"

  Scenario: LspRuntime get_definitions rejects column 0 for lsp_hd
    When I call LspRuntime.get_definitions with column 0 for lsp_hd
    Then a ValueError should be raised for lsp_hd with message "column"

  # ── Tool adapter wiring ────────────────────────────────

  Scenario: Tool adapter maps HOVER capability for lsp_hd
    Then the tool adapter capability map should include "hover" for lsp_hd

  Scenario: Tool adapter maps DEFINITIONS capability for lsp_hd
    Then the tool adapter capability map should include "definitions" for lsp_hd
