use nu_test_support::{nu, pipeline}; #[test] fn table_to_xml_text_and_from_xml_text_back_into_table() { let actual = nu!( cwd: "tests/fixtures/formats", pipeline( r#" open jt.xml | to xml | from xml | get content | where tag == channel | get content | flatten | where tag == item | get content | flatten | where tag == guid | get 0.attributes.isPermaLink "# )); assert_eq!(actual.out, "true"); } #[test] fn to_xml_error_unknown_column() { let actual = nu!( cwd: "tests/fixtures/formats", pipeline( r#" {tag: a bad_column: b} | to xml "# )); assert!(actual.err.contains("Invalid column \"bad_column\"")); } #[test] fn to_xml_error_no_tag() { let actual = nu!( cwd: "tests/fixtures/formats", pipeline( r#" {attributes: {a: b c: d}} | to xml "# )); assert!(actual.err.contains("Tag missing")); } #[test] fn to_xml_error_tag_not_string() { let actual = nu!( cwd: "tests/fixtures/formats", pipeline( r#" {tag: 1 attributes: {a: b c: d}} | to xml "# )); assert!(actual.err.contains("not a string")); } #[test] fn to_xml_partial_escape() { let actual = nu!( cwd: "tests/fixtures/formats", pipeline( r#" { tag: a attributes: { a: "'a'\\" } content: [ `'"qwe\` ] } | to xml --partial-escape "# )); assert_eq!(actual.out, r#"'"qwe\"#); } #[test] fn to_xml_pi_comment_not_escaped() { // PI and comment content should not be escaped let actual = nu!( cwd: "tests/fixtures/formats", pipeline( r#" { tag: a content: [ {tag: ?qwe content: `"'<>&`} {tag: ! content: `"'<>&`} ] } | to xml "# )); assert_eq!(actual.out, r#"&?>"#); } #[test] fn to_xml_self_closed() { let actual = nu!( cwd: "tests/fixtures/formats", pipeline( r#" { tag: root content: [ [tag attributes content]; [a null null] [b {e: r} null] [c {t: y} []] ] } | to xml --self-closed "# )); assert_eq!(actual.out, r#""#); }