Add tests
This commit is contained in:
parent
50fcd454c7
commit
5d7b6595ce
37
src/test/ui/proc-macro/auxiliary/assert-span-pos.rs
Normal file
37
src/test/ui/proc-macro/auxiliary/assert-span-pos.rs
Normal file
@ -0,0 +1,37 @@
|
||||
// force-host
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![feature(proc_macro_diagnostic, proc_macro_span)]
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
use proc_macro::{TokenStream, TokenTree, Span};
|
||||
|
||||
fn lit_span(tt: TokenTree) -> (Span, String) {
|
||||
match tt {
|
||||
TokenTree::Literal(..) |
|
||||
TokenTree::Group(..) => (tt.span(), tt.to_string().trim().into()),
|
||||
_ => panic!("expected a literal in token tree, got: {:?}", tt)
|
||||
}
|
||||
}
|
||||
|
||||
#[proc_macro]
|
||||
pub fn assert_span_pos(input: TokenStream) -> TokenStream {
|
||||
let mut tokens = input.into_iter();
|
||||
let (sp1, str1) = lit_span(tokens.next().expect("first argument"));
|
||||
let _ = tokens.next();
|
||||
let (_sp2, str2) = lit_span(tokens.next().expect("second argument"));
|
||||
|
||||
let line: usize = str1.parse().unwrap();
|
||||
let col: usize = str2.parse().unwrap();
|
||||
|
||||
let sp1s = sp1.start();
|
||||
if (line, col) != (sp1s.line, sp1s.column) {
|
||||
let msg = format!("line/column mismatch: ({}, {}) != ({}, {})", line, col,
|
||||
sp1s.line, sp1s.column);
|
||||
sp1.error(msg).emit();
|
||||
}
|
||||
|
||||
"".parse().unwrap()
|
||||
}
|
16
src/test/ui/proc-macro/span-absolute-posititions.rs
Normal file
16
src/test/ui/proc-macro/span-absolute-posititions.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// aux-build:assert-span-pos.rs
|
||||
// ignore-tidy-tab
|
||||
extern crate assert_span_pos;
|
||||
|
||||
assert_span_pos::assert_span_pos!(5, 35);
|
||||
|
||||
// Test space indentation
|
||||
assert_span_pos::assert_span_pos!(8, 39);
|
||||
// Test tab indentation
|
||||
assert_span_pos::assert_span_pos!(10, 36);
|
||||
|
||||
// Test that the macro actually emits an error on a mismatch:
|
||||
assert_span_pos::assert_span_pos!(0, 35); //~ ERROR line/column mismatch: (0, 35) != (13, 35)
|
||||
assert_span_pos::assert_span_pos!(14, 0); //~ ERROR line/column mismatch: (14, 0) != (14, 35)
|
||||
|
||||
fn main() {}
|
14
src/test/ui/proc-macro/span-absolute-posititions.stderr
Normal file
14
src/test/ui/proc-macro/span-absolute-posititions.stderr
Normal file
@ -0,0 +1,14 @@
|
||||
error: line/column mismatch: (0, 35) != (13, 35)
|
||||
--> $DIR/span-absolute-posititions.rs:13:35
|
||||
|
|
||||
LL | assert_span_pos::assert_span_pos!(0, 35);
|
||||
| ^
|
||||
|
||||
error: line/column mismatch: (14, 0) != (14, 35)
|
||||
--> $DIR/span-absolute-posititions.rs:14:35
|
||||
|
|
||||
LL | assert_span_pos::assert_span_pos!(14, 0);
|
||||
| ^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
Loading…
x
Reference in New Issue
Block a user