aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_lsp_server/tests
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_lsp_server/tests')
-rw-r--r--crates/ra_lsp_server/tests/heavy_tests/main.rs34
-rw-r--r--crates/ra_lsp_server/tests/heavy_tests/support.rs13
2 files changed, 39 insertions, 8 deletions
diff --git a/crates/ra_lsp_server/tests/heavy_tests/main.rs b/crates/ra_lsp_server/tests/heavy_tests/main.rs
index 9eaf46ac8..02d62a259 100644
--- a/crates/ra_lsp_server/tests/heavy_tests/main.rs
+++ b/crates/ra_lsp_server/tests/heavy_tests/main.rs
@@ -1,10 +1,15 @@
1mod support; 1mod support;
2 2
3use std::{
4 collections::HashMap,
5 time::Instant,
6};
7
3use languageserver_types::{ 8use languageserver_types::{
4 CodeActionContext, DocumentFormattingParams, FormattingOptions, Position, Range, 9 CodeActionContext, DocumentFormattingParams, FormattingOptions, Position, Range,
5}; 10};
6use ra_lsp_server::req::{ 11use ra_lsp_server::req::{
7 CodeActionParams, CodeActionRequest, Formatting, Runnables, RunnablesParams, 12 CodeActionParams, CodeActionRequest, Formatting, Runnables, RunnablesParams, CompletionParams, Completion,
8}; 13};
9use serde_json::json; 14use serde_json::json;
10 15
@@ -13,6 +18,32 @@ use crate::support::project;
13const LOG: &'static str = ""; 18const LOG: &'static str = "";
14 19
15#[test] 20#[test]
21fn completes_items_from_standard_library() {
22 let project_start = Instant::now();
23 let server = project(
24 r#"
25//- Cargo.toml
26[package]
27name = "foo"
28version = "0.0.0"
29
30//- src/lib.rs
31use std::collections::Spam;
32"#,
33 );
34 server.wait_for_feedback("workspace loaded");
35 eprintln!("loading took {:?}", project_start.elapsed());
36 let completion_start = Instant::now();
37 let res = server.send_request::<Completion>(CompletionParams {
38 text_document: server.doc_id("src/lib.rs"),
39 context: None,
40 position: Position::new(0, 23),
41 });
42 assert!(format!("{}", res).contains("HashMap"));
43 eprintln!("completion took {:?}", completion_start.elapsed());
44}
45
46#[test]
16fn test_runnables_no_project() { 47fn test_runnables_no_project() {
17 let server = project( 48 let server = project(
18 r" 49 r"
@@ -122,7 +153,6 @@ fn test_eggs() {}
122 ); 153 );
123} 154}
124 155
125use std::collections::HashMap;
126#[test] 156#[test]
127fn test_format_document() { 157fn test_format_document() {
128 let server = project( 158 let server = project(
diff --git a/crates/ra_lsp_server/tests/heavy_tests/support.rs b/crates/ra_lsp_server/tests/heavy_tests/support.rs
index 7db168b0f..46107b6b6 100644
--- a/crates/ra_lsp_server/tests/heavy_tests/support.rs
+++ b/crates/ra_lsp_server/tests/heavy_tests/support.rs
@@ -93,9 +93,7 @@ impl Server {
93 R: Request, 93 R: Request,
94 R::Params: Serialize, 94 R::Params: Serialize,
95 { 95 {
96 let id = self.req_id.get(); 96 let actual = self.send_request::<R>(params);
97 self.req_id.set(id + 1);
98 let actual = self.send_request::<R>(id, params);
99 match find_mismatch(&expected_resp, &actual) { 97 match find_mismatch(&expected_resp, &actual) {
100 Some((expected_part, actual_part)) => panic!( 98 Some((expected_part, actual_part)) => panic!(
101 "JSON mismatch\nExpected:\n{}\nWas:\n{}\nExpected part:\n{}\nActual part:\n{}\n", 99 "JSON mismatch\nExpected:\n{}\nWas:\n{}\nExpected part:\n{}\nActual part:\n{}\n",
@@ -108,11 +106,14 @@ impl Server {
108 } 106 }
109 } 107 }
110 108
111 fn send_request<R>(&self, id: u64, params: R::Params) -> Value 109 pub fn send_request<R>(&self, params: R::Params) -> Value
112 where 110 where
113 R: Request, 111 R: Request,
114 R::Params: Serialize, 112 R::Params: Serialize,
115 { 113 {
114 let id = self.req_id.get();
115 self.req_id.set(id + 1);
116
116 let r = RawRequest::new::<R>(id, &params); 117 let r = RawRequest::new::<R>(id, &params);
117 self.send_request_(r) 118 self.send_request_(r)
118 } 119 }
@@ -178,7 +179,7 @@ impl Server {
178 179
179impl Drop for Server { 180impl Drop for Server {
180 fn drop(&mut self) { 181 fn drop(&mut self) {
181 self.send_request::<Shutdown>(666, ()); 182 self.send_request::<Shutdown>(());
182 let receiver = self.worker.take().unwrap().shutdown(); 183 let receiver = self.worker.take().unwrap().shutdown();
183 while let Some(msg) = recv_timeout(&receiver) { 184 while let Some(msg) = recv_timeout(&receiver) {
184 drop(msg); 185 drop(msg);
@@ -188,7 +189,7 @@ impl Drop for Server {
188} 189}
189 190
190fn recv_timeout(receiver: &Receiver<RawMessage>) -> Option<RawMessage> { 191fn recv_timeout(receiver: &Receiver<RawMessage>) -> Option<RawMessage> {
191 let timeout = Duration::from_secs(5); 192 let timeout = Duration::from_secs(50);
192 select! { 193 select! {
193 recv(receiver) -> msg => msg.ok(), 194 recv(receiver) -> msg => msg.ok(),
194 recv(after(timeout)) -> _ => panic!("timed out"), 195 recv(after(timeout)) -> _ => panic!("timed out"),