diff --git a/CHANGELOG.md b/CHANGELOG.md index 56f74f7..3c666ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,11 @@ Changelog of Generic Webhook Plugin. ## Unreleased ### No issue +**doc** + + +[34da1337c863b15](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/34da1337c863b15) Tomas Bjerre *2017-08-23 16:16:10* + **Correcting how first value is determined** diff --git a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/XmlFlattener.java b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/XmlFlattener.java index fd27987..29c7133 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/XmlFlattener.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/XmlFlattener.java @@ -3,6 +3,9 @@ import static com.google.common.collect.Maps.newHashMap; import static org.jenkinsci.plugins.gwt.resolvers.FlattenerUtils.filter; import static org.jenkinsci.plugins.gwt.resolvers.FlattenerUtils.toVariableName; +import static org.w3c.dom.Node.ATTRIBUTE_NODE; +import static org.w3c.dom.Node.ELEMENT_NODE; +import static org.w3c.dom.Node.TEXT_NODE; import java.util.Map; @@ -43,7 +46,8 @@ private Map flattenXmlNode( final String variableName = toVariableName(childKey); resolvedVariables.put(variableName, filter(childNode.getTextContent(), regexFilter)); } else { - //leafnode and text inside leafnode are 2 nodes, so /2 to keep counter in line + // leafnode and text inside leafnode are 2 nodes, so /2 to + // keep counter in line final int leafNodeLevel = i / 2; resolvedVariables.putAll( flattenXmlNode(childKey, regexFilter, childNode, leafNodeLevel, false)); @@ -55,9 +59,9 @@ private Map flattenXmlNode( private boolean isXmlLeafNode(Node node) { return node != null - && node.getNodeType() == Node.ELEMENT_NODE + && (node.getNodeType() == ELEMENT_NODE || node.getNodeType() == ATTRIBUTE_NODE) && node.getChildNodes().getLength() == 1 - && node.getFirstChild().getNodeType() == Node.TEXT_NODE; + && node.getFirstChild().getNodeType() == TEXT_NODE; } private String expandKey(String key, int level, boolean fromRootLevel) { diff --git a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverXPathTest.java b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverXPathTest.java index ca49dbe..9330623 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverXPathTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverXPathTest.java @@ -22,16 +22,16 @@ public class VariablesResolverXPathTest { @Test public void testXPathGetOneVariable() throws Exception { - String resourceName = "two-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-items.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("book", "/bookstore/book[1]/title", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -47,16 +47,16 @@ public void testXPathGetOneVariable() throws Exception { @Test public void testXPathGetOneNode() throws Exception { - String resourceName = "two-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-items.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("book", "/bookstore/book[1]", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -72,16 +72,16 @@ public void testXPathGetOneNode() throws Exception { @Test public void testXPathGetNodes() throws Exception { - String resourceName = "two-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-items.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("book", "/bookstore/book[*]", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -96,18 +96,70 @@ public void testXPathGetNodes() throws Exception { .containsEntry("book_1_title", "Learning XML"); } + @Test + public void testXPathGetAttribute() throws Exception { + final String resourceName = "attribute.xml"; + final String postContent = getContent(resourceName); + + final String regexpFilter = ""; + final List genericVariables = + newArrayList( // + new GenericVariable( + "variablename", "/attribute[@name='thekey']/@value", XPath, regexpFilter)); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = + new VariablesResolver( + headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + genericHeaderVariables) + .getVariables(); + + assertThat(variables) // + .containsEntry("variablename", "thevalue"); + } + + @Test + public void testXPathGetAbsentAttribute() throws Exception { + final String resourceName = "attribute.xml"; + final String postContent = getContent(resourceName); + + final String regexpFilter = ""; + final List genericVariables = + newArrayList( // + new GenericVariable( + "variablename", "/attribute[@name='thekey']/@anothervalue", XPath, regexpFilter)); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = + new VariablesResolver( + headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + genericHeaderVariables) + .getVariables(); + + assertThat(variables) // + .containsEntry("variablename", ""); + } + @Test public void testXPathTwoListItems() throws Exception { - String resourceName = "two-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-items.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("payload", "/*", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -127,16 +179,16 @@ public void testXPathTwoListItems() throws Exception { @Test public void testXPathOneListItem() throws Exception { - String resourceName = "one-list-item.xml"; - String postContent = getContent(resourceName); + final String resourceName = "one-list-item.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("payload", "/*", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -154,16 +206,16 @@ public void testXPathOneListItem() throws Exception { @Test public void testXPathTwoListListItems() throws Exception { - String resourceName = "two-list-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-list-items.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("book", "/bookstore", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -185,16 +237,16 @@ public void testXPathTwoListListItems() throws Exception { @Test public void testXPathTwoListListItemsFirstBook() throws Exception { - String resourceName = "two-list-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-list-items.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("book", "/bookstore/book[1]", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -214,16 +266,16 @@ public void testXPathTwoListListItemsFirstBook() throws Exception { @Test public void testXPathTwoListListItemsSecondBook() throws Exception { - String resourceName = "two-list-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-list-items.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("book", "/bookstore/book[2]", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -241,16 +293,16 @@ public void testXPathTwoListListItemsSecondBook() throws Exception { @Test public void testXPathTwoListItemsFirstBook() throws Exception { - String resourceName = "two-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-items.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("book", "/bookstore/book[1]", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -268,17 +320,17 @@ public void testXPathTwoListItemsFirstBook() throws Exception { @Test public void testXPathGetTwoVariable() throws Exception { - String resourceName = "two-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-items.xml"; + final String postContent = getContent(resourceName); - String regexpFilter = ""; - List genericVariables = + final String regexpFilter = ""; + final List genericVariables = newArrayList( // new GenericVariable("book1", "/bookstore/book[1]/title", XPath, "\\s"), // new GenericVariable("book2", "/bookstore/book[2]/title", XPath, regexpFilter)); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -295,15 +347,15 @@ public void testXPathGetTwoVariable() throws Exception { @Test public void testXPathGetZeroMatchingVariables() throws Exception { - String resourceName = "two-list-items.xml"; - String postContent = getContent(resourceName); + final String resourceName = "two-list-items.xml"; + final String postContent = getContent(resourceName); - List genericVariables = + final List genericVariables = newArrayList( // new GenericVariable("book1", "/bookstore/book[1]/title123", XPath, "[a-z]")); - Map parameterMap = new HashMap<>(); - List genericRequestVariables = new ArrayList<>(); - Map variables = + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( headers, parameterMap, @@ -321,7 +373,7 @@ private String getContent(String resourceName) { try { return Resources.toString( Resources.getResource(resourceName).toURI().toURL(), Charsets.UTF_8); - } catch (Exception e) { + } catch (final Exception e) { throw new RuntimeException(e); } } diff --git a/src/test/resources/attribute.xml b/src/test/resources/attribute.xml new file mode 100644 index 0000000..982b603 --- /dev/null +++ b/src/test/resources/attribute.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file