Initial commit
[squelch.git] / src / test / java / net / jaekl / squelch / util / FileUtilMock.java
1 package net.jaekl.squelch.util;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.InputStream;
7 import java.util.HashMap;
8
9 public class FileUtilMock extends FileUtil {
10         private HashMap<String, Boolean> m_readable;
11         private HashMap<String, FileMock> m_files;
12         
13         private FileUtilMock() {
14                 m_readable = new HashMap<String, Boolean>();
15                 m_files = new HashMap<String, FileMock>();
16         }
17         
18         public static void mock_setInst() {
19                 synchronized(FileUtil.class) { 
20                         m_inst = new FileUtilMock();
21                 }
22         }
23         
24         public static FileUtilMock mock_getInst() {
25                 FileUtil result = m_inst;
26                 if (result instanceof FileUtilMock) {
27                         return (FileUtilMock) m_inst;
28                 }
29                 throw new AssertionError("Mock not initialized?");
30         }
31         
32         @Override
33         public File newFile(String filename) {
34                 return mock_newFile(filename);
35         }
36         
37         @Override
38         public InputStream openStream(File file) throws FileNotFoundException {
39                 if (file instanceof FileMock) {
40                         return ((FileMock)file).mock_openStream();
41                 }
42                 return new FileInputStream(file);
43         }
44         
45         public FileMock mock_newFile(String filename) {
46                 File file = new File(filename);
47                 String absFilename = file.getAbsolutePath();
48                 FileMock fileMock = m_files.get(absFilename);
49                 if (null == fileMock) {
50                         fileMock = new FileMock(filename);
51                         m_files.put(fileMock.getAbsolutePath(), fileMock);
52                 }
53                 return fileMock;                
54         }
55         
56         public void mock_setReadable(File file, boolean readable) {
57                 m_readable.put(file.getAbsolutePath(), Boolean.valueOf(readable));
58         }
59         
60         public boolean mock_canRead(FileMock fileMock) {
61                 Boolean readable = m_readable.get(fileMock.getAbsolutePath());
62                 if (null == readable) {
63                         return false;
64                 }
65                 
66                 return readable.booleanValue();
67         }
68 }