1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.file;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.api.MuleMessage;
15 import org.mule.tck.junit4.AbstractMuleContextTestCase;
16
17 import java.util.Date;
18
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
27
28
29 public class ExpressionFilenameParserTestCase extends AbstractMuleContextTestCase
30 {
31 private ExpressionFilenameParser parser;
32 private MuleMessage message;
33
34 @Override
35 protected void doSetUp() throws Exception
36 {
37 super.doSetUp();
38
39 parser = new ExpressionFilenameParser();
40 parser.setMuleContext(muleContext);
41
42 message = new DefaultMuleMessage("hello", muleContext);
43 message.setOutboundProperty("foo", "bar");
44 message.setOutboundProperty(FileConnector.PROPERTY_ORIGINAL_FILENAME, "originalName");
45 message.setOutboundProperty(FileConnector.PROPERTY_FILENAME, "newName");
46 }
47
48 @Test
49 public void testWigglyMuleStyleParsing()
50 {
51 String result = parser.getFilename(message, "Test1_#[function:count].txt");
52 assertEquals("Test1_0.txt", result);
53
54 result = parser.getFilename(message, "Test2_#[function:datestamp-yyMMdd].txt");
55 assertDatestampWithYearMonthAndDayMatches(result);
56
57 result = parser.getFilename(message, "Test3_#[function:datestamp].txt");
58 assertDefaultDatestampMatches(result);
59
60 result = parser.getFilename(message, "Test4_#[function:systime].txt");
61 assertFalse(result.equals("Test4_#[function:systime].txt"));
62
63 result = parser.getFilename(message, "Test5_#[function:uuid].txt");
64 assertFalse(result.equals("Test5_#[function:uuid].txt"));
65
66 result = parser.getFilename(message, "Test6_#[function:count].txt");
67 assertEquals("Test6_1.txt", result);
68
69 result = parser.getFilename(message, "Test7_#[header:originalFilename].txt");
70 assertEquals("Test7_originalName.txt", result);
71
72 result = parser.getFilename(message, "Test8_#[header:foo].txt");
73 assertEquals("Test8_bar.txt", result);
74
75 result = parser.getFilename(message, "Test9_#[header:xxx?].txt");
76 assertEquals("Test9_#[header:xxx?].txt", result);
77
78 try
79 {
80 result = parser.getFilename(message, "Test9_#[header:xxx].txt");
81 fail("Property xxx is not available");
82 }
83 catch (Exception e)
84 {
85
86 }
87 }
88
89 @Test
90 public void testSquareStyleParsing()
91 {
92 String result = parser.getFilename(message, "Test1_[function:count].txt");
93 assertEquals("Test1_0.txt", result);
94
95 result = parser.getFilename(message, "Test2_[function:dateStamp-yyMMdd].txt");
96 assertDatestampWithYearMonthAndDayMatches(result);
97
98 result = parser.getFilename(message, "Test3_[function:dateStamp].txt");
99 assertDefaultDatestampMatches(result);
100
101 result = parser.getFilename(message, "Test4_[function:systime].txt");
102 assertFalse(result.equals("Test4_[function:systime].txt"));
103
104 result = parser.getFilename(message, "Test5_[function:uuid].txt");
105 assertFalse(result.equals("Test5_[function:uuid].txt"));
106
107 result = parser.getFilename(message, "Test6_[function:count].txt");
108 assertEquals("Test6_1.txt", result);
109
110 result = parser.getFilename(message, "Test7_[header:originalFilename].txt");
111 assertEquals("Test7_originalName.txt", result);
112
113 result = parser.getFilename(message, "Test8_[header:foo].txt");
114 assertEquals("Test8_bar.txt", result);
115
116 try
117 {
118 result = parser.getFilename(message, "Test9_[header:xxx].txt");
119 fail("Property xxx is not available");
120 }
121 catch (Exception e)
122 {
123
124 }
125
126 result = parser.getFilename(message, "Test9_[header:xxx?].txt");
127 assertEquals("Test9_[header:xxx?].txt", result);
128 }
129
130 private void assertDatestampWithYearMonthAndDayMatches(String result)
131 {
132 Date now = new Date();
133 String expected = String.format("Test2_%1$ty%1$tm%1$td.txt", now);
134 assertEquals(expected, result);
135 }
136
137 private void assertDefaultDatestampMatches(String result)
138 {
139 Date now = new Date();
140
141
142
143 String expected = String.format("Test3_%1$td-%1$tm-%1$ty_%1$tH-%1$tM-.*.txt", now);
144
145 assertTrue(result.matches(expected));
146 }
147 }