Skip to content

Commit c88c789

Browse files
committed
test(toml): Expand code fence tests
1 parent 2ea0d97 commit c88c789

File tree

1 file changed

+211
-0
lines changed

1 file changed

+211
-0
lines changed

src/cargo/util/toml/embedded.rs

Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ fn sanitize_name(name: &str) -> String {
188188
name
189189
}
190190

191+
#[derive(Debug)]
191192
struct Source<'s> {
192193
shebang: Option<&'s str>,
193194
info: Option<&'s str>,
@@ -298,6 +299,32 @@ mod test_expand {
298299
}
299300
}
300301

302+
#[track_caller]
303+
fn assert_err(
304+
result: Result<impl std::fmt::Debug, impl std::fmt::Display>,
305+
err: impl IntoData,
306+
) {
307+
match result {
308+
Ok(d) => panic!("unexpected Ok({d:#?})"),
309+
Err(actual) => snapbox::assert_data_eq!(actual.to_string(), err.raw()),
310+
}
311+
}
312+
313+
#[test]
314+
fn split_default() {
315+
assert_source(
316+
r#"fn main() {}
317+
"#,
318+
str![[r#"
319+
shebang: None
320+
info: None
321+
frontmatter: None
322+
content: "fn main() {}\n"
323+
324+
"#]],
325+
);
326+
}
327+
301328
#[test]
302329
fn split_dependencies() {
303330
assert_source(
@@ -317,6 +344,190 @@ content: "fn main() {}\n"
317344
);
318345
}
319346

347+
#[test]
348+
fn split_infostring() {
349+
assert_source(
350+
r#"---cargo
351+
[dependencies]
352+
time="0.1.25"
353+
---
354+
fn main() {}
355+
"#,
356+
str![[r#"
357+
shebang: None
358+
info: "cargo"
359+
frontmatter: "[dependencies]\ntime=\"0.1.25\"\n"
360+
content: "fn main() {}\n"
361+
362+
"#]],
363+
);
364+
}
365+
366+
#[test]
367+
fn split_infostring_whitespace() {
368+
assert_source(
369+
r#"--- cargo
370+
[dependencies]
371+
time="0.1.25"
372+
---
373+
fn main() {}
374+
"#,
375+
str![[r#"
376+
shebang: None
377+
info: " cargo"
378+
frontmatter: "[dependencies]\ntime=\"0.1.25\"\n"
379+
content: "fn main() {}\n"
380+
381+
"#]],
382+
);
383+
}
384+
385+
#[test]
386+
fn split_shebang() {
387+
assert_source(
388+
r#"#!/usr/bin/env cargo
389+
---
390+
[dependencies]
391+
time="0.1.25"
392+
---
393+
fn main() {}
394+
"#,
395+
str![[r##"
396+
shebang: "#!/usr/bin/env cargo"
397+
info: None
398+
frontmatter: "[dependencies]\ntime=\"0.1.25\"\n"
399+
content: "fn main() {}\n"
400+
401+
"##]],
402+
);
403+
}
404+
405+
#[test]
406+
fn split_crlf() {
407+
assert_source(
408+
"#!/usr/bin/env cargo\r\n---\r\n[dependencies]\r\ntime=\"0.1.25\"\r\n---\r\nfn main() {}",
409+
str![[r##"
410+
shebang: "#!/usr/bin/env cargo\r"
411+
info: ""
412+
frontmatter: "[dependencies]\r\ntime=\"0.1.25\"\r\n"
413+
content: "fn main() {}"
414+
415+
"##]]
416+
);
417+
}
418+
419+
#[test]
420+
fn split_leading_newlines() {
421+
assert_source(
422+
r#"#!/usr/bin/env cargo
423+
424+
425+
426+
---
427+
[dependencies]
428+
time="0.1.25"
429+
---
430+
431+
432+
fn main() {}
433+
"#,
434+
str![[r##"
435+
shebang: "#!/usr/bin/env cargo"
436+
info: None
437+
frontmatter: None
438+
content: " \n\n\n---\n[dependencies]\ntime=\"0.1.25\"\n---\n\n\nfn main() {}\n"
439+
440+
"##]],
441+
);
442+
}
443+
444+
#[test]
445+
fn split_attribute() {
446+
assert_source(
447+
r#"#[allow(dead_code)]
448+
---
449+
[dependencies]
450+
time="0.1.25"
451+
---
452+
fn main() {}
453+
"#,
454+
str![[r##"
455+
shebang: None
456+
info: None
457+
frontmatter: None
458+
content: "#[allow(dead_code)]\n---\n[dependencies]\ntime=\"0.1.25\"\n---\nfn main() {}\n"
459+
460+
"##]],
461+
);
462+
}
463+
464+
#[test]
465+
fn split_extra_dash() {
466+
assert_source(
467+
r#"#!/usr/bin/env cargo
468+
----------
469+
[dependencies]
470+
time="0.1.25"
471+
----------
472+
473+
fn main() {}"#,
474+
str![[r##"
475+
shebang: "#!/usr/bin/env cargo"
476+
info: None
477+
frontmatter: "[dependencies]\ntime=\"0.1.25\"\n"
478+
content: "\nfn main() {}"
479+
480+
"##]],
481+
);
482+
}
483+
484+
#[test]
485+
fn split_too_few_dashes() {
486+
assert_err(
487+
split_source(
488+
r#"#!/usr/bin/env cargo
489+
--
490+
[dependencies]
491+
time="0.1.25"
492+
--
493+
fn main() {}
494+
"#,
495+
),
496+
str!["found 2 `-` in rust frontmatter, expected at least 3"],
497+
);
498+
}
499+
500+
#[test]
501+
fn split_mismatched_dashes() {
502+
assert_err(
503+
split_source(
504+
r#"#!/usr/bin/env cargo
505+
---
506+
[dependencies]
507+
time="0.1.25"
508+
----
509+
fn main() {}
510+
"#,
511+
),
512+
str!["unexpected trailing content on closing fence: `-`"],
513+
);
514+
}
515+
516+
#[test]
517+
fn split_missing_close() {
518+
assert_err(
519+
split_source(
520+
r#"#!/usr/bin/env cargo
521+
---
522+
[dependencies]
523+
time="0.1.25"
524+
fn main() {}
525+
"#,
526+
),
527+
str!["no closing `---` found for frontmatter"],
528+
);
529+
}
530+
320531
#[track_caller]
321532
fn expand(source: &str) -> String {
322533
let shell = crate::Shell::from_write(Box::new(Vec::new()));

0 commit comments

Comments
 (0)