Skip to content

Commit 713c47f

Browse files
committed
Add basic edition inline parser test support
1 parent 7a5bf92 commit 713c47f

File tree

8 files changed

+185
-172
lines changed

8 files changed

+185
-172
lines changed

crates/parser/src/grammar/expressions/atom.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ pub(super) fn atom_expr(
145145
stmt_list(p);
146146
m.complete(p, BLOCK_EXPR)
147147
}
148-
// test_err gen_blocks
148+
// test gen_blocks 2024
149149
// pub fn main() {
150150
// gen { yield ""; };
151151
// async gen { yield ""; };

crates/parser/src/tests.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ fn lex(text: &str) -> String {
5151
fn parse_ok() {
5252
for case in TestCase::list("parser/ok") {
5353
let _guard = stdx::panic_context::enter(format!("{:?}", case.rs));
54-
let (actual, errors) = parse(TopEntryPoint::SourceFile, &case.text);
54+
let (actual, errors) = parse(TopEntryPoint::SourceFile, &case.text, Edition::CURRENT);
5555
assert!(!errors, "errors in an OK file {}:\n{actual}", case.rs.display());
5656
expect_file![case.rast].assert_eq(&actual);
5757
}
@@ -61,16 +61,16 @@ fn parse_ok() {
6161
fn parse_err() {
6262
for case in TestCase::list("parser/err") {
6363
let _guard = stdx::panic_context::enter(format!("{:?}", case.rs));
64-
let (actual, errors) = parse(TopEntryPoint::SourceFile, &case.text);
64+
let (actual, errors) = parse(TopEntryPoint::SourceFile, &case.text, Edition::CURRENT);
6565
assert!(errors, "no errors in an ERR file {}:\n{actual}", case.rs.display());
6666
expect_file![case.rast].assert_eq(&actual)
6767
}
6868
}
6969

70-
fn parse(entry: TopEntryPoint, text: &str) -> (String, bool) {
71-
let lexed = LexedStr::new(Edition::CURRENT, text);
70+
fn parse(entry: TopEntryPoint, text: &str, edition: Edition) -> (String, bool) {
71+
let lexed = LexedStr::new(edition, text);
7272
let input = lexed.to_input();
73-
let output = entry.parse(&input, Edition::CURRENT);
73+
let output = entry.parse(&input, edition);
7474

7575
let mut buf = String::new();
7676
let mut errors = Vec::new();
@@ -153,9 +153,19 @@ impl TestCase {
153153

154154
#[track_caller]
155155
fn run_and_expect_no_errors(path: &str) {
156+
run_and_expect_no_errors_with_edition(path, Edition::CURRENT)
157+
}
158+
159+
#[track_caller]
160+
fn run_and_expect_errors(path: &str) {
161+
run_and_expect_errors_with_edition(path, Edition::CURRENT)
162+
}
163+
164+
#[track_caller]
165+
fn run_and_expect_no_errors_with_edition(path: &str, edition: Edition) {
156166
let path = PathBuf::from(path);
157167
let text = std::fs::read_to_string(&path).unwrap();
158-
let (actual, errors) = parse(TopEntryPoint::SourceFile, &text);
168+
let (actual, errors) = parse(TopEntryPoint::SourceFile, &text, edition);
159169
assert!(!errors, "errors in an OK file {}:\n{actual}", path.display());
160170
let mut p = PathBuf::from("..");
161171
p.push(path);
@@ -164,10 +174,10 @@ fn run_and_expect_no_errors(path: &str) {
164174
}
165175

166176
#[track_caller]
167-
fn run_and_expect_errors(path: &str) {
177+
fn run_and_expect_errors_with_edition(path: &str, edition: Edition) {
168178
let path = PathBuf::from(path);
169179
let text = std::fs::read_to_string(&path).unwrap();
170-
let (actual, errors) = parse(TopEntryPoint::SourceFile, &text);
180+
let (actual, errors) = parse(TopEntryPoint::SourceFile, &text, edition);
171181
assert!(errors, "no errors in an ERR file {}:\n{actual}", path.display());
172182
let mut p = PathBuf::from("..");
173183
p.push(path);

crates/parser/src/tests/top_entries.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,6 @@ fn expr() {
307307

308308
#[track_caller]
309309
fn check(entry: TopEntryPoint, input: &str, expect: expect_test::Expect) {
310-
let (parsed, _errors) = super::parse(entry, input);
310+
let (parsed, _errors) = super::parse(entry, input, crate::Edition::CURRENT);
311311
expect.assert_eq(&parsed)
312312
}

crates/parser/test_data/generated/runner.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mod ok {
2-
use crate::tests::run_and_expect_no_errors;
2+
use crate::tests::*;
33
#[test]
44
fn anonymous_const() {
55
run_and_expect_no_errors("test_data/parser/inline/ok/anonymous_const.rs");
@@ -267,6 +267,13 @@ mod ok {
267267
run_and_expect_no_errors("test_data/parser/inline/ok/function_where_clause.rs");
268268
}
269269
#[test]
270+
fn gen_blocks() {
271+
run_and_expect_no_errors_with_edition(
272+
"test_data/parser/inline/ok/gen_blocks.rs",
273+
crate::Edition::Edition2024,
274+
);
275+
}
276+
#[test]
270277
fn generic_arg() { run_and_expect_no_errors("test_data/parser/inline/ok/generic_arg.rs"); }
271278
#[test]
272279
fn generic_param_attribute() {
@@ -666,7 +673,7 @@ mod ok {
666673
fn yield_expr() { run_and_expect_no_errors("test_data/parser/inline/ok/yield_expr.rs"); }
667674
}
668675
mod err {
669-
use crate::tests::run_and_expect_errors;
676+
use crate::tests::*;
670677
#[test]
671678
fn angled_path_without_qual() {
672679
run_and_expect_errors("test_data/parser/inline/err/angled_path_without_qual.rs");
@@ -708,8 +715,6 @@ mod err {
708715
run_and_expect_errors("test_data/parser/inline/err/fn_pointer_type_missing_fn.rs");
709716
}
710717
#[test]
711-
fn gen_blocks() { run_and_expect_errors("test_data/parser/inline/err/gen_blocks.rs"); }
712-
#[test]
713718
fn gen_fn() { run_and_expect_errors("test_data/parser/inline/err/gen_fn.rs"); }
714719
#[test]
715720
fn generic_arg_list_recover() {

crates/parser/test_data/parser/inline/err/gen_blocks.rast

Lines changed: 0 additions & 139 deletions
This file was deleted.
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
SOURCE_FILE
2+
FN
3+
COMMENT "// 2024"
4+
WHITESPACE "\n"
5+
VISIBILITY
6+
PUB_KW "pub"
7+
WHITESPACE " "
8+
FN_KW "fn"
9+
WHITESPACE " "
10+
NAME
11+
IDENT "main"
12+
PARAM_LIST
13+
L_PAREN "("
14+
R_PAREN ")"
15+
WHITESPACE " "
16+
BLOCK_EXPR
17+
STMT_LIST
18+
L_CURLY "{"
19+
WHITESPACE "\n "
20+
EXPR_STMT
21+
BLOCK_EXPR
22+
GEN_KW "gen"
23+
WHITESPACE " "
24+
STMT_LIST
25+
L_CURLY "{"
26+
WHITESPACE " "
27+
EXPR_STMT
28+
YIELD_EXPR
29+
YIELD_KW "yield"
30+
WHITESPACE " "
31+
LITERAL
32+
STRING "\"\""
33+
SEMICOLON ";"
34+
WHITESPACE " "
35+
R_CURLY "}"
36+
SEMICOLON ";"
37+
WHITESPACE "\n "
38+
EXPR_STMT
39+
BLOCK_EXPR
40+
ASYNC_KW "async"
41+
WHITESPACE " "
42+
GEN_KW "gen"
43+
WHITESPACE " "
44+
STMT_LIST
45+
L_CURLY "{"
46+
WHITESPACE " "
47+
EXPR_STMT
48+
YIELD_EXPR
49+
YIELD_KW "yield"
50+
WHITESPACE " "
51+
LITERAL
52+
STRING "\"\""
53+
SEMICOLON ";"
54+
WHITESPACE " "
55+
R_CURLY "}"
56+
SEMICOLON ";"
57+
WHITESPACE "\n "
58+
EXPR_STMT
59+
BLOCK_EXPR
60+
GEN_KW "gen"
61+
WHITESPACE " "
62+
MOVE_KW "move"
63+
WHITESPACE " "
64+
STMT_LIST
65+
L_CURLY "{"
66+
WHITESPACE " "
67+
EXPR_STMT
68+
YIELD_EXPR
69+
YIELD_KW "yield"
70+
WHITESPACE " "
71+
LITERAL
72+
STRING "\"\""
73+
SEMICOLON ";"
74+
WHITESPACE " "
75+
R_CURLY "}"
76+
SEMICOLON ";"
77+
WHITESPACE "\n "
78+
EXPR_STMT
79+
BLOCK_EXPR
80+
ASYNC_KW "async"
81+
WHITESPACE " "
82+
GEN_KW "gen"
83+
WHITESPACE " "
84+
MOVE_KW "move"
85+
WHITESPACE " "
86+
STMT_LIST
87+
L_CURLY "{"
88+
WHITESPACE " "
89+
EXPR_STMT
90+
YIELD_EXPR
91+
YIELD_KW "yield"
92+
WHITESPACE " "
93+
LITERAL
94+
STRING "\"\""
95+
SEMICOLON ";"
96+
WHITESPACE " "
97+
R_CURLY "}"
98+
SEMICOLON ";"
99+
WHITESPACE "\n"
100+
R_CURLY "}"
101+
WHITESPACE "\n"

crates/parser/test_data/parser/inline/err/gen_blocks.rs renamed to crates/parser/test_data/parser/inline/ok/gen_blocks.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// 2024
12
pub fn main() {
23
gen { yield ""; };
34
async gen { yield ""; };

0 commit comments

Comments
 (0)