Skip to content

Commit 9c3d283

Browse files
committed
Tests
1 parent 03cc60a commit 9c3d283

14 files changed

+585
-11
lines changed

src/test/ui/macros/assert-trailing-junk.rs

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// revisions: with-generic-asset without-generic-asset
2+
// [with-generic-asset] compile-flags: --cfg feature="generic_assert"
3+
14
// Ensure assert macro does not ignore trailing garbage.
25
//
36
// See https://github.com/rust-lang/rust/issues/60024 for details.

src/test/ui/macros/assert-trailing-junk.stderr src/test/ui/macros/assert-trailing-junk.with-generic-asset.stderr

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,49 @@
11
error: expected one of `,`, `.`, `?`, or an operator, found `some`
2-
--> $DIR/assert-trailing-junk.rs:6:18
2+
--> $DIR/assert-trailing-junk.rs:9:18
33
|
44
LL | assert!(true some extra junk, "whatever");
55
| ^^^^ expected one of `,`, `.`, `?`, or an operator
66

77
error: expected one of `,`, `.`, `?`, or an operator, found `some`
8-
--> $DIR/assert-trailing-junk.rs:9:18
8+
--> $DIR/assert-trailing-junk.rs:12:18
99
|
1010
LL | assert!(true some extra junk);
1111
| ^^^^ expected one of `,`, `.`, `?`, or an operator
1212

1313
error: no rules expected the token `blah`
14-
--> $DIR/assert-trailing-junk.rs:12:30
14+
--> $DIR/assert-trailing-junk.rs:15:30
1515
|
1616
LL | assert!(true, "whatever" blah);
1717
| -^^^^ no rules expected this token in macro call
1818
| |
1919
| help: missing comma here
2020

2121
error: unexpected string literal
22-
--> $DIR/assert-trailing-junk.rs:15:18
22+
--> $DIR/assert-trailing-junk.rs:18:18
2323
|
2424
LL | assert!(true "whatever" blah);
2525
| -^^^^^^^^^^
2626
| |
2727
| help: try adding a comma
2828

2929
error: no rules expected the token `blah`
30-
--> $DIR/assert-trailing-junk.rs:15:29
30+
--> $DIR/assert-trailing-junk.rs:18:29
3131
|
3232
LL | assert!(true "whatever" blah);
3333
| -^^^^ no rules expected this token in macro call
3434
| |
3535
| help: missing comma here
3636

3737
error: macro requires an expression as an argument
38-
--> $DIR/assert-trailing-junk.rs:19:5
38+
--> $DIR/assert-trailing-junk.rs:22:5
3939
|
4040
LL | assert!(true;);
4141
| ^^^^^^^^^^^^-^
4242
| |
4343
| help: try removing semicolon
4444

4545
error: unexpected string literal
46-
--> $DIR/assert-trailing-junk.rs:22:27
46+
--> $DIR/assert-trailing-junk.rs:25:27
4747
|
4848
LL | assert!(false || true "error message");
4949
| -^^^^^^^^^^^^^^^
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
error: expected one of `,`, `.`, `?`, or an operator, found `some`
2+
--> $DIR/assert-trailing-junk.rs:9:18
3+
|
4+
LL | assert!(true some extra junk, "whatever");
5+
| ^^^^ expected one of `,`, `.`, `?`, or an operator
6+
7+
error: expected one of `,`, `.`, `?`, or an operator, found `some`
8+
--> $DIR/assert-trailing-junk.rs:12:18
9+
|
10+
LL | assert!(true some extra junk);
11+
| ^^^^ expected one of `,`, `.`, `?`, or an operator
12+
13+
error: no rules expected the token `blah`
14+
--> $DIR/assert-trailing-junk.rs:15:30
15+
|
16+
LL | assert!(true, "whatever" blah);
17+
| -^^^^ no rules expected this token in macro call
18+
| |
19+
| help: missing comma here
20+
21+
error: unexpected string literal
22+
--> $DIR/assert-trailing-junk.rs:18:18
23+
|
24+
LL | assert!(true "whatever" blah);
25+
| -^^^^^^^^^^
26+
| |
27+
| help: try adding a comma
28+
29+
error: no rules expected the token `blah`
30+
--> $DIR/assert-trailing-junk.rs:18:29
31+
|
32+
LL | assert!(true "whatever" blah);
33+
| -^^^^ no rules expected this token in macro call
34+
| |
35+
| help: missing comma here
36+
37+
error: macro requires an expression as an argument
38+
--> $DIR/assert-trailing-junk.rs:22:5
39+
|
40+
LL | assert!(true;);
41+
| ^^^^^^^^^^^^-^
42+
| |
43+
| help: try removing semicolon
44+
45+
error: unexpected string literal
46+
--> $DIR/assert-trailing-junk.rs:25:27
47+
|
48+
LL | assert!(false || true "error message");
49+
| -^^^^^^^^^^^^^^^
50+
| |
51+
| help: try adding a comma
52+
53+
error: aborting due to 7 previous errors
54+

src/test/ui/macros/assert.rs

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// revisions: with-generic-asset without-generic-asset
2+
// [with-generic-asset] compile-flags: --cfg feature="generic_assert"
3+
14
fn main() {
25
assert!(); //~ ERROR requires a boolean expression
36
assert!(struct); //~ ERROR expected expression

src/test/ui/macros/assert.stderr src/test/ui/macros/assert.with-generic-asset.stderr

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
error: macro requires a boolean expression as an argument
2-
--> $DIR/assert.rs:2:5
2+
--> $DIR/assert.rs:5:5
33
|
44
LL | assert!();
55
| ^^^^^^^^^ boolean expression required
66

77
error: expected expression, found keyword `struct`
8-
--> $DIR/assert.rs:3:13
8+
--> $DIR/assert.rs:6:13
99
|
1010
LL | assert!(struct);
1111
| ^^^^^^ expected expression
1212

1313
error: macro requires a boolean expression as an argument
14-
--> $DIR/assert.rs:4:5
14+
--> $DIR/assert.rs:7:5
1515
|
1616
LL | debug_assert!();
1717
| ^^^^^^^^^^^^^^^ boolean expression required
1818
|
1919
= note: this error originates in the macro `debug_assert` (in Nightly builds, run with -Z macro-backtrace for more info)
2020

2121
error: expected expression, found keyword `struct`
22-
--> $DIR/assert.rs:5:19
22+
--> $DIR/assert.rs:8:19
2323
|
2424
LL | debug_assert!(struct);
2525
| ^^^^^^ expected expression
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
error: macro requires a boolean expression as an argument
2+
--> $DIR/assert.rs:5:5
3+
|
4+
LL | assert!();
5+
| ^^^^^^^^^ boolean expression required
6+
7+
error: expected expression, found keyword `struct`
8+
--> $DIR/assert.rs:6:13
9+
|
10+
LL | assert!(struct);
11+
| ^^^^^^ expected expression
12+
13+
error: macro requires a boolean expression as an argument
14+
--> $DIR/assert.rs:7:5
15+
|
16+
LL | debug_assert!();
17+
| ^^^^^^^^^^^^^^^ boolean expression required
18+
|
19+
= note: this error originates in the macro `debug_assert` (in Nightly builds, run with -Z macro-backtrace for more info)
20+
21+
error: expected expression, found keyword `struct`
22+
--> $DIR/assert.rs:8:19
23+
|
24+
LL | debug_assert!(struct);
25+
| ^^^^^^ expected expression
26+
27+
error: aborting due to 4 previous errors
28+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
// aux-build:common.rs
2+
// edition:2021
3+
// ignore-tidy-linelength
4+
// run-pass
5+
6+
#![allow(path_statements, unused_allocation)]
7+
#![feature(box_syntax, core_intrinsics, generic_assert, generic_assert_internals)]
8+
9+
extern crate common;
10+
11+
// Use common::test once https://github.com/rust-lang/rust/issues/96997 is fixed
12+
macro_rules! test {
13+
(
14+
let mut $elem_ident:ident = $elem_expr:expr;
15+
[ $($assert:tt)* ] => $msg:literal
16+
) => {
17+
{
18+
#[allow(unused_assignments, unused_mut, unused_variables)]
19+
let rslt = std::panic::catch_unwind(|| {
20+
let mut $elem_ident = $elem_expr;
21+
assert!($($assert)*);
22+
});
23+
let err = rslt.unwrap_err();
24+
if let Some(elem) = err.downcast_ref::<String>() {
25+
assert_eq!(elem, &$msg);
26+
}
27+
else if let Some(elem) = err.downcast_ref::<&str>() {
28+
assert_eq!(elem, &$msg);
29+
}
30+
else {
31+
panic!("assert!( ... ) should return a string");
32+
}
33+
}
34+
}
35+
}
36+
37+
macro_rules! tests {
38+
(
39+
let mut $elem_ident:ident = $elem_expr:expr;
40+
41+
$(
42+
[ $($elem_assert:tt)* ] => $elem_msg:literal
43+
)+
44+
) => {
45+
$(
46+
test!(
47+
let mut $elem_ident = $elem_expr;
48+
[ $($elem_assert)* ] => $elem_msg
49+
);
50+
)+
51+
}
52+
}
53+
54+
const FOO: Foo = Foo { bar: 1 };
55+
56+
#[derive(Clone, Copy, Debug, PartialEq)]
57+
struct Foo {
58+
bar: i32
59+
}
60+
61+
impl Foo {
62+
fn add(&self, a: i32, b: i32) -> i32 { a + b }
63+
}
64+
65+
fn add(a: i32, b: i32) -> i32 { a + b }
66+
67+
fn main() {
68+
// ***** Allowed *****
69+
70+
tests!(
71+
let mut elem = 1i32;
72+
73+
// addr of
74+
[ &elem == &3 ] => "Assertion failed: &elem == &3\nWith captures:\n elem = 1\n"
75+
76+
// array
77+
[ [elem][0] == 3 ] => "Assertion failed: [elem][0] == 3\nWith captures:\n elem = 1\n"
78+
79+
// binary
80+
[ elem + 1 == 3 ] => "Assertion failed: elem + 1 == 3\nWith captures:\n elem = 1\n"
81+
82+
// call
83+
[ add(elem, elem) == 3 ] => "Assertion failed: add(elem, elem) == 3\nWith captures:\n elem = 1\n"
84+
85+
// cast
86+
[ elem as i32 == 3 ] => "Assertion failed: elem as i32 == 3\nWith captures:\n elem = 1\n"
87+
88+
// index
89+
[ [1i32, 1][elem as usize] == 3 ] => "Assertion failed: [1i32, 1][elem as usize] == 3\nWith captures:\n elem = 1\n"
90+
91+
// method call
92+
[ FOO.add(elem, elem) == 3 ] => "Assertion failed: FOO.add(elem, elem) == 3\nWith captures:\n elem = 1\n"
93+
94+
// paren
95+
[ (elem) == 3 ] => "Assertion failed: (elem) == 3\nWith captures:\n elem = 1\n"
96+
97+
// range
98+
[ (0..elem) == (0..3) ] => "Assertion failed: (0..elem) == (0..3)\nWith captures:\n elem = 1\n"
99+
100+
// repeat
101+
[ [elem; 1] == [3; 1] ] => "Assertion failed: [elem; 1] == [3; 1]\nWith captures:\n elem = 1\n"
102+
103+
// struct
104+
[ Foo { bar: elem } == Foo { bar: 3 } ] => "Assertion failed: Foo { bar: elem } == Foo { bar: 3 }\nWith captures:\n elem = 1\n"
105+
106+
// tuple
107+
[ (elem, 1) == (3, 3) ] => "Assertion failed: (elem, 1) == (3, 3)\nWith captures:\n elem = 1\n"
108+
109+
// unary
110+
[ -elem == -3 ] => "Assertion failed: -elem == -3\nWith captures:\n elem = 1\n"
111+
);
112+
113+
// ***** Disallowed *****
114+
115+
tests!(
116+
let mut elem = 1i32;
117+
118+
// assign
119+
[ { let local = elem; local } == 3 ] => "Assertion failed: { let local = elem; local } == 3"
120+
121+
// assign op
122+
[ { elem += 1; elem } == 3 ] => "Assertion failed: { elem += 1; elem } == 3"
123+
124+
// async
125+
[ { let _ = async { elem }; elem } == 3 ] => "Assertion failed: { let _ = async { elem }; elem } == 3"
126+
127+
// await
128+
129+
// block
130+
[ { elem } == 3 ] => "Assertion failed: { elem } == 3"
131+
132+
// box
133+
[ box elem == box 3 ] => "Assertion failed: box elem == box 3"
134+
135+
// break
136+
[ loop { break elem; } == 3 ] => "Assertion failed: loop { break elem; } == 3"
137+
138+
// closure
139+
[(|| elem)() == 3 ] => "Assertion failed: (|| elem)() == 3"
140+
141+
// const block
142+
143+
// continue
144+
145+
// err
146+
147+
// field
148+
[ FOO.bar == 3 ] => "Assertion failed: FOO.bar == 3"
149+
150+
// for loop
151+
[ { for _ in 0..elem { elem; } elem } == 3 ] => "Assertion failed: { for _ in 0..elem { elem; } elem } == 3"
152+
153+
// if
154+
[ if true { elem } else { elem } == 3 ] => "Assertion failed: if true { elem } else { elem } == 3"
155+
156+
// inline asm
157+
158+
// let
159+
[ if let true = true { elem } else { elem } == 3 ] => "Assertion failed: if let true = true { elem } else { elem } == 3"
160+
161+
// lit
162+
163+
// loop
164+
[ loop { elem; break elem; } == 3 ] => "Assertion failed: loop { elem; break elem; } == 3"
165+
166+
// mac call
167+
168+
// match
169+
[ match elem { _ => elem } == 3 ] => "Assertion failed: match elem { _ => elem, } == 3"
170+
171+
// ret
172+
[ (|| { return elem; })() == 3 ] => "Assertion failed: (|| { return elem; })() == 3"
173+
174+
// try
175+
[ (|| { Some(Some(elem)?) })() == Some(3) ] => "Assertion failed: (|| { Some(Some(elem)?) })() == Some(3)"
176+
177+
// try block
178+
179+
// underscore
180+
181+
// while
182+
[ { while false { elem; break; } elem } == 3 ] => "Assertion failed: { while false { elem; break; } elem } == 3"
183+
184+
// yeet
185+
186+
// yield
187+
);
188+
}

0 commit comments

Comments
 (0)