1
2
3
4
5
6
7 package org.mule.test.transformers;
8
9 import org.mule.DefaultMuleMessage;
10 import org.mule.api.MuleMessage;
11 import org.mule.api.transformer.TransformerException;
12 import org.mule.expression.ExpressionConfig;
13 import org.mule.expression.transformers.ExpressionArgument;
14 import org.mule.expression.transformers.ExpressionTransformer;
15 import org.mule.tck.junit4.AbstractMuleContextTestCase;
16
17 import groovyjarjarasm.asm.ClassWriter;
18 import groovyjarjarasm.asm.Opcodes;
19 import org.junit.Test;
20
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertFalse;
23 import static org.junit.Assert.assertTrue;
24 import static org.junit.Assert.fail;
25
26 public class ExpressionTransformerTestCase extends AbstractMuleContextTestCase
27 {
28
29
30
31
32
33
34
35 @Test
36 public void testExpressionEvaluationClassLoader() throws ClassNotFoundException, TransformerException
37 {
38 ExpressionTransformer transformer = new ExpressionTransformer();
39 transformer.setMuleContext(muleContext);
40 transformer.addArgument(new ExpressionArgument("test", new ExpressionConfig(
41 "payload instanceof MyClass", "groovy", null), false));
42
43 ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
44 try
45 {
46 Thread.currentThread().setContextClassLoader(new MyClassClassLoader());
47 transformer.initialise();
48 }
49 catch (Exception e)
50 {
51 fail(e.getMessage());
52 }
53 finally
54 {
55 Thread.currentThread().setContextClassLoader(originalClassLoader);
56 }
57
58 assertFalse((Boolean) transformer.transform("test"));
59 }
60
61 @Test
62 public void testNullPayloadIsConsideredAsNullResult() throws Exception
63 {
64 ExpressionTransformer transformer = new ExpressionTransformer();
65 transformer.setMuleContext(muleContext);
66 transformer.setReturnSourceIfNull(true);
67 ExpressionConfig config = new ExpressionConfig("null", "groovy", null);
68 ExpressionArgument argument = new ExpressionArgument("test", config, false);
69 argument.setMuleContext(muleContext);
70 transformer.addArgument(argument);
71
72 MuleMessage message = new DefaultMuleMessage("Test", muleContext);
73 Object result = transformer.transformMessage(message, null);
74 assertTrue(result instanceof MuleMessage);
75 MuleMessage transformedMessage = (MuleMessage) result;
76
77 assertEquals("Test", transformedMessage.getPayload());
78
79 }
80
81 class MyClassClassLoader extends ClassLoader
82 {
83 @Override
84 protected Class<?> findClass(String name) throws ClassNotFoundException
85 {
86 if (name.equals("MyClass"))
87 {
88 ClassWriter cw = new ClassWriter(true);
89 cw.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, "MyClass", null, "java/lang/Object", null);
90 return defineClass(name, cw.toByteArray(), 0, cw.toByteArray().length);
91 }
92 else
93 {
94 return super.findClass(name);
95 }
96 }
97 }
98 }