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