Skip to content

Commit

Permalink
Merge pull request #96 from arctic-penguin/master
Browse files Browse the repository at this point in the history
implement DoubleEndedIterator for Select
  • Loading branch information
cfvescovo committed Dec 19, 2022
2 parents 0a6c6f5 + fce8239 commit 24d2e4d
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/html/mod.rs
Expand Up @@ -138,6 +138,19 @@ impl<'a, 'b> Iterator for Select<'a, 'b> {
}
}

impl<'a, 'b> DoubleEndedIterator for Select<'a, 'b> {
fn next_back(&mut self) -> Option<Self::Item> {
for node in self.inner.by_ref().rev() {
if let Some(element) = ElementRef::wrap(node) {
if element.parent().is_some() && self.selector.matches(&element) {
return Some(element);
}
}
}
None
}
}

mod serializable;
mod tree_sink;

Expand Down Expand Up @@ -179,4 +192,16 @@ mod tests {
.unwrap();
assert_eq!(title.inner_html(), "abc");
}

#[test]
fn select_is_reversible() {
let html = Html::parse_document("<p>element1</p><p>element2</p><p>element3</p>");
let selector = Selector::parse("p").unwrap();
let result: Vec<_> = html
.select(&selector)
.rev()
.map(|e| e.inner_html())
.collect();
assert_eq!(result, vec!["element3", "element2", "element1"]);
}
}

0 comments on commit 24d2e4d

Please sign in to comment.