Terrace/packages/rust/tests/integration_test.rs
Joshua Bemenderfer 9d9757e868 Updates.
2025-09-08 16:24:38 -04:00

85 lines
2.3 KiB
Rust

//! Integration tests for the Terrace Rust implementation.
use terrace::{TerraceDocument, StringReader};
#[tokio::test]
async fn test_basic_parsing() {
let content = r#"
config
database
host localhost
port 5432
server
port 3000
host 0.0.0.0
"#;
let reader = StringReader::new(content);
let mut doc = TerraceDocument::with_reader(reader);
let mut nodes = Vec::new();
while let Some(node) = doc.next().await {
if !node.is_empty() {
nodes.push((node.level(), node.head().to_string(), node.tail().to_string()));
}
}
// Verify the structure
assert!(nodes.len() >= 6); // At least config, database, host, port, server, port, host
// Find config node
let config_node = nodes.iter().find(|(_, head, _)| head == "config").unwrap();
assert_eq!(config_node.0, 0);
// Find database node
let database_node = nodes.iter().find(|(_, head, _)| head == "database").unwrap();
assert_eq!(database_node.0, 1);
// Find host nodes
let host_nodes: Vec<_> = nodes.iter().filter(|(_, head, _)| head == "host").collect();
assert_eq!(host_nodes.len(), 2);
assert_eq!(host_nodes[0].0, 2); // database host
assert_eq!(host_nodes[1].0, 2); // server host
}
#[tokio::test]
async fn test_navigation_methods() {
let content = "root\n child1\n child2\n grandchild\n child3";
let reader = StringReader::new(content);
let doc = TerraceDocument::with_reader(reader);
let nodes = doc.collect().await;
// Test basic properties
assert_eq!(nodes[0].head(), "root");
assert_eq!(nodes[0].level(), 0);
assert_eq!(nodes[1].head(), "child1");
assert_eq!(nodes[1].level(), 1);
assert_eq!(nodes[2].head(), "child2");
assert_eq!(nodes[2].level(), 1);
assert_eq!(nodes[3].head(), "grandchild");
assert_eq!(nodes[3].level(), 2);
assert_eq!(nodes[4].head(), "child3");
assert_eq!(nodes[4].level(), 1);
}
#[tokio::test]
async fn test_empty_and_whitespace() {
let content = "line1\n\n \nline2";
let reader = StringReader::new(content);
let mut doc = TerraceDocument::with_reader(reader);
let mut non_empty_count = 0;
while let Some(node) = doc.next().await {
if !node.is_empty() {
non_empty_count += 1;
}
}
assert_eq!(non_empty_count, 2);
}