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 }