/ tests / definition_test.rs
definition_test.rs
 1  use ecolog_lsp::analysis::document::DocumentManager;
 2  use ecolog_lsp::analysis::query::QueryEngine;
 3  use ecolog_lsp::languages::LanguageRegistry;
 4  use std::sync::Arc;
 5  use tower_lsp::lsp_types::{Position, Url};
 6  
 7  async fn setup_manager() -> DocumentManager {
 8      let query_engine = Arc::new(QueryEngine::new());
 9      let mut registry = LanguageRegistry::new();
10      registry.register(Arc::new(ecolog_lsp::languages::javascript::JavaScript));
11      registry.register(Arc::new(ecolog_lsp::languages::python::Python));
12      let languages = Arc::new(registry);
13      DocumentManager::new(query_engine, languages.clone())
14  }
15  
16  #[tokio::test]
17  async fn test_definition_reference_exists() {
18      let doc_manager = setup_manager().await;
19      let uri = Url::parse("file:///test.js").unwrap();
20      let content = r#"
21  const api = process.env.API_KEY;
22  "#;
23      doc_manager
24          .open(uri.clone(), "javascript".into(), content.to_string(), 1)
25          .await;
26  
27      let ref1 = doc_manager.get_env_reference_cloned(&uri, Position::new(1, 26));
28      assert!(
29          ref1.is_some(),
30          "Reference should exist for definition lookup"
31      );
32      assert_eq!(ref1.unwrap().name, "API_KEY");
33  }
34  
35  #[tokio::test]
36  async fn test_definition_python_environ() {
37      let doc_manager = setup_manager().await;
38      let uri = Url::parse("file:///test.py").unwrap();
39      let content = r#"
40  import os
41  val = os.environ["DB_HOST"]
42  "#;
43      doc_manager
44          .open(uri.clone(), "python".into(), content.to_string(), 1)
45          .await;
46  
47      let ref1 = doc_manager.get_env_reference_cloned(&uri, Position::new(2, 21));
48      assert!(ref1.is_some(), "Reference should exist for Python environ");
49      assert_eq!(ref1.unwrap().name, "DB_HOST");
50  }