1   /*
2    * $Id: FileUtilsTestCase.java 7976 2007-08-21 14:26:13Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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.util;
12  
13  import org.mule.tck.AbstractMuleTestCase;
14  
15  import java.io.File;
16  
17  import junit.framework.TestCase;
18  
19  public class FileUtilsTestCase extends AbstractMuleTestCase
20  {
21      private final String TEST_FILE = "testFile.txt";
22      private final String TEST_DIRECTORY = "target" + File.separator + "testDirectory";
23      private final File toDir = FileUtils.newFile(TEST_DIRECTORY);
24  
25      protected void doSetUp() throws Exception
26      {
27          super.doSetUp();
28          if (!toDir.exists())
29          {
30              toDir.mkdirs();
31          }
32      }
33  
34      protected void doTearDown() throws Exception
35      {
36          super.doTearDown();
37          toDir.delete();
38      }
39  
40      public void testFileTools() throws Exception
41      {
42          File file = null;
43          try
44          {
45              file = FileUtils.stringToFile(TEST_FILE, "this is a test file");
46              assertNotNull(file);
47              assertTrue(file.exists());
48  
49              file = FileUtils.stringToFile(TEST_FILE, " and this is appended content", true);
50  
51              String content = FileUtils.readFileToString(FileUtils.newFile(TEST_FILE), null);
52  
53              assertNotNull(content);
54              assertTrue(content.indexOf("this is a test file") > -1);
55              assertTrue(content.indexOf(" and this is appended content") > -1);
56  
57              file = FileUtils.newFile(TEST_FILE);
58              assertNotNull(file);
59              assertTrue(file.exists());
60  
61              file = FileUtils.createFile(TEST_FILE);
62              assertNotNull(file);
63              assertTrue(file.exists());
64  
65              file = FileUtils.createFile(TEST_FILE + "2");
66              assertNotNull(file);
67              assertTrue(file.exists());
68              assertTrue(file.canRead());
69              file.delete();
70  
71              file = FileUtils.newFile(TEST_FILE);
72              file.delete();
73  
74              File dir = FileUtils.openDirectory("src");
75              assertNotNull(dir);
76              assertTrue(dir.exists());
77              assertTrue(dir.canRead());
78              assertTrue(dir.isDirectory());
79  
80              dir = FileUtils.openDirectory("doesNotExist");
81              assertNotNull(dir);
82              assertTrue(dir.exists());
83              assertTrue(dir.canRead());
84              assertTrue(dir.isDirectory());
85              dir.delete();
86  
87          }
88          finally
89          {
90              if (file != null)
91              {
92                  file.delete();
93              }
94          }
95      }
96  
97      public void testFileNameTools() throws Exception
98      {
99          String filename = "Blah<Blah>.txt";
100         String result = FileUtils.prepareWinFilename(filename);
101         assertEquals("Blah(Blah).txt", result);
102 
103         filename = "Bla]h<Blah:a;b|c?d=e_f*g>.txt";
104         result = FileUtils.prepareWinFilename(filename);
105         assertEquals("Bla-h(Blah-a-b-c-d=e_f-g).txt", result);
106 
107         filename = "B\"la-h<Blah:a;b|c?d=e_f*g>.txt";
108         result = FileUtils.prepareWinFilename(filename);
109         assertEquals("B-la-h(Blah-a-b-c-d=e_f-g).txt", result);
110     }
111 
112     public void testDirectoryTools() throws Exception
113     {
114         File dir = FileUtils.openDirectory("src");
115         assertNotNull(dir);
116         assertTrue(dir.exists());
117         assertTrue(dir.canRead());
118         assertTrue(dir.isDirectory());
119 
120         dir = FileUtils.openDirectory("doesNotExist");
121         assertNotNull(dir);
122         assertTrue(dir.exists());
123         assertTrue(dir.canRead());
124         assertTrue(dir.isDirectory());
125         FileUtils.deleteTree(dir);
126     }
127 
128     public void testExtractResource() throws Exception
129     {
130         String testDir = TEST_DIRECTORY + File.separator + "Test-1";
131         File outputDir = FileUtils.newFile(testDir);
132         if (!outputDir.exists())
133         {
134             assertTrue("Failed to create output dirs.", outputDir.mkdirs());
135         }
136         String res = "META-INF/MANIFEST.MF";
137         FileUtils.extractResources(res, TestCase.class, outputDir, true);
138         File result = FileUtils.newFile(testDir, res);
139         assertNotNull(result);
140         assertTrue(result.exists());
141         assertTrue(result.canRead());
142         assertTrue(result.isFile());
143         assertTrue(result.length() > 0);
144         FileUtils.deleteTree(outputDir);
145     }
146 
147     public void testExtractResources() throws Exception
148     {
149         String testDir = TEST_DIRECTORY + File.separator + "Test-2";
150         File outputDir = FileUtils.newFile(testDir);
151         if (!outputDir.exists())
152         {
153             outputDir.mkdirs();
154         }
155         String res = "META-INF/";
156         FileUtils.extractResources(res, TestCase.class, outputDir, true);
157         File result = FileUtils.newFile(testDir, res);
158         assertNotNull(result);
159         assertTrue(result.exists());
160         assertTrue(result.canRead());
161         assertTrue(result.isDirectory());
162         FileUtils.deleteTree(outputDir);
163     }
164 
165     public void testExtractFileResource() throws Exception
166     {
167         String testDir = TEST_DIRECTORY + File.separator + "Test-3";
168         File outputDir = FileUtils.newFile(testDir);
169         if (!outputDir.exists())
170         {
171             outputDir.mkdirs();
172         }
173         String res = "org/mule/util/FileUtils.class";
174         FileUtils.extractResources(res, FileUtils.class, outputDir, true);
175         File result = FileUtils.newFile(testDir, res);
176         assertNotNull(result);
177         assertTrue(result.exists());
178         assertTrue(result.canRead());
179         assertTrue(result.isFile());
180         assertTrue(result.length() > 0);
181         FileUtils.deleteTree(outputDir);
182     }
183 
184     public void testExtractFileResources() throws Exception
185     {
186         String testDir = TEST_DIRECTORY + File.separator + "Test-4";
187         File outputDir = FileUtils.newFile(testDir);
188         if (!outputDir.exists())
189         {
190             outputDir.mkdirs();
191         }
192         String res = "org/mule/util/";
193         FileUtils.extractResources(res, FileUtils.class, outputDir, true);
194         File result = FileUtils.newFile(testDir, res);
195         assertNotNull(result);
196         assertTrue(result.exists());
197         assertTrue(result.canRead());
198         assertTrue(result.isDirectory());
199         FileUtils.deleteTree(outputDir);
200     }
201 
202     public void testExtractResourceWithoutKeepingDirStructure() throws Exception
203     {
204         String testDir = TEST_DIRECTORY + File.separator + "Test-5";
205         File outputDir = FileUtils.newFile(testDir);
206         if (!outputDir.exists())
207         {
208             outputDir.mkdirs();
209         }
210         String fileName = "MANIFEST.MF";
211         String res = "META-INF/" + fileName;
212         FileUtils.extractResources(res, TestCase.class, outputDir, false);
213         File result = FileUtils.newFile(testDir, fileName);
214         assertNotNull(result);
215         assertTrue(result.exists());
216         assertTrue(result.canRead());
217         assertTrue(result.isFile());
218         assertTrue(result.length() > 0);
219         FileUtils.deleteTree(outputDir);
220     }
221 
222     public void testExtractResourcesWithoutKeepingDirStructure() throws Exception
223     {
224         String testDir = TEST_DIRECTORY + File.separator + "Test-6";
225         File outputDir = FileUtils.newFile(testDir);
226         if (!outputDir.exists())
227         {
228             outputDir.mkdirs();
229         }
230         String fileName = "util/FileUtilsTestCase.class";
231         String res = "org/mule/";
232         FileUtils.extractResources(res, FileUtilsTestCase.class, outputDir, false);
233         File result = FileUtils.newFile(testDir, fileName);
234         assertNotNull(result);
235         assertTrue(result.exists());
236         assertTrue(result.canRead());
237         assertTrue(result.isFile());
238         assertTrue(result.length() > 0);
239         FileUtils.deleteTree(outputDir);
240     }
241 
242     public void testExtractFileResourceWithoutKeepingDirStructure() throws Exception
243     {
244         String testDir = TEST_DIRECTORY + File.separator + "Test-7";
245         File outputDir = FileUtils.newFile(testDir);
246         if (!outputDir.exists())
247         {
248             outputDir.mkdirs();
249         }
250         String fileName = "FileUtils.class";
251         String res = "org/mule/util/" + fileName;
252         FileUtils.extractResources(res, FileUtils.class, outputDir, false);
253         File result = FileUtils.newFile(testDir, fileName);
254         assertNotNull(result);
255         assertTrue(result.exists());
256         assertTrue(result.canRead());
257         assertTrue(result.isFile());
258         assertTrue(result.length() > 0);
259         FileUtils.deleteTree(outputDir);
260     }
261 
262     public void testExtractFileResourcesWithoutKeepingDirStructure() throws Exception
263     {
264         String testDir = TEST_DIRECTORY + File.separator + "Test-8";
265         File outputDir = FileUtils.newFile(testDir);
266         if (!outputDir.exists())
267         {
268             outputDir.mkdirs();
269         }
270         String fileName = "util/FileUtilsTestCase.class";
271         String res = "org/mule/";
272         FileUtils.extractResources(res, FileUtilsTestCase.class, outputDir, false);
273         File result = FileUtils.newFile(testDir, fileName);
274         assertNotNull(result);
275         assertTrue(result.exists());
276         assertTrue(result.canRead());
277         assertTrue(result.isFile());
278         assertTrue(result.length() > 0);
279         FileUtils.deleteTree(outputDir);
280     }
281 
282     public void testDeleteTreeWithIgnoredDirectories() throws Exception
283     {
284         final String testDir = TEST_DIRECTORY + File.separator + "Test-deleting";
285         File outputDir = FileUtils.newFile(testDir);
286         if (!outputDir.exists())
287         {
288             outputDir.mkdirs();
289         }
290 
291         File toBeDeleted1 = FileUtils.newFile(outputDir, "toBeDeleted1/");
292         toBeDeleted1.mkdirs();
293         File toBeDeleted2 = FileUtils.newFile(outputDir, "toBeDeleted2/");
294         toBeDeleted2.mkdirs();
295 
296         File keepMeIntact = FileUtils.newFile(outputDir, "keepMeIntact/");
297         keepMeIntact.mkdirs();
298 
299         FileUtils.deleteTree(outputDir, new String[] {"keepMeIntact"});
300 
301         assertTrue("Shouldn't have been deleted.", keepMeIntact.exists());
302 
303         FileUtils.deleteTree(outputDir);
304     }
305 }