From 834d3142304e0927dc659791da6a4521f271d7fd Mon Sep 17 00:00:00 2001 From: Jonathan Hedley Date: Sat, 16 Feb 2013 11:01:36 -0800 Subject: [PATCH] Added a forms() convenience method to Elements This allows one to get at FormElements without casting. --- src/main/java/org/jsoup/select/Elements.java | 14 ++++++++++++++ .../java/org/jsoup/select/ElementsTest.java | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/main/java/org/jsoup/select/Elements.java b/src/main/java/org/jsoup/select/Elements.java index 184b0874a3..603952bed2 100644 --- a/src/main/java/org/jsoup/select/Elements.java +++ b/src/main/java/org/jsoup/select/Elements.java @@ -2,6 +2,7 @@ import org.jsoup.helper.Validate; import org.jsoup.nodes.Element; +import org.jsoup.nodes.FormElement; import org.jsoup.nodes.Node; import java.util.*; @@ -487,6 +488,19 @@ public Elements traverse(NodeVisitor nodeVisitor) { return this; } + /** + * Get the {@link FormElement} forms from the selected elements, if any. + * @return a list of FormElements pulled from the matched elements. The list will be empty if the elements contain + * no forms. + */ + public List forms() { + ArrayList forms = new ArrayList(); + for (Element el: contents) + if (el instanceof FormElement) + forms.add((FormElement) el); + return forms; + } + // implements List delegates: public int size() {return contents.size();} diff --git a/src/test/java/org/jsoup/select/ElementsTest.java b/src/test/java/org/jsoup/select/ElementsTest.java index 6265d55393..267fd2e900 100644 --- a/src/test/java/org/jsoup/select/ElementsTest.java +++ b/src/test/java/org/jsoup/select/ElementsTest.java @@ -3,8 +3,12 @@ import org.jsoup.Jsoup; import org.jsoup.TextUtil; import org.jsoup.nodes.Document; +import org.jsoup.nodes.FormElement; import org.jsoup.nodes.Node; import org.junit.Test; + +import java.util.List; + import static org.junit.Assert.*; /** @@ -252,4 +256,17 @@ public void tail(Node node, int depth) { }); assertEquals("

<#text>

<#text>
", accum.toString()); } + + @Test public void forms() { + Document doc = Jsoup.parse("
"); + Elements els = doc.select("*"); + assertEquals(9, els.size()); + + List forms = els.forms(); + assertEquals(2, forms.size()); + assertTrue(forms.get(0) != null); + assertTrue(forms.get(1) != null); + assertEquals("1", forms.get(0).id()); + assertEquals("2", forms.get(1).id()); + } }