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.test.AndroidTestCase; 21import android.test.suitebuilder.annotation.MediumTest; 22 23import java.io.ByteArrayInputStream; 24import java.io.File; 25import java.io.FileOutputStream; 26import java.io.FileWriter; 27 28public class FileUtilsTest extends AndroidTestCase { 29 private static final String TEST_DATA = 30 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 31 32 private File mTestFile; 33 private File mCopyFile; 34 35 @Override 36 protected void setUp() throws Exception { 37 super.setUp(); 38 File testDir = getContext().getDir("testing", Context.MODE_PRIVATE); 39 mTestFile = new File(testDir, "test.file"); 40 mCopyFile = new File(testDir, "copy.file"); 41 FileWriter writer = new FileWriter(mTestFile); 42 try { 43 writer.write(TEST_DATA, 0, TEST_DATA.length()); 44 } finally { 45 writer.close(); 46 } 47 } 48 49 @Override 50 protected void tearDown() throws Exception { 51 if (mTestFile.exists()) mTestFile.delete(); 52 if (mCopyFile.exists()) mCopyFile.delete(); 53 } 54 55 // TODO: test setPermissions(), getPermissions() 56 57 @MediumTest 58 public void testCopyFile() throws Exception { 59 assertFalse(mCopyFile.exists()); 60 FileUtils.copyFile(mTestFile, mCopyFile); 61 assertTrue(mCopyFile.exists()); 62 assertEquals(TEST_DATA, FileUtils.readTextFile(mCopyFile, 0, null)); 63 } 64 65 @MediumTest 66 public void testCopyToFile() throws Exception { 67 final String s = "Foo Bar"; 68 assertFalse(mCopyFile.exists()); 69 FileUtils.copyToFile(new ByteArrayInputStream(s.getBytes()), mCopyFile); assertTrue(mCopyFile.exists()); 70 assertEquals(s, FileUtils.readTextFile(mCopyFile, 0, null)); 71 } 72 73 @MediumTest 74 public void testIsFilenameSafe() throws Exception { 75 assertTrue(FileUtils.isFilenameSafe(new File("foobar"))); 76 assertTrue(FileUtils.isFilenameSafe(new File("a_b-c=d.e/0,1+23"))); 77 assertFalse(FileUtils.isFilenameSafe(new File("foo*bar"))); 78 assertFalse(FileUtils.isFilenameSafe(new File("foo\nbar"))); 79 } 80 81 @MediumTest 82 public void testReadTextFile() throws Exception { 83 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, 0, null)); 84 85 assertEquals("ABCDE", FileUtils.readTextFile(mTestFile, 5, null)); 86 assertEquals("ABCDE<>", FileUtils.readTextFile(mTestFile, 5, "<>")); 87 assertEquals(TEST_DATA.substring(0, 51) + "<>", 88 FileUtils.readTextFile(mTestFile, 51, "<>")); 89 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, 52, "<>")); 90 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, 100, "<>")); 91 92 assertEquals("vwxyz", FileUtils.readTextFile(mTestFile, -5, null)); 93 assertEquals("<>vwxyz", FileUtils.readTextFile(mTestFile, -5, "<>")); 94 assertEquals("<>" + TEST_DATA.substring(1, 52), 95 FileUtils.readTextFile(mTestFile, -51, "<>")); 96 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, -52, "<>")); 97 assertEquals(TEST_DATA, FileUtils.readTextFile(mTestFile, -100, "<>")); 98 } 99 100 @MediumTest 101 public void testReadTextFileWithZeroLengthFile() throws Exception { 102 new FileOutputStream(mTestFile).close(); // Zero out the file 103 assertEquals("", FileUtils.readTextFile(mTestFile, 0, null)); 104 assertEquals("", FileUtils.readTextFile(mTestFile, 1, "<>")); 105 assertEquals("", FileUtils.readTextFile(mTestFile, 10, "<>")); 106 assertEquals("", FileUtils.readTextFile(mTestFile, -1, "<>")); 107 assertEquals("", FileUtils.readTextFile(mTestFile, -10, "<>")); 108 } 109} 110