Merge branch 'compare-with-prefix' into 'master'
Compare with prefix See merge request lumi/minidom-rs!23
This commit is contained in:
commit
0e76e5211d
2 changed files with 71 additions and 2 deletions
|
@ -1,7 +1,13 @@
|
|||
[package]
|
||||
name = "minidom"
|
||||
version = "0.7.0"
|
||||
authors = ["lumi <lumi@pew.im>", "Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>", "Bastien Orivel <eijebong+minidom@bananium.fr>", "Astro <astro@spaceboyz.net>"]
|
||||
authors = [
|
||||
"lumi <lumi@pew.im>",
|
||||
"Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>",
|
||||
"Bastien Orivel <eijebong+minidom@bananium.fr>",
|
||||
"Astro <astro@spaceboyz.net>",
|
||||
"Maxime “pep” Buquet <pep@bouah.net>",
|
||||
]
|
||||
description = "A small, simple DOM implementation on top of quick-xml"
|
||||
homepage = "https://gitlab.com/lumi/minidom-rs"
|
||||
repository = "https://gitlab.com/lumi/minidom-rs"
|
||||
|
|
|
@ -191,6 +191,22 @@ impl Element {
|
|||
&self.name
|
||||
}
|
||||
|
||||
/// Returns a reference to the prefix of this element.
|
||||
///
|
||||
/// # Examples
|
||||
/// ```rust
|
||||
/// use minidom::Element;
|
||||
///
|
||||
/// let elem = Element::builder("prefix:name")
|
||||
/// .build();
|
||||
///
|
||||
/// assert_eq!(elem.name(), "name");
|
||||
/// assert_eq!(elem.prefix(), Some("prefix"));
|
||||
/// ```
|
||||
pub fn prefix(&self) -> Option<&str> {
|
||||
self.prefix.as_ref().map(String::as_ref)
|
||||
}
|
||||
|
||||
/// Returns a reference to the namespace of this element, if it has one, else `None`.
|
||||
pub fn ns(&self) -> Option<String> {
|
||||
self.namespaces.get(&self.prefix)
|
||||
|
@ -324,7 +340,11 @@ impl Element {
|
|||
}
|
||||
let elem = stack.pop().unwrap();
|
||||
if let Some(to) = stack.last_mut() {
|
||||
if elem.name().as_bytes() != e.name() {
|
||||
let name = match elem.prefix() {
|
||||
Some(ref prefix) => format!("{}:", prefix),
|
||||
None => String::from(""),
|
||||
} + elem.name();
|
||||
if name.as_bytes() != e.name() {
|
||||
bail!(ErrorKind::InvalidElementClosed);
|
||||
}
|
||||
to.append_child(elem);
|
||||
|
@ -832,3 +852,46 @@ fn test_element_new() {
|
|||
assert_eq!(elem.attr("name"), Some("value"));
|
||||
assert_eq!(elem.attr("inexistent"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_from_reader_simple() {
|
||||
let xml = "<foo></foo>";
|
||||
let mut reader = EventReader::from_str(xml);
|
||||
let elem = Element::from_reader(&mut reader);
|
||||
|
||||
let elem2 = Element::builder("foo").build();
|
||||
|
||||
assert_eq!(elem.unwrap(), elem2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_from_reader_nested() {
|
||||
let xml = "<foo><bar baz='qxx' /></foo>";
|
||||
let mut reader = EventReader::from_str(xml);
|
||||
let elem = Element::from_reader(&mut reader);
|
||||
|
||||
let nested = Element::builder("bar")
|
||||
.attr("baz", "qxx")
|
||||
.build();
|
||||
let elem2 = Element::builder("foo")
|
||||
.append(nested)
|
||||
.build();
|
||||
|
||||
assert_eq!(elem.unwrap(), elem2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_from_reader_with_prefix() {
|
||||
let xml = "<foo><prefix:bar baz='qxx' /></foo>";
|
||||
let mut reader = EventReader::from_str(xml);
|
||||
let elem = Element::from_reader(&mut reader);
|
||||
|
||||
let nested = Element::builder("prefix:bar")
|
||||
.attr("baz", "qxx")
|
||||
.build();
|
||||
let elem2 = Element::builder("foo")
|
||||
.append(nested)
|
||||
.build();
|
||||
|
||||
assert_eq!(elem.unwrap(), elem2);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue