Skip to content

Commit

Permalink
Enabling attributes with XPath #25
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasbjerre committed Sep 20, 2017
1 parent 34da133 commit 53f9241
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 80 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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**


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -43,7 +46,8 @@ private Map<String, String> 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));
Expand All @@ -55,9 +59,9 @@ private Map<String, String> 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) {
Expand Down
206 changes: 129 additions & 77 deletions src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverXPathTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book", "/bookstore/book[1]/title", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book", "/bookstore/book[1]", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book", "/bookstore/book[*]", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable(
"variablename", "/attribute[@name='thekey']/@value", XPath, regexpFilter));
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> 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<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable(
"variablename", "/attribute[@name='thekey']/@anothervalue", XPath, regexpFilter));
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> 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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("payload", "/*", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("payload", "/*", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book", "/bookstore", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book", "/bookstore/book[1]", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book", "/bookstore/book[2]", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book", "/bookstore/book[1]", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book1", "/bookstore/book[1]/title", XPath, "\\s"), //
new GenericVariable("book2", "/bookstore/book[2]/title", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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<GenericVariable> genericVariables =
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book1", "/bookstore/book[1]/title123", XPath, "[a-z]"));
Map<String, String[]> parameterMap = new HashMap<>();
List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
Map<String, String> variables =
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -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);
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/test/resources/attribute.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>

<attribute name='thekey' value='thevalue' />

0 comments on commit 53f9241

Please sign in to comment.