#! [forbid(unsafe_code)]
extern crate xml;
use std::io::{BufReader, SeekFrom};
use std::io::prelude::*;
use std::fs::File;
use std::str;
use xml::reader::EventReader;
use xml::writer::EmitterConfig;
macro_rules! unwrap_all {
($($e:expr);+) => {{
$($e.unwrap();)+
}}
}
#[ test]
fn reading_writing_equal_with_namespaces() {
let mut f = File::open("tests/documents/sample_2.xml" ).unwrap();
let mut b = Vec::new();
{
let r = EventReader::new(BufReader::new(&mut f));
let mut w = EmitterConfig::default().perform_indent(true ).create_writer(&mut b);
for e in r {
match e {
Ok(e) => if let Some(e) = e.as_writer_event() {
match w.write(e) {
Ok(_) => {},
Err(e) => panic!("Writer error: {:?}" , e)
}
},
Err(e) => panic!("Error: {}" , e)
}
}
}
f.seek(SeekFrom::Start(0 )).unwrap();
let mut fs = String::new();
f.read_to_string(&mut fs).unwrap();
let bs = String::from_utf8(b).unwrap();
assert_eq!(fs.trim(), bs.trim());
}
#[ test]
fn writing_simple() {
use xml::writer::XmlEvent;
let mut b = Vec::new();
{
let mut w = EmitterConfig::new().write_document_declaration(false ).create_writer(&n style='color:red'>mut b);
w.write(XmlEvent::start_element("h:hello" ).ns("h" , "urn:hello-world" )).unwrap();
w.write("hello world" ).unwrap();
w.write(XmlEvent::end_element()).unwrap();
}
assert_eq!(
str::from_utf8(&b).unwrap(),
r#" <h:hello xmlns:h="urn:hello-world" >hello world</h:hello>"#
);
}
#[ test]
fn writing_empty_elements_with_normalizing() {
use xml::writer::XmlEvent;
let mut b = Vec::new();
{
let mut w = EmitterConfig::new().write_document_declaration(false ).create_writer(&n style='color:red'>mut b);
unwrap_all! {
w.write(XmlEvent::start_element("hello" ));
w.write(XmlEvent::start_element("world" ));
w.write(XmlEvent::end_element());
w.write(XmlEvent::end_element())
}
}
assert_eq!(str::from_utf8(&b).unwrap(), r#" <hello><world /></hello>"#);
}
#[ test]
fn writing_empty_elements_without_normalizing() {
use xml::writer::XmlEvent;
let mut b = Vec::new();
{
let mut w = EmitterConfig::new()
.write_document_declaration(false )
.normalize_empty_elements(false )
.create_writer(&mut b);
unwrap_all! {
w.write(XmlEvent::start_element("hello" ));
w.write(XmlEvent::start_element("world" ));
w.write(XmlEvent::end_element());
w.write(XmlEvent::end_element())
}
}
assert_eq!(str::from_utf8(&b).unwrap(), r#" <hello><world></world></hello>"#);
}
#[ test]
fn writing_empty_elements_without_pad_self_closing() {
use xml::writer::XmlEvent;
let mut b = Vec::new();
{
let mut w = EmitterConfig::new()
.write_document_declaration(false )
.pad_self_closing(false )
.create_writer(&mut b);
unwrap_all! {
w.write(XmlEvent::start_element("hello" ));
w.write(XmlEvent::start_element("world" ));
w.write(XmlEvent::end_element());
w.write(XmlEvent::end_element())
}
}
assert_eq!(str::from_utf8(&b).unwrap(), r#" <hello><world/></hello>"#);
}
#[ test]
fn writing_empty_elements_pad_self_closing_explicit() {
use xml::writer::XmlEvent;
let mut b = Vec::new();
{
let mut w = EmitterConfig::new()
.write_document_declaration(false )
.pad_self_closing(true )
.create_writer(&mut b);
unwrap_all! {
w.write(XmlEvent::start_element("hello" ));
w.write(XmlEvent::start_element("world" ));
w.write(XmlEvent::end_element());
w.write(XmlEvent::end_element())
}
}
assert_eq!(str::from_utf8(&b).unwrap(), r#" <hello><world /></hello>"#);
}
#[ test]
fn writing_comments_with_indentation() {
use xml::writer::XmlEvent;
let mut b = Vec::new();
{
let mut w = EmitterConfig::new()
.write_document_declaration(false )
.perform_indent(true )
.create_writer(&mut b);
unwrap_all! {
w.write(XmlEvent::start_element("hello" ));
w.write(XmlEvent::start_element("world" ));
w.write(XmlEvent::comment(" this is a manually padded comment\t" ));
w.write(XmlEvent::comment("this is an unpadded comment" ));
w.write(XmlEvent::end_element());
w.write(XmlEvent::end_element())
}
}
assert_eq!(
str::from_utf8(&b).unwrap(),
"<hello>
<world>
<!-- this is a manually padded comment\t-->
<!-- this is an unpadded comment -->
</world>
</hello>");
}
#[ test]
fn issue_112_overriding_namepace_prefix() {
use xml::writer::XmlEvent;
let mut b = Vec::new();
{
let mut w = EmitterConfig::new()
.write_document_declaration(false )
.create_writer(&mut b);
unwrap_all! {
w.write(XmlEvent::start_element("iq" ).ns("" , "jabber:client" ).ns("a" , "urn:A" ));
w.write(XmlEvent::start_element("bind" ).ns("" , "urn:ietf:params:xml:ns:xmpp-bind" ));
w.write(XmlEvent::end_element());
w.write(XmlEvent::start_element("whatever" ).ns("a" , "urn:X" ));
w.write(XmlEvent::end_element());
w.write(XmlEvent::end_element())
}
}
assert_eq!(
str::from_utf8(&b).unwrap(),
r#" <iq xmlns="jabber:client" xmlns:a="urn:A" ><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind" /><whatever xmlns:a="urn:X" /></iq>"#
)
}
#[ test]
fn attribute_escaping() {
use xml::writer::XmlEvent;
let mut b = Vec::new();
{
let mut w = EmitterConfig::new()
.write_document_declaration(false )
.perform_indent(true )
.create_writer(&mut b);
unwrap_all! {
w.write(
XmlEvent::start_element("hello" )
.attr("testLt" , "<" )
.attr("testGt" , ">" )
);
w.write(XmlEvent::end_element());
w.write(
XmlEvent::start_element("hello" )
.attr("testQuot" , "\" ")
.attr("testApos" , "\'" )
);
w.write(XmlEvent::end_element());
w.write(
XmlEvent::start_element("hello" )
.attr("testAmp" , "&" )
);
w.write(XmlEvent::end_element());
w.write(
XmlEvent::start_element("hello" )
.attr("testNl" , "\n" )
.attr("testCr" , "\r" )
);
w.write(XmlEvent::end_element());
w.write(
XmlEvent::start_element("hello" )
.attr("testNl" , "\\n" )
.attr("testCr" , "\\r" )
);
w.write(XmlEvent::end_element())
}
}
assert_eq!(
str::from_utf8(&b).unwrap(),
"<hello testLt=\" <\" testGt=\" >\" />
<hello testQuot=\""\" testApos=\"'\" />
<hello testAmp=\"&\" />
<hello testNl=\"
\" testCr=\"
\" />
<hello testNl=\"\\n\" testCr=\"\\r\" />"
);
}
Messung V0.5 in Prozent C=98 H=99 G=98
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-28)
¤
*© Formatika GbR, Deutschland