diff options
Diffstat (limited to 'tests/streaming.rs')
-rw-r--r-- | tests/streaming.rs | 103 |
1 files changed, 0 insertions, 103 deletions
diff --git a/tests/streaming.rs b/tests/streaming.rs deleted file mode 100644 index a577a00..0000000 --- a/tests/streaming.rs +++ /dev/null @@ -1,103 +0,0 @@ -#![forbid(unsafe_code)] - -extern crate xml; - -use std::io::{Cursor, Write}; - -use xml::EventReader; -use xml::reader::ParserConfig; -use xml::reader::XmlEvent; - -macro_rules! assert_match { - ($actual:expr, $expected:pat) => { - match $actual { - $expected => {}, - _ => panic!("assertion failed: `(left matches right)` \ - (left: `{:?}`, right: `{}`", $actual, stringify!($expected)) - } - }; - ($actual:expr, $expected:pat if $guard:expr) => { - match $actual { - $expected if $guard => {}, - _ => panic!("assertion failed: `(left matches right)` \ - (left: `{:?}`, right: `{} if {}`", - $actual, stringify!($expected), stringify!($guard)) - } - } -} - -fn write_and_reset_position<W>(c: &mut Cursor<W>, data: &[u8]) where Cursor<W>: Write { - let p = c.position(); - c.write_all(data).unwrap(); - c.set_position(p); -} - -#[test] -fn reading_streamed_content() { - let buf = Cursor::new(b"<root>".to_vec()); - let reader = EventReader::new(buf); - - let mut it = reader.into_iter(); - - assert_match!(it.next(), Some(Ok(XmlEvent::StartDocument { .. }))); - assert_match!(it.next(), Some(Ok(XmlEvent::StartElement { ref name, .. })) if name.local_name == "root"); - - write_and_reset_position(it.source_mut(), b"<child-1>content</child-1>"); - assert_match!(it.next(), Some(Ok(XmlEvent::StartElement { ref name, .. })) if name.local_name == "child-1"); - assert_match!(it.next(), Some(Ok(XmlEvent::Characters(ref c))) if c == "content"); - assert_match!(it.next(), Some(Ok(XmlEvent::EndElement { ref name })) if name.local_name == "child-1"); - - write_and_reset_position(it.source_mut(), b"<child-2/>"); - assert_match!(it.next(), Some(Ok(XmlEvent::StartElement { ref name, .. })) if name.local_name == "child-2"); - assert_match!(it.next(), Some(Ok(XmlEvent::EndElement { ref name })) if name.local_name == "child-2"); - - write_and_reset_position(it.source_mut(), b"<child-3/>"); - assert_match!(it.next(), Some(Ok(XmlEvent::StartElement { ref name, .. })) if name.local_name == "child-3"); - assert_match!(it.next(), Some(Ok(XmlEvent::EndElement { ref name })) if name.local_name == "child-3"); - // doesn't seem to work because of how tags parsing is done -// write_and_reset_position(it.source_mut(), b"some text"); - // assert_match!(it.next(), Some(Ok(XmlEvent::Characters(ref c))) if c == "some text"); - - write_and_reset_position(it.source_mut(), b"</root>"); - assert_match!(it.next(), Some(Ok(XmlEvent::EndElement { ref name })) if name.local_name == "root"); - assert_match!(it.next(), Some(Ok(XmlEvent::EndDocument))); - assert_match!(it.next(), None); -} - -#[test] -fn reading_streamed_content2() { - let buf = Cursor::new(b"<root>".to_vec()); - let mut config = ParserConfig::new(); - config.ignore_end_of_stream = true; - let readerb = EventReader::new_with_config(buf, config); - - let mut reader = readerb.into_iter(); - - assert_match!(reader.next(), Some(Ok(XmlEvent::StartDocument { .. }))); - assert_match!(reader.next(), Some(Ok(XmlEvent::StartElement { ref name, .. })) if name.local_name == "root"); - - write_and_reset_position(reader.source_mut(), b"<child-1>content</child-1>"); - assert_match!(reader.next(), Some(Ok(XmlEvent::StartElement { ref name, .. })) if name.local_name == "child-1"); - assert_match!(reader.next(), Some(Ok(XmlEvent::Characters(ref c))) if c == "content"); - assert_match!(reader.next(), Some(Ok(XmlEvent::EndElement { ref name })) if name.local_name == "child-1"); - - write_and_reset_position(reader.source_mut(), b"<child-2>content</child-2>"); - - assert_match!(reader.next(), Some(Ok(XmlEvent::StartElement { ref name, .. })) if name.local_name == "child-2"); - assert_match!(reader.next(), Some(Ok(XmlEvent::Characters(ref c))) if c == "content"); - assert_match!(reader.next(), Some(Ok(XmlEvent::EndElement { ref name })) if name.local_name == "child-2"); - assert_match!(reader.next(), Some(Err(_))); - write_and_reset_position(reader.source_mut(), b"<child-3></child-3>"); - assert_match!(reader.next(), Some(Ok(XmlEvent::StartElement { ref name, .. })) if name.local_name == "child-3"); - write_and_reset_position(reader.source_mut(), b"<child-4 type='get'"); - match reader.next() { - None | - Some(Ok(_)) => { - panic!("At this point, parser must not detect something."); - }, - Some(Err(_)) => {} - }; - write_and_reset_position(reader.source_mut(), b" />"); - assert_match!(reader.next(), Some(Ok(XmlEvent::StartElement { ref name, .. })) if name.local_name == "child-4"); -} - |