Skip to content

Commit df53b3d

Browse files
committed
test(lexer): Add frontmatter unit test
1 parent 45a1e49 commit df53b3d

File tree

1 file changed

+84
-2
lines changed

1 file changed

+84
-2
lines changed

compiler/rustc_lexer/src/tests.rs

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,16 +124,17 @@ fn test_valid_shebang() {
124124
assert_eq!(strip_shebang(input), None);
125125
}
126126

127-
fn check_lexing(src: &str, expect: Expect) {
127+
fn check_lexing(src: &str, frontmatter_allowed: FrontmatterAllowed, expect: Expect) {
128128
let actual: String =
129-
tokenize(src, FrontmatterAllowed::No).map(|token| format!("{:?}\n", token)).collect();
129+
tokenize(src, frontmatter_allowed).map(|token| format!("{:?}\n", token)).collect();
130130
expect.assert_eq(&actual)
131131
}
132132

133133
#[test]
134134
fn smoke_test() {
135135
check_lexing(
136136
"/* my source file */ fn main() { println!(\"zebra\"); }\n",
137+
FrontmatterAllowed::No,
137138
expect![[r#"
138139
Token { kind: BlockComment { doc_style: None, terminated: true }, len: 20 }
139140
Token { kind: Whitespace, len: 1 }
@@ -172,6 +173,7 @@ fn comment_flavors() {
172173
/** outer doc block */
173174
/*! inner doc block */
174175
",
176+
FrontmatterAllowed::No,
175177
expect![[r#"
176178
Token { kind: Whitespace, len: 1 }
177179
Token { kind: LineComment { doc_style: None }, len: 7 }
@@ -200,6 +202,7 @@ fn comment_flavors() {
200202
fn nested_block_comments() {
201203
check_lexing(
202204
"/* /* */ */'a'",
205+
FrontmatterAllowed::No,
203206
expect![[r#"
204207
Token { kind: BlockComment { doc_style: None, terminated: true }, len: 11 }
205208
Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -211,6 +214,7 @@ fn nested_block_comments() {
211214
fn characters() {
212215
check_lexing(
213216
"'a' ' ' '\\n'",
217+
FrontmatterAllowed::No,
214218
expect![[r#"
215219
Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
216220
Token { kind: Whitespace, len: 1 }
@@ -225,6 +229,7 @@ fn characters() {
225229
fn lifetime() {
226230
check_lexing(
227231
"'abc",
232+
FrontmatterAllowed::No,
228233
expect![[r#"
229234
Token { kind: Lifetime { starts_with_number: false }, len: 4 }
230235
"#]],
@@ -235,6 +240,7 @@ fn lifetime() {
235240
fn raw_string() {
236241
check_lexing(
237242
"r###\"\"#a\\b\x00c\"\"###",
243+
FrontmatterAllowed::No,
238244
expect![[r#"
239245
Token { kind: Literal { kind: RawStr { n_hashes: Some(3) }, suffix_start: 17 }, len: 17 }
240246
"#]],
@@ -258,6 +264,7 @@ b"a"
258264
r###"raw"###suffix
259265
br###"raw"###suffix
260266
"####,
267+
FrontmatterAllowed::No,
261268
expect![[r#"
262269
Token { kind: Whitespace, len: 1 }
263270
Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -287,3 +294,78 @@ br###"raw"###suffix
287294
"#]],
288295
)
289296
}
297+
298+
#[test]
299+
fn frontmatter_allowed() {
300+
check_lexing(
301+
r#"
302+
---cargo
303+
[dependencies]
304+
clap = "4"
305+
---
306+
307+
fn main() {}
308+
"#,
309+
FrontmatterAllowed::Yes,
310+
expect![[r#"
311+
Token { kind: Whitespace, len: 1 }
312+
Token { kind: Frontmatter { has_invalid_preceding_whitespace: false, invalid_infostring: false }, len: 38 }
313+
Token { kind: Whitespace, len: 2 }
314+
Token { kind: Ident, len: 2 }
315+
Token { kind: Whitespace, len: 1 }
316+
Token { kind: Ident, len: 4 }
317+
Token { kind: OpenParen, len: 1 }
318+
Token { kind: CloseParen, len: 1 }
319+
Token { kind: Whitespace, len: 1 }
320+
Token { kind: OpenBrace, len: 1 }
321+
Token { kind: CloseBrace, len: 1 }
322+
Token { kind: Whitespace, len: 1 }
323+
"#]],
324+
)
325+
}
326+
327+
#[test]
328+
fn frontmatter_disallowed() {
329+
check_lexing(
330+
r#"
331+
---cargo
332+
[dependencies]
333+
clap = "4"
334+
---
335+
336+
fn main() {}
337+
"#,
338+
FrontmatterAllowed::No,
339+
expect![[r#"
340+
Token { kind: Whitespace, len: 1 }
341+
Token { kind: Minus, len: 1 }
342+
Token { kind: Minus, len: 1 }
343+
Token { kind: Minus, len: 1 }
344+
Token { kind: Ident, len: 5 }
345+
Token { kind: Whitespace, len: 1 }
346+
Token { kind: OpenBracket, len: 1 }
347+
Token { kind: Ident, len: 12 }
348+
Token { kind: CloseBracket, len: 1 }
349+
Token { kind: Whitespace, len: 1 }
350+
Token { kind: Ident, len: 4 }
351+
Token { kind: Whitespace, len: 1 }
352+
Token { kind: Eq, len: 1 }
353+
Token { kind: Whitespace, len: 1 }
354+
Token { kind: Literal { kind: Str { terminated: true }, suffix_start: 3 }, len: 3 }
355+
Token { kind: Whitespace, len: 1 }
356+
Token { kind: Minus, len: 1 }
357+
Token { kind: Minus, len: 1 }
358+
Token { kind: Minus, len: 1 }
359+
Token { kind: Whitespace, len: 2 }
360+
Token { kind: Ident, len: 2 }
361+
Token { kind: Whitespace, len: 1 }
362+
Token { kind: Ident, len: 4 }
363+
Token { kind: OpenParen, len: 1 }
364+
Token { kind: CloseParen, len: 1 }
365+
Token { kind: Whitespace, len: 1 }
366+
Token { kind: OpenBrace, len: 1 }
367+
Token { kind: CloseBrace, len: 1 }
368+
Token { kind: Whitespace, len: 1 }
369+
"#]],
370+
)
371+
}

0 commit comments

Comments
 (0)