View Javadoc

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