View Javadoc

1   /*
2    * $Id: JXPathExpressionEvaluatorTestCase.java 22391 2011-07-12 12:00:48Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.xml.util.properties;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.config.MuleProperties;
15  import org.mule.api.registry.RegistrationException;
16  import org.mule.module.xml.expression.JXPathExpressionEvaluator;
17  import org.mule.module.xml.util.NamespaceManager;
18  import org.mule.tck.junit4.AbstractMuleContextTestCase;
19  import org.mule.tck.testmodels.fruit.Apple;
20  import org.mule.tck.testmodels.fruit.Banana;
21  import org.mule.tck.testmodels.fruit.FruitBowl;
22  
23  import java.net.MalformedURLException;
24  import java.util.HashMap;
25  import java.util.Map;
26  
27  import org.junit.Test;
28  
29  import static org.junit.Assert.assertEquals;
30  import static org.junit.Assert.assertNotNull;
31  import static org.junit.Assert.assertNull;
32  import static org.junit.Assert.assertTrue;
33  
34  @SuppressWarnings("deprecation") // we're testing a deprecated class
35  public class JXPathExpressionEvaluatorTestCase extends AbstractMuleContextTestCase
36  {
37      private static final String XML_USING_UNDEFINED_NAMESPACE = "<root " +
38                                                                  "xmlns:z=\"http://www.w3schools.com/furniture\">" +
39                                                                  "<z:table>" +
40                                                                  "<z:name>African Coffee Table</z:name>" +
41                                                                  "<z:width>80</z:width>" +
42                                                                  "<z:length>120</z:length>" +
43                                                                  "</z:table>" +
44                                                                  "</root>";
45  
46      @Test
47      public void testBean()
48      {
49          Apple apple = new Apple();
50          apple.wash();
51          FruitBowl payload = new FruitBowl(apple, new Banana());
52          DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
53  
54          JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
55          Object value = e.evaluate("apple/washed", msg);
56          assertNotNull(value);
57          assertTrue(value instanceof Boolean);
58          assertTrue(((Boolean) value).booleanValue());
59  
60          value = e.evaluate("bar", msg);
61          assertNull(value);
62      }
63  
64      @Test
65      public void testXmlContainingNoNameSpaces() throws MalformedURLException
66      {
67          String payload = "<?xml version=\"1.0\" ?>" +
68                           "<address>" +
69                           "<street>Orchard Road</street>" +
70                           "</address>";
71  
72          DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
73  
74          JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
75          Object value = e.evaluate("/address/street", msg);
76  
77          assertTrue(value instanceof String);
78          assertEquals("Orchard Road", value);
79      }
80  
81      @Test
82      public void testXmlIfNameSpaceIsDefinedWithTheSamePrefix() throws MalformedURLException
83      {
84          String payload = "<root " +
85                           "xmlns:f=\"http://www.w3schools.com/furniture\">" +
86                           "<f:table>" +
87                           "<f:name>African Coffee Table</f:name>" +
88                           "<f:width>80</f:width>" +
89                           "<f:length>120</f:length>" +
90                           "</f:table>" +
91                           "</root>";
92  
93          DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
94  
95          JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
96          Object value = e.evaluate("//f:table/f:name", msg);
97  
98          assertTrue(value instanceof String);
99          assertEquals("African Coffee Table", value);
100     }
101 
102     @Test
103     public void testXmlWithInvalidNameSpaceIfNameSpaceAliasIsUndefined() throws MalformedURLException
104     {
105         final String xpathExpression = "//f:table/f:name";
106 
107         DefaultMuleMessage msg = new DefaultMuleMessage(XML_USING_UNDEFINED_NAMESPACE, muleContext);
108 
109         JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
110         Object value = e.evaluate(xpathExpression, msg);
111         assertNull(value);
112     }
113 
114     @Test
115     public void testXmlWithInvalidNameSpaceIfNameSpaceAliasIsDefined() throws MalformedURLException, RegistrationException
116     {
117         NamespaceManager namespaceManager = new NamespaceManager();
118         Map<String, Object> namespaces = new HashMap<String, Object>();
119         namespaces.put("f", "http://www.w3schools.com/furniture");
120         namespaceManager.setNamespaces(namespaces);
121         muleContext.getRegistry().registerObject(MuleProperties.OBJECT_MULE_NAMESPACE_MANAGER, namespaceManager);
122 
123         DefaultMuleMessage msg = new DefaultMuleMessage(XML_USING_UNDEFINED_NAMESPACE, muleContext);
124 
125         JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
126         e.setMuleContext(muleContext);
127 
128         Object value = e.evaluate("//f:table/f:name", msg);
129         assertTrue(value instanceof String);
130         assertEquals("African Coffee Table", value);
131     }
132 }