@@ -84,6 +84,66 @@ mod tests {
84
84
)
85
85
}
86
86
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
+
87
147
#[ tokio:: test]
88
148
async fn autocompletes_table_with_schema ( ) {
89
149
let test_db = get_new_test_db ( ) . await ;
0 commit comments