FileUtilsTest.java revision 1a44d5dcabc18cd5ef111f732ccff91683a1a093
1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.os; 18 19import android.content.Context; 20import android.os.FileUtils; 21import android.os.FileUtils.FileStatus; 22import android.test.AndroidTestCase; 23import android.test.suitebuilder.annotation.LargeTest; 24import android.test.suitebuilder.annotation.MediumTest; 25import android.test.suitebuilder.annotation.SmallTest; 26 27import java.io.ByteArrayInputStream; 28import java.io.File; 29import java.io.FileWriter; 30import java.io.FileNotFoundException; 31import java.io.FileOutputStream; 32import java.io.IOException; 33 34import junit.framework.Assert; 35 36public class FileUtilsTest extends AndroidTestCase { 37 private static final String TEST_DATA = 38 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 39 40 private File mTestFile; 41 private File mCopyFile; 42 43 @Override 44 protected void setUp() throws Exception { 45 super.setUp(); 46 File testDir = getContext().getDir("testing", Context.MODE_PRIVATE); 47 mTestFile = new File(testDir, "test.file"); 48 mCopyFile = new File(testDir, "copy.file"); 49 FileWriter writer = new FileWriter(mTestFile); 50 try { 51 writer.write(TEST_DATA, 0, TEST_DATA.length()); 52 } finally { 53 writer.close(); 54 } 55 } 56 57 @Override 58 protected void tearDown() throws Exception { 59 if (mTestFile.exists()) mTestFile.delete(); 60 if (mCopyFile.exists()) mCopyFile.delete(); 61 } 62 63 @LargeTest 64 public void testGetFileStatus() { 65 final byte[] MAGIC = { 0xB, 0xE, 0x0, 0x5 }; 66 67 try { 68 // truncate test file and write MAGIC (4 bytes) to it. 69 FileOutputStream os = new FileOutputStream(mTestFile, false); 70 os.write(MAGIC, 0, 4); 71 os.flush(); 72 os.close(); 73 } catch (FileNotFoundException e) { 74 Assert.fail("File was removed durning test" + e); 75 } catch (IOException e) { 76 Assert.fail("Unexpected IOException: " + e); 77 } 78 79 Assert.assertTrue(mTestFile.exists()); 80 Assert.assertTrue(FileUtils.getFileStatus(mTestFile.getPath(), null)); 81 82 FileStatus status1 = new FileStatus(); 83 FileUtils.getFileStatus(mTestFile.getPath(), status1); 84 85 Assert.assertEquals(4, status1.size); 86 87 // Sleep for at least one second so that the modification time will be different. 88 try { 89 Thread.sleep(1000); 90 } catch (InterruptedException e) { 91 } 92 93 try { 94 // append so we don't change the creation time. 95 FileOutputStream os = new FileOutputStream(mTestFile, true); 96 os.write(MAGIC, 0, 4); 97 os.flush(); 98 os.close(); 99 } catch (FileNotFoundException e) { 100 Assert.fail("File was removed durning test" + e); 101 } catch (IOException e) { 102 Assert.fail("Unexpected IOException: " + e); 103 } 104 105 FileStatus status2 = new FileStatus(); 106 FileUtils.getFileStatus(mTestFile.getPath(), status2); 107 108 Assert.assertEquals(8, status2.size); 109 Assert.assertTrue(status2.mtime > status1.mtime); 110 111 mTestFile.delete(); 112 113 Assert.assertFalse(mTestFile.exists()); 114 Assert.assertFalse(FileUtils.getFileStatus(mTestFile.getPath(), null)); 115 } 116 117 // TODO: test setPermissions(), getPermissions() 118 119 @MediumTest 120 public void testCopyFile() throws Exception { 121 assertFalse(mCopyFile.exists()); 122 FileUtils.copyFile(mTestFile, mCopyFile); 123 assertTrue(mCopyFile.exists()); 124 assertEquals(TEST_DATA, FileUtils.readTextFile(mCopyFile, 0, null)); 125 } 126 127 @MediumTest 128 public void testCopyToFile() throws Exception { 129 final String s = "Foo Bar"; 130 assertFalse(mCopyFile.exists()); 131 FileUtils.copyToFile(new ByteArrayInputStream(s.getBytes()), mCopyFile); assertTrue(mCopyFile.exists()); 132 assertEquals(s, FileUtils.readTextFile(mCopyFile, 0, null)); 133 } 134 135 @MediumTest 136 public void testIsFilenameSafe() throws Exception { 137 assertTrue(FileUtils.isFilenameSafe(new File("foobar"))); 138 assertTrue(FileUtils.isFilenameSafe(new File("a_b-c=d.e/0,1+23"))); 139 assertFalse(FileUtils.isFilenameSafe(new File("foo*bar"))); 140 assertFalse(FileUtils.isFilenameSafe(new File("foo\nbar"))); 141 } 142 143 @MediumTest 144 public void testReadTextFile() throws Exception { 145 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, 0, null)); 146 147 assertEquals("ABCDE", FileUtils.readTextFile(mTestFile, 5, null)); 148 assertEquals("ABCDE<>", FileUtils.readTextFile(mTestFile, 5, "<>")); 149 assertEquals(TEST_DATA.substring(0, 51) + "<>", 150 FileUtils.readTextFile(mTestFile, 51, "<>")); 151 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, 52, "<>")); 152 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, 100, "<>")); 153 154 assertEquals("vwxyz", FileUtils.readTextFile(mTestFile, -5, null)); 155 assertEquals("<>vwxyz", FileUtils.readTextFile(mTestFile, -5, "<>")); 156 assertEquals("<>" + TEST_DATA.substring(1, 52), 157 FileUtils.readTextFile(mTestFile, -51, "<>")); 158 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, -52, "<>")); 159 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, -100, "<>")); 160 } 161 162 @MediumTest 163 public void testReadTextFileWithZeroLengthFile() throws Exception { 164 new FileOutputStream(mTestFile).close(); // Zero out the file 165 assertEquals("", FileUtils.readTextFile(mTestFile, 0, null)); 166 assertEquals("", FileUtils.readTextFile(mTestFile, 1, "<>")); 167 assertEquals("", FileUtils.readTextFile(mTestFile, 10, "<>")); 168 assertEquals("", FileUtils.readTextFile(mTestFile, -1, "<>")); 169 assertEquals("", FileUtils.readTextFile(mTestFile, -10, "<>")); 170 } 171} 172