integration_cpp.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_cpp_hover_getenv() { 10 let fixture = TestFixture::new().await; 11 let uri = fixture.create_file("main.cpp", r#"getenv("DB_URL")"#); 12 13 fixture 14 .state 15 .document_manager 16 .open( 17 uri.clone(), 18 "cpp".to_string(), 19 r#"getenv("DB_URL")"#.to_string(), 20 0, 21 ) 22 .await; 23 24 let hover = handle_hover( 25 HoverParams { 26 text_document_position_params: TextDocumentPositionParams { 27 text_document: TextDocumentIdentifier { uri }, 28 position: Position::new(0, 9), 29 }, 30 work_done_progress_params: Default::default(), 31 }, 32 &fixture.state, 33 ) 34 .await; 35 36 assert!(hover.is_some(), "Expected hover for getenv"); 37 assert!(format!("{:?}", hover.unwrap()).contains("postgres://")); 38 } 39 40 #[tokio::test] 41 async fn test_cpp_hover_std_getenv() { 42 let fixture = TestFixture::new().await; 43 let uri = fixture.create_file("main.cpp", r#"std::getenv("API_KEY")"#); 44 45 fixture 46 .state 47 .document_manager 48 .open( 49 uri.clone(), 50 "cpp".to_string(), 51 r#"std::getenv("API_KEY")"#.to_string(), 52 0, 53 ) 54 .await; 55 56 let hover = handle_hover( 57 HoverParams { 58 text_document_position_params: TextDocumentPositionParams { 59 text_document: TextDocumentIdentifier { uri }, 60 position: Position::new(0, 15), 61 }, 62 work_done_progress_params: Default::default(), 63 }, 64 &fixture.state, 65 ) 66 .await; 67 68 assert!(hover.is_some(), "Expected hover for std::getenv"); 69 assert!(format!("{:?}", hover.unwrap()).contains("secret_key")); 70 } 71 72 #[tokio::test] 73 async fn test_cpp_diagnostics_undefined() { 74 let fixture = TestFixture::new().await; 75 let uri = fixture.create_file("main.cpp", r#"getenv("UNDEFINED_VAR")"#); 76 77 fixture 78 .state 79 .document_manager 80 .open( 81 uri.clone(), 82 "cpp".to_string(), 83 r#"getenv("UNDEFINED_VAR")"#.to_string(), 84 0, 85 ) 86 .await; 87 88 let diags = compute_diagnostics(&uri, &fixture.state).await; 89 90 assert!(!diags.is_empty()); 91 assert!(diags.iter().any(|d| d.message.contains("not defined"))); 92 } 93 94 // Note: Completion tests skipped for now - completion context queries need refinement