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.xstream;
8   
9   import org.mule.api.transformer.TransformerException;
10  import org.mule.module.xml.transformer.XStreamFactory;
11  import org.mule.module.xml.transformer.XmlToObject;
12  import org.mule.tck.junit4.AbstractMuleTestCase;
13  
14  import com.thoughtworks.xstream.XStream;
15  import com.thoughtworks.xstream.io.xml.DomDriver;
16  
17  import org.junit.After;
18  import org.junit.Before;
19  import org.junit.Test;
20  
21  import static org.junit.Assert.assertEquals;
22  import static org.junit.Assert.assertNotNull;
23  import static org.junit.Assert.assertSame;
24  import static org.junit.Assert.assertTrue;
25  import static org.junit.Assert.fail;
26  
27  /**
28   * Tests configuration and creation of XStream-based transformers
29   */
30  public class XStreamTransformerConfigurationTestCase extends AbstractMuleTestCase
31  {
32      public static volatile boolean MyDriverDidInitialize;
33  
34      protected static class MyDOMDriver extends DomDriver
35      {
36          public MyDOMDriver()
37          {
38              super();
39              XStreamTransformerConfigurationTestCase.MyDriverDidInitialize = true;
40          }
41      }
42  
43      @Before
44      public void doSetUp()
45      {
46          MyDriverDidInitialize = true;
47      }
48  
49      @After
50      public void doTearDown()
51      {
52          MyDriverDidInitialize = false;
53      }
54  
55      @Test
56      public void testDefaultDriver() throws Exception
57      {
58          XmlToObject transformer = new XmlToObject();
59          // check for XStream's default
60          assertEquals(XStreamFactory.XSTREAM_XPP_DRIVER, transformer.getDriverClass());
61      }
62  
63      @Test
64      public void testCustomDriver() throws Exception
65      {
66          XmlToObject transformer = new XmlToObject();
67          // set custom driver
68          transformer.setDriverClass(MyDOMDriver.class.getName());
69          XStream xs = transformer.getXStream();
70  
71          assertNotNull(xs);
72          assertSame(xs, transformer.getXStream());
73          assertTrue(MyDriverDidInitialize);
74      }
75  
76      @Test
77      public void testBadDriver() throws Exception
78      {
79          XmlToObject transformer = new XmlToObject();
80          // set nonexisting driver class
81          transformer.setDriverClass("DudeWhereIsMyDriver");
82  
83          try
84          {
85              assertNotNull(transformer.getXStream());
86              fail();
87          }
88          catch (TransformerException tex)
89          {
90              // OK
91              assertTrue(tex.getCause() instanceof ClassNotFoundException);
92          }
93      }
94  
95      @Test
96      public void testClassLoader()
97      {
98  
99          ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
100 
101         try
102         {
103             TestClassLoader classLoader =  new TestClassLoader();   
104             Thread.currentThread().setContextClassLoader(classLoader);
105             XmlToObject transformer = new XmlToObject();
106             transformer.initialise();
107             assertEquals(classLoader, transformer.getXStream().getClassLoader());
108         }
109         catch (Exception e)
110         {
111             fail(e.getMessage());
112         }
113         finally
114         {
115             Thread.currentThread().setContextClassLoader(originalClassLoader);
116         }
117     }
118 
119     private static class TestClassLoader extends ClassLoader
120     {
121     }
122 
123 }