1 /* 2 * Copyright (C) 2011 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 17 package com.android.sdklib.io; 18 19 import java.io.File; 20 import java.io.OutputStream; 21 import java.util.Arrays; 22 23 import junit.framework.TestCase; 24 25 /** 26 * Unit-test for the {@link MockFileOp}, which is a mock of {@link FileOp} that doesn't 27 * touch the file system. Just testing the test. 28 */ 29 public class MockFileOpTest extends TestCase { 30 31 private MockFileOp m; 32 33 @Override setUp()34 protected void setUp() throws Exception { 35 super.setUp(); 36 m = new MockFileOp(); 37 } 38 createFile(String...segments)39 private File createFile(String...segments) { 40 File f = null; 41 for (String segment : segments) { 42 if (f == null) { 43 f = new File(segment); 44 } else { 45 f = new File(f, segment); 46 } 47 } 48 49 return f; 50 } 51 testIsFile()52 public void testIsFile() { 53 File f1 = createFile("/dir1", "file1"); 54 assertFalse(m.isFile(f1)); 55 56 m.recordExistingFile("/dir1/file1"); 57 assertTrue(m.isFile(f1)); 58 59 assertEquals( 60 "[/dir1/file1]", 61 Arrays.toString(m.getExistingFiles())); 62 } 63 testIsDirectory()64 public void testIsDirectory() { 65 File d4 = createFile("/dir1", "dir2", "dir3", "dir4"); 66 File f7 = createFile("/dir1", "dir2", "dir6", "file7"); 67 assertFalse(m.isDirectory(d4)); 68 69 m.recordExistingFolder("/dir1/dir2/dir3/dir4"); 70 m.recordExistingFile("/dir1/dir2/dir6/file7"); 71 assertTrue(m.isDirectory(d4)); 72 assertFalse(m.isDirectory(f7)); 73 74 // any intermediate directory exists implicitly 75 assertTrue(m.isDirectory(createFile("/"))); 76 assertTrue(m.isDirectory(createFile("/dir1"))); 77 assertTrue(m.isDirectory(createFile("/dir1", "dir2"))); 78 assertTrue(m.isDirectory(createFile("/dir1", "dir2", "dir3"))); 79 assertTrue(m.isDirectory(createFile("/dir1", "dir2", "dir6"))); 80 81 assertEquals( 82 "[/dir1/dir2/dir3/dir4]", 83 Arrays.toString(m.getExistingFolders())); 84 } 85 testDelete()86 public void testDelete() { 87 m.recordExistingFolder("/dir1"); 88 m.recordExistingFile("/dir1/file1"); 89 m.recordExistingFile("/dir1/file2"); 90 91 assertEquals( 92 "[/dir1/file1, /dir1/file2]", 93 Arrays.toString(m.getExistingFiles())); 94 95 assertTrue(m.delete(createFile("/dir1", "file1"))); 96 assertFalse(m.delete(createFile("/dir1", "file3"))); 97 assertFalse(m.delete(createFile("/dir2", "file2"))); 98 assertEquals( 99 "[/dir1/file2]", 100 Arrays.toString(m.getExistingFiles())); 101 102 // deleting a directory with files in it fails 103 assertFalse(m.delete(createFile("/dir1"))); 104 // but it works if the directory is empty 105 assertTrue(m.delete(createFile("/dir1", "file2"))); 106 assertTrue(m.delete(createFile("/dir1"))); 107 } 108 testListFiles()109 public void testListFiles() { 110 m.recordExistingFolder("/dir1"); 111 m.recordExistingFile("/dir1/file1"); 112 m.recordExistingFile("/dir1/file2"); 113 m.recordExistingFile("/dir1/dir2/file3"); 114 m.recordExistingFile("/dir4/file4"); 115 116 assertEquals( 117 "[]", 118 m.getAgnosticAbsPath(Arrays.toString(m.listFiles(createFile("/not_a_dir"))))); 119 120 assertEquals( 121 "[/dir1/dir2/file3]", 122 m.getAgnosticAbsPath(Arrays.toString(m.listFiles(createFile("/dir1", "dir2"))))); 123 124 assertEquals( 125 "[/dir1/dir2/file3, /dir1/file1, /dir1/file2]", 126 m.getAgnosticAbsPath(Arrays.toString(m.listFiles(createFile("/dir1"))))); 127 } 128 testMkDirs()129 public void testMkDirs() { 130 assertEquals("[]", Arrays.toString(m.getExistingFolders())); 131 132 assertTrue(m.mkdirs(createFile("/dir1"))); 133 assertEquals("[/, /dir1]", Arrays.toString(m.getExistingFolders())); 134 135 m.recordExistingFolder("/dir1"); 136 assertEquals("[/, /dir1]", Arrays.toString(m.getExistingFolders())); 137 138 assertTrue(m.mkdirs(createFile("/dir1/dir2/dir3"))); 139 assertEquals( 140 "[/, /dir1, /dir1/dir2, /dir1/dir2/dir3]", 141 Arrays.toString(m.getExistingFolders())); 142 } 143 testRenameTo()144 public void testRenameTo() { 145 m.recordExistingFile("/dir1/dir2/dir6/file7"); 146 m.recordExistingFolder("/dir1/dir2/dir3/dir4"); 147 148 assertEquals("[/dir1/dir2/dir6/file7]", Arrays.toString(m.getExistingFiles())); 149 assertEquals("[/dir1/dir2/dir3/dir4]", Arrays.toString(m.getExistingFolders())); 150 151 assertTrue(m.renameTo(createFile("/dir1", "dir2"), createFile("/dir1", "newDir2"))); 152 assertEquals("[/dir1/newDir2/dir6/file7]", Arrays.toString(m.getExistingFiles())); 153 assertEquals("[/dir1/newDir2/dir3/dir4]", Arrays.toString(m.getExistingFolders())); 154 155 assertTrue(m.renameTo( 156 createFile("/dir1", "newDir2", "dir6", "file7"), 157 createFile("/dir1", "newDir2", "dir6", "newFile7"))); 158 assertTrue(m.renameTo( 159 createFile("/dir1", "newDir2", "dir3", "dir4"), 160 createFile("/dir1", "newDir2", "dir3", "newDir4"))); 161 assertEquals("[/dir1/newDir2/dir6/newFile7]", Arrays.toString(m.getExistingFiles())); 162 assertEquals("[/dir1/newDir2/dir3/newDir4]", Arrays.toString(m.getExistingFolders())); 163 } 164 testNewFileOutputStream()165 public void testNewFileOutputStream() throws Exception { 166 assertEquals("[]", Arrays.toString(m.getOutputStreams())); 167 168 File f = createFile("/dir1", "dir2", "simple ascii"); 169 OutputStream os = m.newFileOutputStream(f); 170 assertNotNull(os); 171 os.write("regular ascii".getBytes("UTF-8")); 172 os.close(); 173 174 f = createFile("/dir1", "dir2", "utf-8 test"); 175 os = m.newFileOutputStream(f); 176 assertNotNull(os); 177 os.write("nihongo in UTF-8: 日本語".getBytes("UTF-8")); 178 os.close(); 179 180 f = createFile("/dir1", "dir2", "forgot to close"); 181 os = m.newFileOutputStream(f); 182 assertNotNull(os); 183 os.write("wrote stuff but not closing the stream".getBytes("UTF-8")); 184 185 assertEquals( 186 "[</dir1/dir2/simple ascii: 'regular ascii'>, " + 187 "</dir1/dir2/utf-8 test: 'nihongo in UTF-8: 日本語'>, " + 188 "</dir1/dir2/forgot to close: (stream not closed properly)>]", 189 Arrays.toString(m.getOutputStreams())); 190 } 191 } 192