#![allow(missing_docs)]
#![allow(clippy::unwrap_used)]
use noyalib::cst::{GreenChild, GreenNode, parse_document};
fn walk(node: &GreenNode, src: &str, mut offset: usize, saw_token: &mut bool, saw_node: &mut bool) {
for c in node.children() {
match c {
GreenChild::Token { .. } => {
let t = c.token_text(src, offset).expect("token carries text");
assert!(!t.is_empty(), "token text should be non-empty");
*saw_token = true;
}
GreenChild::Node(inner) => {
assert_eq!(c.token_text(src, offset), None);
*saw_node = true;
walk(inner, src, offset, saw_token, saw_node);
}
}
offset += c.text_len();
}
}
#[test]
fn green_child_token_text_covers_both_arms() {
let doc = parse_document("a: 1\n").unwrap();
let mut saw_token = false;
let mut saw_node = false;
walk(doc.syntax(), doc.source(), 0, &mut saw_token, &mut saw_node);
assert!(saw_token, "expected at least one Token child");
assert!(saw_node, "expected at least one Node child");
}