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#""#);
}