diff options
Diffstat (limited to 'crates/proc_macro_srv/src/tests/utils.rs')
-rw-r--r-- | crates/proc_macro_srv/src/tests/utils.rs | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/crates/proc_macro_srv/src/tests/utils.rs b/crates/proc_macro_srv/src/tests/utils.rs index f15381f0f..f0a514b32 100644 --- a/crates/proc_macro_srv/src/tests/utils.rs +++ b/crates/proc_macro_srv/src/tests/utils.rs | |||
@@ -2,9 +2,9 @@ | |||
2 | 2 | ||
3 | use crate::dylib; | 3 | use crate::dylib; |
4 | use crate::ProcMacroSrv; | 4 | use crate::ProcMacroSrv; |
5 | use expect_test::Expect; | ||
5 | use proc_macro_api::ListMacrosTask; | 6 | use proc_macro_api::ListMacrosTask; |
6 | use std::str::FromStr; | 7 | use std::str::FromStr; |
7 | use test_utils::assert_eq_text; | ||
8 | 8 | ||
9 | pub mod fixtures { | 9 | pub mod fixtures { |
10 | use cargo_metadata::Message; | 10 | use cargo_metadata::Message; |
@@ -12,9 +12,11 @@ pub mod fixtures { | |||
12 | use std::process::Command; | 12 | use std::process::Command; |
13 | 13 | ||
14 | // Use current project metadata to get the proc-macro dylib path | 14 | // Use current project metadata to get the proc-macro dylib path |
15 | pub fn dylib_path(crate_name: &str, version: &str) -> std::path::PathBuf { | 15 | pub fn proc_macro_test_dylib_path() -> std::path::PathBuf { |
16 | let name = "proc_macro_test"; | ||
17 | let version = "0.0.0"; | ||
16 | let command = Command::new(toolchain::cargo()) | 18 | let command = Command::new(toolchain::cargo()) |
17 | .args(&["check", "--tests", "--message-format", "json"]) | 19 | .args(&["build", "-p", name, "--message-format", "json"]) |
18 | .output() | 20 | .output() |
19 | .unwrap() | 21 | .unwrap() |
20 | .stdout; | 22 | .stdout; |
@@ -23,7 +25,7 @@ pub mod fixtures { | |||
23 | match message.unwrap() { | 25 | match message.unwrap() { |
24 | Message::CompilerArtifact(artifact) => { | 26 | Message::CompilerArtifact(artifact) => { |
25 | if artifact.target.kind.contains(&"proc-macro".to_string()) { | 27 | if artifact.target.kind.contains(&"proc-macro".to_string()) { |
26 | let repr = format!("{} {}", crate_name, version); | 28 | let repr = format!("{} {}", name, version); |
27 | if artifact.package_id.repr.starts_with(&repr) { | 29 | if artifact.package_id.repr.starts_with(&repr) { |
28 | return PathBuf::from(&artifact.filenames[0]); | 30 | return PathBuf::from(&artifact.filenames[0]); |
29 | } | 31 | } |
@@ -33,7 +35,7 @@ pub mod fixtures { | |||
33 | } | 35 | } |
34 | } | 36 | } |
35 | 37 | ||
36 | panic!("No proc-macro dylib for {} found!", crate_name); | 38 | panic!("No proc-macro dylib for {} found!", name); |
37 | } | 39 | } |
38 | } | 40 | } |
39 | 41 | ||
@@ -41,23 +43,26 @@ fn parse_string(code: &str) -> Option<crate::rustc_server::TokenStream> { | |||
41 | Some(crate::rustc_server::TokenStream::from_str(code).unwrap()) | 43 | Some(crate::rustc_server::TokenStream::from_str(code).unwrap()) |
42 | } | 44 | } |
43 | 45 | ||
44 | pub fn assert_expand( | 46 | pub fn assert_expand(macro_name: &str, ra_fixture: &str, expect: Expect) { |
45 | crate_name: &str, | 47 | assert_expand_impl(macro_name, ra_fixture, None, expect); |
46 | macro_name: &str, | 48 | } |
47 | version: &str, | 49 | |
48 | ra_fixture: &str, | 50 | pub fn assert_expand_attr(macro_name: &str, ra_fixture: &str, attr_args: &str, expect: Expect) { |
49 | expect: &str, | 51 | assert_expand_impl(macro_name, ra_fixture, Some(attr_args), expect); |
50 | ) { | 52 | } |
51 | let path = fixtures::dylib_path(crate_name, version); | 53 | |
54 | fn assert_expand_impl(macro_name: &str, input: &str, attr: Option<&str>, expect: Expect) { | ||
55 | let path = fixtures::proc_macro_test_dylib_path(); | ||
52 | let expander = dylib::Expander::new(&path).unwrap(); | 56 | let expander = dylib::Expander::new(&path).unwrap(); |
53 | let fixture = parse_string(ra_fixture).unwrap(); | 57 | let fixture = parse_string(input).unwrap(); |
58 | let attr = attr.map(|attr| parse_string(attr).unwrap().into_subtree()); | ||
54 | 59 | ||
55 | let res = expander.expand(macro_name, &fixture.into_subtree(), None).unwrap(); | 60 | let res = expander.expand(macro_name, &fixture.into_subtree(), attr.as_ref()).unwrap(); |
56 | assert_eq_text!(&expect.trim(), &format!("{:?}", res)); | 61 | expect.assert_eq(&format!("{:?}", res)); |
57 | } | 62 | } |
58 | 63 | ||
59 | pub fn list(crate_name: &str, version: &str) -> Vec<String> { | 64 | pub fn list() -> Vec<String> { |
60 | let path = fixtures::dylib_path(crate_name, version); | 65 | let path = fixtures::proc_macro_test_dylib_path(); |
61 | let task = ListMacrosTask { lib: path }; | 66 | let task = ListMacrosTask { lib: path }; |
62 | let mut srv = ProcMacroSrv::default(); | 67 | let mut srv = ProcMacroSrv::default(); |
63 | let res = srv.list_macros(&task).unwrap(); | 68 | let res = srv.list_macros(&task).unwrap(); |