1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 package org.eclipse.jgit.junit;
47
48 import java.io.File;
49 import java.io.IOException;
50 import java.lang.reflect.Field;
51 import java.text.DateFormat;
52 import java.text.SimpleDateFormat;
53 import java.util.HashMap;
54 import java.util.Locale;
55 import java.util.Map;
56 import java.util.TimeZone;
57
58 import org.eclipse.jgit.errors.ConfigInvalidException;
59 import org.eclipse.jgit.lib.Config;
60 import org.eclipse.jgit.lib.Constants;
61 import org.eclipse.jgit.storage.file.FileBasedConfig;
62 import org.eclipse.jgit.util.FS;
63 import org.eclipse.jgit.util.SystemReader;
64
65
66
67
68 public class MockSystemReader extends SystemReader {
69 private final class MockConfig extends FileBasedConfig {
70 private MockConfig(File cfgLocation, FS fs) {
71 super(cfgLocation, fs);
72 }
73
74 @Override
75 public void load() throws IOException, ConfigInvalidException {
76
77 }
78
79 @Override
80 public boolean isOutdated() {
81 return false;
82 }
83 }
84
85 long now = 1250379778668L;
86
87 final Map<String, String> values = new HashMap<String, String>();
88
89 FileBasedConfig userGitConfig;
90
91 FileBasedConfig systemGitConfig;
92
93 public MockSystemReader() {
94 init(Constants.OS_USER_NAME_KEY);
95 init(Constants.GIT_AUTHOR_NAME_KEY);
96 init(Constants.GIT_AUTHOR_EMAIL_KEY);
97 init(Constants.GIT_COMMITTER_NAME_KEY);
98 init(Constants.GIT_COMMITTER_EMAIL_KEY);
99 setProperty(Constants.OS_USER_DIR, ".");
100 userGitConfig = new MockConfig(null, null);
101 systemGitConfig = new MockConfig(null, null);
102 setCurrentPlatform();
103 }
104
105 private void init(final String n) {
106 setProperty(n, n);
107 }
108
109 public void clearProperties() {
110 values.clear();
111 }
112
113 public void setProperty(String key, String value) {
114 values.put(key, value);
115 }
116
117 @Override
118 public String getenv(String variable) {
119 return values.get(variable);
120 }
121
122 @Override
123 public String getProperty(String key) {
124 return values.get(key);
125 }
126
127 @Override
128 public FileBasedConfig openUserConfig(Config parent, FS fs) {
129 assert parent == null || parent == systemGitConfig;
130 return userGitConfig;
131 }
132
133 @Override
134 public FileBasedConfig openSystemConfig(Config parent, FS fs) {
135 assert parent == null;
136 return systemGitConfig;
137 }
138
139 @Override
140 public String getHostname() {
141 return "fake.host.example.com";
142 }
143
144 @Override
145 public long getCurrentTime() {
146 return now;
147 }
148
149
150
151
152
153
154
155
156 public void tick(final int secDelta) {
157 now += secDelta * 1000L;
158 }
159
160 @Override
161 public int getTimezone(long when) {
162 return getTimeZone().getOffset(when) / (60 * 1000);
163 }
164
165 @Override
166 public TimeZone getTimeZone() {
167 return TimeZone.getTimeZone("GMT-03:30");
168 }
169
170 @Override
171 public Locale getLocale() {
172 return Locale.US;
173 }
174
175 @Override
176 public SimpleDateFormat getSimpleDateFormat(String pattern) {
177 return new SimpleDateFormat(pattern, getLocale());
178 }
179
180 @Override
181 public DateFormat getDateTimeInstance(int dateStyle, int timeStyle) {
182 return DateFormat
183 .getDateTimeInstance(dateStyle, timeStyle, getLocale());
184 }
185
186
187
188
189 public void setCurrentPlatform() {
190 resetOsNames();
191 setProperty("os.name", System.getProperty("os.name"));
192 setProperty("file.separator", System.getProperty("file.separator"));
193 setProperty("path.separator", System.getProperty("path.separator"));
194 setProperty("line.separator", System.getProperty("line.separator"));
195 }
196
197
198
199
200 public void setWindows() {
201 resetOsNames();
202 setProperty("os.name", "Windows");
203 setProperty("file.separator", "\\");
204 setProperty("path.separator", ";");
205 setProperty("line.separator", "\r\n");
206 setPlatformChecker();
207 }
208
209
210
211
212 public void setUnix() {
213 resetOsNames();
214 setProperty("os.name", "*nix");
215 setProperty("file.separator", "/");
216 setProperty("path.separator", ":");
217 setProperty("line.separator", "\n");
218 setPlatformChecker();
219 }
220
221 private void resetOsNames() {
222 Field field;
223 try {
224 field = SystemReader.class.getDeclaredField("isWindows");
225 field.setAccessible(true);
226 field.set(null, null);
227 field = SystemReader.class.getDeclaredField("isMacOS");
228 field.setAccessible(true);
229 field.set(null, null);
230 } catch (Exception e) {
231 e.printStackTrace();
232 }
233 }
234 }