11#[ cfg( test) ]
22mod test {
3+ use async_lsp:: lsp_types:: Url ;
34 use insta:: assert_yaml_snapshot;
45
56 use crate :: config:: Config ;
@@ -9,24 +10,14 @@ mod test {
910 fn test_workspace_symbols ( ) {
1011 let current_dir = std:: env:: current_dir ( ) . unwrap ( ) ;
1112 let ipath = vec ! [ current_dir. join( "src/workspace/input" ) ] ;
12- let a_uri = format ! (
13- "file://{}/src/workspace/input/a.proto" ,
14- current_dir. to_str( ) . unwrap( )
15- )
16- . parse ( )
17- . unwrap ( ) ;
18- let b_uri = format ! (
19- "file://{}/src/workspace/input/b.proto" ,
20- current_dir. to_str( ) . unwrap( )
21- )
22- . parse ( )
23- . unwrap ( ) ;
24- let c_uri = format ! (
25- "file://{}/src/workspace/input/c.proto" ,
26- current_dir. to_str( ) . unwrap( )
27- )
28- . parse ( )
29- . unwrap ( ) ;
13+ let base_uri_str = Url :: from_directory_path ( & current_dir)
14+ . unwrap ( )
15+ . to_string ( )
16+ . trim_end_matches ( '/' )
17+ . to_string ( ) ;
18+ let a_uri = Url :: from_file_path ( current_dir. join ( "src/workspace/input/a.proto" ) ) . unwrap ( ) ;
19+ let b_uri = Url :: from_file_path ( current_dir. join ( "src/workspace/input/b.proto" ) ) . unwrap ( ) ;
20+ let c_uri = Url :: from_file_path ( current_dir. join ( "src/workspace/input/c.proto" ) ) . unwrap ( ) ;
3021
3122 let a = include_str ! ( "input/a.proto" ) ;
3223 let b = include_str ! ( "input/b.proto" ) ;
@@ -39,47 +30,49 @@ mod test {
3930
4031 // Test empty query - should return all symbols
4132 let all_symbols = state. find_workspace_symbols ( "" ) ;
42- let cdir = current_dir . to_str ( ) . unwrap ( ) . to_string ( ) ;
33+ let base_uri_1 = base_uri_str . clone ( ) ;
4334 assert_yaml_snapshot ! ( all_symbols, { "[].location.uri" => insta:: dynamic_redaction( move |c, _| {
35+ let uri_str = c. as_str( ) . unwrap( ) ;
36+
4437 assert!(
45- c. as_str( )
46- . unwrap( )
47- . contains( & cdir)
38+ uri_str. contains( & base_uri_1) ,
39+ "URI {} should contain {}" , uri_str, base_uri_1
4840 ) ;
49- format!(
50- "file://<redacted>/src/workspace/input/{}" ,
51- c. as_str( ) . unwrap( ) . split( '/' ) . next_back( ) . unwrap( )
52- )
41+
42+ let file_name = uri_str. split( '/' ) . next_back( ) . unwrap( ) ;
43+ format!( "file://<redacted>/src/workspace/input/{}" , file_name)
5344
5445 } ) } ) ;
5546
5647 // Test query for "author" - should match Author and Address
5748 let author_symbols = state. find_workspace_symbols ( "author" ) ;
58- let cdir = current_dir . to_str ( ) . unwrap ( ) . to_string ( ) ;
49+ let base_uri_2 = base_uri_str . clone ( ) ;
5950 assert_yaml_snapshot ! ( author_symbols, { "[].location.uri" => insta:: dynamic_redaction( move |c , _|{
51+ let uri_str = c. as_str( ) . unwrap( ) ;
52+
6053 assert!(
61- c. as_str( )
62- . unwrap( )
63- . contains( & cdir)
54+ uri_str. contains( & base_uri_2) ,
55+ "URI {} should contain {}" , uri_str, base_uri_2
6456 ) ;
65- format!(
66- "file://<redacted>/src/workspace/input/{}" ,
67- c. as_str( ) . unwrap( ) . split( '/' ) . next_back( ) . unwrap( )
68- )
57+
58+ let file_name = uri_str. split( '/' ) . next_back( ) . unwrap( ) ;
59+ format!( "file://<redacted>/src/workspace/input/{}" , file_name)
6960 } ) } ) ;
7061
7162 // Test query for "address" - should match Address
7263 let address_symbols = state. find_workspace_symbols ( "address" ) ;
64+ let base_uri_3 = base_uri_str. clone ( ) ;
7365 assert_yaml_snapshot ! ( address_symbols, { "[].location.uri" => insta:: dynamic_redaction( move |c , _|{
66+ let uri_str = c. as_str( ) . unwrap( ) ;
67+
7468 assert!(
75- c. as_str( )
76- . unwrap( )
77- . contains( current_dir. to_str( ) . unwrap( ) )
69+ uri_str. contains( & base_uri_3) ,
70+ "URI {} should contain {}" , uri_str, base_uri_3
7871 ) ;
79- format! (
80- "file://<redacted>/src/workspace/input/{}" ,
81- c . as_str ( ) . unwrap ( ) . split( '/' ) . next_back( ) . unwrap( )
82- )
72+
73+
74+ let file_name = uri_str . split( '/' ) . next_back( ) . unwrap( ) ;
75+ format! ( "file://<redacted>/src/workspace/input/{}" , file_name )
8376 } ) } ) ;
8477
8578 // Test query that should not match anything
0 commit comments