View Javadoc

1   /*
2    * $Id: ExpressionFilenameParserTestCase.java 22387 2011-07-12 03:53:36Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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   * Test the syntax of the SimpleFilename parser
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              // Expected
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             // Expected
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         // can't compare exactly as the time differs between formatting the expected
142         // result and the actual invocation of the function
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 }