/ tests / integration_csharp.rs
integration_csharp.rs
 1  mod common;
 2  use common::TestFixture;
 3  use ecolog_lsp::server::handlers::{compute_diagnostics, handle_hover};
 4  use tower_lsp::lsp_types::{
 5      HoverParams, Position, TextDocumentIdentifier, TextDocumentPositionParams,
 6  };
 7  
 8  #[tokio::test]
 9  async fn test_csharp_hover_environment_getenv() {
10      let fixture = TestFixture::new().await;
11      let uri = fixture.create_file(
12          "Program.cs",
13          r#"Environment.GetEnvironmentVariable("DB_URL")"#,
14      );
15  
16      fixture
17          .state
18          .document_manager
19          .open(
20              uri.clone(),
21              "csharp".to_string(),
22              r#"Environment.GetEnvironmentVariable("DB_URL")"#.to_string(),
23              0,
24          )
25          .await;
26  
27      let hover = handle_hover(
28          HoverParams {
29              text_document_position_params: TextDocumentPositionParams {
30                  text_document: TextDocumentIdentifier { uri },
31                  position: Position::new(0, 38),
32              },
33              work_done_progress_params: Default::default(),
34          },
35          &fixture.state,
36      )
37      .await;
38  
39      assert!(
40          hover.is_some(),
41          "Expected hover for Environment.GetEnvironmentVariable"
42      );
43      assert!(format!("{:?}", hover.unwrap()).contains("postgres://"));
44  }
45  
46  #[tokio::test]
47  async fn test_csharp_diagnostics_undefined() {
48      let fixture = TestFixture::new().await;
49      let uri = fixture.create_file(
50          "Program.cs",
51          r#"Environment.GetEnvironmentVariable("UNDEFINED_VAR")"#,
52      );
53  
54      fixture
55          .state
56          .document_manager
57          .open(
58              uri.clone(),
59              "csharp".to_string(),
60              r#"Environment.GetEnvironmentVariable("UNDEFINED_VAR")"#.to_string(),
61              0,
62          )
63          .await;
64  
65      let diags = compute_diagnostics(&uri, &fixture.state).await;
66  
67      assert!(!diags.is_empty());
68      assert!(diags.iter().any(|d| d.message.contains("not defined")));
69  }
70  
71  // Note: Completion tests skipped for now - completion context queries need refinement