use text_trees::*; fn make_tree() -> StringTreeNode { StringTreeNode::with_child_nodes( "root".to_string(), vec![ "Uncle".into(), StringTreeNode::with_child_nodes( "Parent".to_string(), vec![ StringTreeNode::with_children( "Child 1".to_string(), vec!["Grand Child 1".into()].into_iter(), ), StringTreeNode::with_child_nodes( "Child 2".to_string(), vec![StringTreeNode::with_child_nodes( "Grand Child 2".to_string(), vec![StringTreeNode::with_children( "Great Grand Child 2".to_string(), vec!["Great Great Grand Child 2".to_string()].into_iter(), )] .into_iter(), )] .into_iter(), ), ] .into_iter(), ), StringTreeNode::with_children( "Aunt".to_string(), vec!["Child 3".to_string()].into_iter(), ), ] .into_iter(), ) } #[test] fn test_ascii_below_tree() { let tree = make_tree(); let result = tree.to_string_with_format(&TreeFormatting::dir_tree(FormatCharacters::ascii())); assert!(result.is_ok()); let result = result.unwrap(); println!("{}", result); assert_eq!( result, r#"root +-- Uncle +-- Parent | +-- Child 1 | | '-- Grand Child 1 | '-- Child 2 | '-- Grand Child 2 | '-- Great Grand Child 2 | '-- Great Great Grand Child 2 '-- Aunt '-- Child 3 "# .to_string() ); } #[test] fn test_box_char_below_tree() { let tree = make_tree(); let result = tree.to_string_with_format(&TreeFormatting::dir_tree(FormatCharacters::box_chars())); assert!(result.is_ok()); let result = result.unwrap(); println!("{}", result); assert_eq!( result, r#"root ├── Uncle ├── Parent │ ├── Child 1 │ │ └── Grand Child 1 │ └── Child 2 │ └── Grand Child 2 │ └── Great Grand Child 2 │ └── Great Great Grand Child 2 └── Aunt └── Child 3 "# .to_string() ); } #[test] fn test_ascii_side_tree() { let tree = make_tree(); let result = tree.to_string_with_format(&TreeFormatting::dir_tree_left(FormatCharacters::ascii())); assert!(result.is_ok()); let result = result.unwrap(); println!("{}", result); assert_eq!( result, r#"+ root +--- Uncle +--, Parent | +--, Child 1 | | '--- Grand Child 1 | '--, Child 2 | '--, Grand Child 2 | '--, Great Grand Child 2 | '--- Great Great Grand Child 2 '--, Aunt '--- Child 3 "# .to_string() ); } #[test] fn test_box_char_side_tree() { let tree = make_tree(); let result = tree.to_string_with_format(&TreeFormatting::dir_tree_left(FormatCharacters::box_chars())); assert!(result.is_ok()); let result = result.unwrap(); println!("{}", result); assert_eq!( result, r#"┌ root ├─── Uncle ├──┬ Parent │ ├──┬ Child 1 │ │ └─── Grand Child 1 │ └──┬ Child 2 │ └──┬ Grand Child 2 │ └──┬ Great Grand Child 2 │ └─── Great Great Grand Child 2 └──┬ Aunt └─── Child 3 "# .to_string() ); } #[test] fn test_spacing_in_tree() { let tree = make_tree(); let format = TreeFormatting { prefix_str: Some(".. ".to_string()), orientation: TreeOrientation::TopDown, anchor: AnchorPosition::Left, chars: FormatCharacters { down_facing_angle: '┌', down_facing_tee: '┬', vertical_line: '│', horizontal_line: '─', horizontal_space: '#', horizontal_line_count: 5, right_facing_tee: '├', right_facing_angle: '└', label_space_char: '.', label_space_count: 2, }, }; let result = tree.to_string_with_format(&format); assert!(result.is_ok()); let result = result.unwrap(); println!("{}", result); assert_eq!( result, r#".. ┌..root .. ├──────..Uncle .. ├─────┬..Parent .. │#####├─────┬..Child 1 .. │#####│#####└──────..Grand Child 1 .. │#####└─────┬..Child 2 .. │###########└─────┬..Grand Child 2 .. │#################└─────┬..Great Grand Child 2 .. │#######################└──────..Great Great Grand Child 2 .. └─────┬..Aunt .. ######└──────..Child 3 "# .to_string() ); }