use crate::parser::tests::cst::{ExpectedNode, assert_equivalent};
use crate::{SyntaxKind, parse};
#[test]
fn implicit_seq_two() {
assert_equivalent(
parse("{a|b}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
IMPLICIT_SEQUENCE {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}),
);
}
#[test]
fn implicit_seq_three() {
assert_equivalent(
parse("{a|b|c}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
IMPLICIT_SEQUENCE {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}),
);
}
#[test]
fn implicit_seq_four_sentences() {
assert_equivalent(
parse("{First.|Second.|Third.|Fourth.}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
IMPLICIT_SEQUENCE {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}),
);
}
#[test]
fn implicit_seq_empty_first() {
assert_equivalent(
parse("{|b|c}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
IMPLICIT_SEQUENCE {
BRANCH_CONTENT
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}),
);
}
#[test]
fn implicit_seq_empty_middle() {
assert_equivalent(
parse("{a||c}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
IMPLICIT_SEQUENCE {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}),
);
}
#[test]
fn implicit_seq_empty_last() {
assert_equivalent(
parse("{a|b|}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
IMPLICIT_SEQUENCE {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT
}
}
}
}
}),
);
}
#[test]
fn implicit_seq_with_nested() {
assert_equivalent(
parse("{The {&big|small} dog.|The cat.}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
IMPLICIT_SEQUENCE {
BRANCH_CONTENT {
TEXT
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_SYMBOL_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}),
);
}
#[test]
fn implicit_seq_with_diverts() {
assert_equivalent(
parse("{->Fish1->|->Fish2->|nothing.}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
IMPLICIT_SEQUENCE {
BRANCH_CONTENT {
DIVERT_NODE {
TUNNEL_CALL_NODE {
DIVERT_TARGET_WITH_ARGS {
PATH
}
}
}
}
BRANCH_CONTENT {
DIVERT_NODE {
TUNNEL_CALL_NODE {
DIVERT_TARGET_WITH_ARGS {
PATH
}
}
}
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}),
);
}
#[test]
fn sym_seq_cycle() {
assert_equivalent(
parse("{&first|second|third}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_SYMBOL_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn sym_seq_once() {
assert_equivalent(
parse("{!first|second}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_SYMBOL_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn sym_seq_shuffle() {
assert_equivalent(
parse("{~first|second|third}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_SYMBOL_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn sym_seq_stopping() {
assert_equivalent(
parse("{$first|second}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_SYMBOL_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn sym_seq_combined() {
assert_equivalent(
parse("{&!first|second}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_SYMBOL_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn sym_seq_two_branches() {
assert_equivalent(
parse("{&a|b}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_SYMBOL_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn word_seq_stopping() {
assert_equivalent(
parse("{stopping: first|second|third}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_WORD_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn word_seq_cycle() {
assert_equivalent(
parse("{cycle: a|b|c}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_WORD_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn word_seq_shuffle() {
assert_equivalent(
parse("{shuffle: a|b|c}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_WORD_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn word_seq_once() {
assert_equivalent(
parse("{once: a|b}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_WORD_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}
#[test]
fn word_seq_two_branches() {
assert_equivalent(
parse("{stopping: a|b}\n"),
cst!(SOURCE_FILE {
CONTENT_LINE {
MIXED_CONTENT {
INLINE_LOGIC {
SEQUENCE_WITH_ANNOTATION {
SEQUENCE_WORD_ANNOTATION
INLINE_BRANCHES_SEQ {
BRANCH_CONTENT {
TEXT
}
BRANCH_CONTENT {
TEXT
}
}
}
}
}
}
}),
);
}