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