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