use super::*;
#[test]
fn space_after_glue_marker_survives_inside_the_text_node() {
let src = "flow f() {\n <> But surely.\n}\n";
let p = assert_lossless(src);
assert!(p.errors().is_empty(), "errors: {:?}", p.errors());
let line = p
.syntax()
.descendants()
.find(|n| n.kind() == SyntaxKind::CONTENT_LINE)
.expect("CONTENT_LINE");
assert!(has_node_kind(&line, SyntaxKind::GLUE_NODE));
assert_eq!(
text_run_concat(&line),
" But surely.",
"space after `<>` must be folded into the following TEXT node"
);
}
#[test]
fn interior_prose_whitespace_between_words_is_unchanged() {
let src = "flow f() {\n You have three gold coins.\n}\n";
let p = assert_lossless(src);
assert!(p.errors().is_empty(), "errors: {:?}", p.errors());
let line = p
.syntax()
.descendants()
.find(|n| n.kind() == SyntaxKind::CONTENT_LINE)
.expect("CONTENT_LINE");
assert_eq!(text_run_concat(&line), "You have three gold coins.");
}
#[test]
fn labeled_content_line_produces_a_label_node() {
let src = "flow f() {\n (start) You arrive at the garden.\n}\n";
let p = assert_lossless(src);
assert!(p.errors().is_empty(), "errors: {:?}", p.errors());
let content_line = p
.syntax()
.descendants()
.find(|n| n.kind() == SyntaxKind::CONTENT_LINE)
.expect("CONTENT_LINE");
assert!(has_node_kind(&content_line, SyntaxKind::LABEL));
assert!(has_node_kind(&content_line, SyntaxKind::TEXT));
}
#[test]
fn labeled_content_line_as_backward_loop_divert_target() {
let src = concat!(
"flow loop() {\n",
" (start) You spin around.\n",
" {?\n",
" * [Again] -> start\n",
" * [Stop] -> END\n",
" }\n",
"}\n",
);
let p = assert_lossless(src);
assert!(p.errors().is_empty(), "errors: {:?}", p.errors());
assert!(has_node_kind(&p.syntax(), SyntaxKind::LABEL));
assert_eq!(count_node_kind(&p.syntax(), SyntaxKind::DIVERT_STMT), 2);
}
#[test]
fn unlabeled_prose_starting_with_paren_is_unaffected() {
let src = "flow f() {\n (a very long aside) continues here.\n}\n";
let p = assert_lossless(src);
assert!(p.errors().is_empty(), "errors: {:?}", p.errors());
assert!(!has_node_kind(&p.syntax(), SyntaxKind::LABEL));
}
#[test]
fn label_inside_conditional_body_is_still_a_content_line_label() {
let src = "flow f() {\n {if hp > 0: (alive) You live.}\n}\n";
let p = assert_lossless(src);
assert!(p.errors().is_empty(), "errors: {:?}", p.errors());
assert!(has_node_kind(&p.syntax(), SyntaxKind::LABEL));
}