• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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