@@ -84,6 +84,66 @@ mod tests {
8484 )
8585 }
8686
87+ #[ tokio:: test]
88+ async fn autocompletes_table_alphanumerically ( ) {
89+ let test_db = get_new_test_db ( ) . await ;
90+
91+ let setup = r#"
92+ create table addresses (
93+ id serial primary key
94+ );
95+
96+ create table users (
97+ id serial primary key
98+ );
99+
100+ create table emails (
101+ id serial primary key
102+ );
103+ "# ;
104+
105+ test_db
106+ . execute ( setup)
107+ . await
108+ . expect ( "Failed to execute setup query" ) ;
109+
110+ let schema_cache = SchemaCache :: load ( & test_db) . await ;
111+
112+ let mut parser = tree_sitter:: Parser :: new ( ) ;
113+ parser
114+ . set_language ( tree_sitter_sql:: language ( ) )
115+ . expect ( "Error loading sql language" ) ;
116+
117+ let test_cases = vec ! [
118+ ( "select * from us" , "users" ) ,
119+ ( "select * from em" , "emails" ) ,
120+ ( "select * from " , "addresses" ) ,
121+ ] ;
122+
123+ for ( input, expected_label) in test_cases {
124+ let tree = parser. parse ( input, None ) . unwrap ( ) ;
125+
126+ let p = CompletionParams {
127+ position : ( ( input. len ( ) - 1 ) as u32 ) . into ( ) ,
128+ schema : & schema_cache,
129+ text : input,
130+ tree : Some ( & tree) ,
131+ } ;
132+
133+ let result = complete ( p) ;
134+
135+ assert ! ( result. items. len( ) > 0 ) ;
136+
137+ let best_match = & result. items [ 0 ] ;
138+
139+ assert_eq ! (
140+ best_match. label, expected_label,
141+ "Does not return the expected table to autocomplete: {}" ,
142+ best_match. label
143+ )
144+ }
145+ }
146+
87147 #[ tokio:: test]
88148 async fn autocompletes_table_with_schema ( ) {
89149 let test_db = get_new_test_db ( ) . await ;
0 commit comments