mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-04 20:54:13 +00:00
Modifies runnables test to use multi-workspace root
This commit is contained in:
parent
7c7cfc5f04
commit
c2dfc8a229
@ -14,7 +14,7 @@ use ra_lsp_server::req::{
|
|||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use tempfile::TempDir;
|
use tempfile::TempDir;
|
||||||
|
|
||||||
use crate::support::{project, project_with_tmpdir};
|
use crate::support::{project, Project};
|
||||||
|
|
||||||
const LOG: &'static str = "";
|
const LOG: &'static str = "";
|
||||||
|
|
||||||
@ -95,25 +95,34 @@ fn foo() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_runnables_project() {
|
fn test_runnables_project() {
|
||||||
let server = project(
|
let code = r#"
|
||||||
r#"
|
//- foo/Cargo.toml
|
||||||
//- Cargo.toml
|
|
||||||
[package]
|
[package]
|
||||||
name = "foo"
|
name = "foo"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
|
|
||||||
//- src/lib.rs
|
//- foo/src/lib.rs
|
||||||
pub fn foo() {}
|
pub fn foo() {}
|
||||||
|
|
||||||
//- tests/spam.rs
|
//- foo/tests/spam.rs
|
||||||
#[test]
|
#[test]
|
||||||
fn test_eggs() {}
|
fn test_eggs() {}
|
||||||
"#,
|
|
||||||
);
|
//- bar/Cargo.toml
|
||||||
|
[package]
|
||||||
|
name = "bar"
|
||||||
|
version = "0.0.0"
|
||||||
|
|
||||||
|
//- bar/src/main.rs
|
||||||
|
fn main() {}
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let server = Project::with_fixture(code).root("foo").root("bar").server();
|
||||||
|
|
||||||
server.wait_until_workspace_is_loaded();
|
server.wait_until_workspace_is_loaded();
|
||||||
server.request::<Runnables>(
|
server.request::<Runnables>(
|
||||||
RunnablesParams {
|
RunnablesParams {
|
||||||
text_document: server.doc_id("tests/spam.rs"),
|
text_document: server.doc_id("foo/tests/spam.rs"),
|
||||||
position: None,
|
position: None,
|
||||||
},
|
},
|
||||||
json!([
|
json!([
|
||||||
@ -126,7 +135,7 @@ fn test_eggs() {}
|
|||||||
"end": { "character": 17, "line": 1 },
|
"end": { "character": 17, "line": 1 },
|
||||||
"start": { "character": 0, "line": 0 }
|
"start": { "character": 0, "line": 0 }
|
||||||
},
|
},
|
||||||
"cwd": server.path()
|
"cwd": server.path().join("foo")
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"args": [
|
"args": [
|
||||||
@ -138,7 +147,7 @@ fn test_eggs() {}
|
|||||||
],
|
],
|
||||||
"bin": "cargo",
|
"bin": "cargo",
|
||||||
"env": {},
|
"env": {},
|
||||||
"cwd": server.path(),
|
"cwd": server.path().join("foo"),
|
||||||
"label": "cargo check -p foo",
|
"label": "cargo check -p foo",
|
||||||
"range": {
|
"range": {
|
||||||
"end": {
|
"end": {
|
||||||
@ -287,7 +296,9 @@ fn main() {{}}
|
|||||||
"#,
|
"#,
|
||||||
PROJECT = project.to_string(),
|
PROJECT = project.to_string(),
|
||||||
);
|
);
|
||||||
let server = project_with_tmpdir(tmp_dir, &code);
|
|
||||||
|
let server = Project::with_fixture(&code).tmp_dir(tmp_dir).server();
|
||||||
|
|
||||||
server.wait_until_workspace_is_loaded();
|
server.wait_until_workspace_is_loaded();
|
||||||
let empty_context = || CodeActionContext { diagnostics: Vec::new(), only: None };
|
let empty_context = || CodeActionContext { diagnostics: Vec::new(), only: None };
|
||||||
server.request::<CodeActionRequest>(
|
server.request::<CodeActionRequest>(
|
||||||
|
@ -26,12 +26,29 @@ use ra_lsp_server::{
|
|||||||
InitializationOptions,
|
InitializationOptions,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn project(fixture: &str) -> Server {
|
pub struct Project<'a> {
|
||||||
let tmp_dir = TempDir::new().unwrap();
|
fixture: &'a str,
|
||||||
project_with_tmpdir(tmp_dir, fixture)
|
tmp_dir: Option<TempDir>,
|
||||||
|
roots: Vec<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn project_with_tmpdir(tmp_dir: TempDir, fixture: &str) -> Server {
|
impl<'a> Project<'a> {
|
||||||
|
pub fn with_fixture(fixture: &str) -> Project {
|
||||||
|
Project { fixture, tmp_dir: None, roots: vec![] }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn tmp_dir(mut self, tmp_dir: TempDir) -> Project<'a> {
|
||||||
|
self.tmp_dir = Some(tmp_dir);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn root(mut self, path: &str) -> Project<'a> {
|
||||||
|
self.roots.push(path.into());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn server(self) -> Server {
|
||||||
|
let tmp_dir = self.tmp_dir.unwrap_or_else(|| TempDir::new().unwrap());
|
||||||
static INIT: Once = Once::new();
|
static INIT: Once = Once::new();
|
||||||
INIT.call_once(|| {
|
INIT.call_once(|| {
|
||||||
let _ = Logger::with_env_or_str(crate::LOG).start().unwrap();
|
let _ = Logger::with_env_or_str(crate::LOG).start().unwrap();
|
||||||
@ -39,13 +56,21 @@ pub fn project_with_tmpdir(tmp_dir: TempDir, fixture: &str) -> Server {
|
|||||||
|
|
||||||
let mut paths = vec![];
|
let mut paths = vec![];
|
||||||
|
|
||||||
for entry in parse_fixture(fixture) {
|
for entry in parse_fixture(self.fixture) {
|
||||||
let path = tmp_dir.path().join(entry.meta);
|
let path = tmp_dir.path().join(entry.meta);
|
||||||
fs::create_dir_all(path.parent().unwrap()).unwrap();
|
fs::create_dir_all(path.parent().unwrap()).unwrap();
|
||||||
fs::write(path.as_path(), entry.text.as_bytes()).unwrap();
|
fs::write(path.as_path(), entry.text.as_bytes()).unwrap();
|
||||||
paths.push((path, entry.text));
|
paths.push((path, entry.text));
|
||||||
}
|
}
|
||||||
Server::new(tmp_dir, paths)
|
|
||||||
|
let roots = self.roots.into_iter().map(|root| tmp_dir.path().join(root)).collect();
|
||||||
|
|
||||||
|
Server::new(tmp_dir, roots, paths)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn project(fixture: &str) -> Server {
|
||||||
|
Project::with_fixture(fixture).server()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Server {
|
pub struct Server {
|
||||||
@ -56,14 +81,17 @@ pub struct Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Server {
|
impl Server {
|
||||||
fn new(dir: TempDir, files: Vec<(PathBuf, String)>) -> Server {
|
fn new(dir: TempDir, roots: Vec<PathBuf>, files: Vec<(PathBuf, String)>) -> Server {
|
||||||
let path = dir.path().to_path_buf();
|
let path = dir.path().to_path_buf();
|
||||||
|
|
||||||
|
let roots = if roots.is_empty() { vec![path] } else { roots };
|
||||||
|
|
||||||
let worker = Worker::<RawMessage, RawMessage>::spawn(
|
let worker = Worker::<RawMessage, RawMessage>::spawn(
|
||||||
"test server",
|
"test server",
|
||||||
128,
|
128,
|
||||||
move |mut msg_receiver, mut msg_sender| {
|
move |mut msg_receiver, mut msg_sender| {
|
||||||
main_loop(
|
main_loop(
|
||||||
vec![path],
|
roots,
|
||||||
InitializationOptions::default(),
|
InitializationOptions::default(),
|
||||||
&mut msg_receiver,
|
&mut msg_receiver,
|
||||||
&mut msg_sender,
|
&mut msg_sender,
|
||||||
|
Loading…
Reference in New Issue
Block a user