/ tests / integration_java.rs
integration_java.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_java_hover_system_getenv() {
10      let fixture = TestFixture::new().await;
11      let uri = fixture.create_file("Main.java", r#"System.getenv("DB_URL")"#);
12  
13      fixture
14          .state
15          .document_manager
16          .open(
17              uri.clone(),
18              "java".to_string(),
19              r#"System.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, 16),
29              },
30              work_done_progress_params: Default::default(),
31          },
32          &fixture.state,
33      )
34      .await;
35  
36      assert!(hover.is_some(), "Expected hover for System.getenv");
37      assert!(format!("{:?}", hover.unwrap()).contains("postgres://"));
38  }
39  
40  #[tokio::test]
41  async fn test_java_hover_system_getproperty() {
42      let fixture = TestFixture::new().await;
43      let uri = fixture.create_file("Main.java", r#"System.getProperty("API_KEY")"#);
44  
45      fixture
46          .state
47          .document_manager
48          .open(
49              uri.clone(),
50              "java".to_string(),
51              r#"System.getProperty("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, 22),
61              },
62              work_done_progress_params: Default::default(),
63          },
64          &fixture.state,
65      )
66      .await;
67  
68      assert!(hover.is_some(), "Expected hover for System.getProperty");
69      assert!(format!("{:?}", hover.unwrap()).contains("secret_key"));
70  }
71  
72  #[tokio::test]
73  async fn test_java_diagnostics_undefined() {
74      let fixture = TestFixture::new().await;
75      let uri = fixture.create_file("Main.java", r#"System.getenv("UNDEFINED_VAR")"#);
76  
77      fixture
78          .state
79          .document_manager
80          .open(
81              uri.clone(),
82              "java".to_string(),
83              r#"System.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