View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.transformers.xml.xquery;
8   
9   import org.mule.DefaultMuleMessage;
10  import org.mule.api.transformer.Transformer;
11  import org.mule.module.xml.transformer.XQueryTransformer;
12  import org.mule.transformer.AbstractTransformerTestCase;
13  import org.mule.transformer.types.DataTypeFactory;
14  import org.mule.util.IOUtils;
15  
16  import java.util.HashMap;
17  import java.util.Map;
18  import java.util.Properties;
19  
20  import org.custommonkey.xmlunit.XMLUnit;
21  import org.w3c.dom.Document;
22  
23  public class InlineXQueryTransformerWithParamsTestCase extends AbstractTransformerTestCase
24  {
25      private String srcData;
26      private String resultData;
27  
28      @Override
29      protected void doSetUp() throws Exception
30      {
31          XMLUnit.setIgnoreWhitespace(true);
32          XMLUnit.setIgnoreComments(true);
33          srcData = IOUtils.getResourceAsString("cd-catalog.xml", getClass());
34          resultData = IOUtils.getResourceAsString("cd-catalog-result-with-params.xml", getClass());
35      }
36  
37      @Override
38      public Transformer getTransformer() throws Exception
39      {
40          XQueryTransformer transformer = new XQueryTransformer();
41          transformer.setXquery(
42                  "declare variable $document external;\n" +
43                  "declare variable $title external;\n" +
44                  "declare variable $rating external;\n" +
45                  " <cd-listings title='{$title}' rating='{$rating}'>\n" +
46                  "{\n" +
47                  "    for $cd in $document/catalog/cd\n" +
48                  "    return <cd-title>{data($cd/title)}</cd-title>\n" +
49                  "} \n</cd-listings>");
50          transformer.setReturnDataType(DataTypeFactory.STRING);
51          Properties params = new Properties();
52          params.setProperty("title", "#[mule:message.header(ListTitle)]");
53          params.setProperty("rating", "#[mule:message.header(ListRating)]");
54          transformer.setContextProperties(params);
55          transformer.setMuleContext(muleContext);
56          transformer.initialise();
57          return transformer;
58      }
59  
60      @Override
61      public Transformer getRoundTripTransformer() throws Exception
62      {
63          return null;
64      }
65  
66      @Override
67      public void testRoundtripTransform() throws Exception
68      {
69          // disable this test
70      }
71  
72      @Override
73      public Object getTestData()
74      {
75          Map<String, Object> props = new HashMap<String, Object>(2);
76          props.put("ListTitle", "MyList");
77          props.put("ListRating", new Integer(6));
78          return new DefaultMuleMessage(srcData, props, muleContext);
79      }
80  
81      @Override
82      public Object getResultData()
83      {
84          return resultData;
85      }
86  
87      @Override
88      public boolean compareResults(Object expected, Object result)
89      {
90          if (expected instanceof Document && result instanceof Document)
91          {
92              return XMLUnit.compareXML((Document)expected, (Document)result).similar();
93          }
94          else if (expected instanceof String && result instanceof String)
95          {
96              try
97              {
98                  String expectedString = this.normalizeString((String)expected);
99                  String resultString = this.normalizeString((String)result);
100                 return XMLUnit.compareXML(expectedString, resultString).similar();
101             }
102             catch (Exception ex)
103             {
104                 return false;
105             }
106         }
107 
108         // all other comparisons are passed up
109         return super.compareResults(expected, result);
110     }
111 }