]> git.lizzy.rs Git - rust.git/blob - src/test/stdtest/fs.rs
std: Add fs::homedir
[rust.git] / src / test / stdtest / fs.rs
1 import core::*;
2
3 use std;
4 import std::fs;
5 import vec;
6
7 #[test]
8 fn test_connect() {
9     let slash = fs::path_sep();
10     log(error, fs::connect("a", "b"));
11     assert (fs::connect("a", "b") == "a" + slash + "b");
12     assert (fs::connect("a" + slash, "b") == "a" + slash + "b");
13 }
14
15 // Issue #712
16 #[test]
17 fn test_list_dir_no_invalid_memory_access() { fs::list_dir("."); }
18
19 #[test]
20 fn list_dir() {
21     let dirs = fs::list_dir(".");
22     // Just assuming that we've got some contents in the current directory
23     assert (vec::len(dirs) > 0u);
24
25     for dir in dirs { log(debug, dir); }
26 }
27
28 #[test]
29 fn path_is_dir() {
30     assert (fs::path_is_dir("."));
31     assert (!fs::path_is_dir("test/stdtest/fs.rs"));
32 }
33
34 #[test]
35 fn path_exists() {
36     assert (fs::path_exists("."));
37     assert (!fs::path_exists("test/nonexistent-bogus-path"));
38 }
39
40 fn ps() -> str {
41     fs::path_sep()
42 }
43
44 fn aps() -> str {
45     "/"
46 }
47
48 #[test]
49 fn split1() {
50     let actual = fs::split("a" + ps() + "b");
51     let expected = ["a", "b"];
52     assert actual == expected;
53 }
54
55 #[test]
56 fn split2() {
57     let actual = fs::split("a" + aps() + "b");
58     let expected = ["a", "b"];
59     assert actual == expected;
60 }
61
62 #[test]
63 fn split3() {
64     let actual = fs::split(ps() + "a" + ps() + "b");
65     let expected = ["a", "b"];
66     assert actual == expected;
67 }
68
69 #[test]
70 fn split4() {
71     let actual = fs::split("a" + ps() + "b" + aps() + "c");
72     let expected = ["a", "b", "c"];
73     assert actual == expected;
74 }
75
76 #[test]
77 fn normalize1() {
78     let actual = fs::normalize("a/b/..");
79     let expected = "a";
80     assert actual == expected;
81 }
82
83 #[test]
84 fn normalize2() {
85     let actual = fs::normalize("/a/b/..");
86     let expected = "/a";
87     assert actual == expected;
88 }
89
90 #[test]
91 fn normalize3() {
92     let actual = fs::normalize("a/../b");
93     let expected = "b";
94     assert actual == expected;
95 }
96
97 #[test]
98 fn normalize4() {
99     let actual = fs::normalize("/a/../b");
100     let expected = "/b";
101     assert actual == expected;
102 }
103
104 #[test]
105 fn normalize5() {
106     let actual = fs::normalize("a/.");
107     let expected = "a";
108     assert actual == expected;
109 }
110
111 #[test]
112 fn normalize6() {
113     let actual = fs::normalize("a/./b/");
114     let expected = "a/b/";
115     assert actual == expected;
116 }
117
118 #[test]
119 fn normalize7() {
120     let actual = fs::normalize("a/..");
121     let expected = ".";
122     assert actual == expected;
123 }
124
125 #[test]
126 fn normalize8() {
127     let actual = fs::normalize("../../..");
128     let expected = "../../..";
129     assert actual == expected;
130 }
131
132 #[test]
133 fn normalize9() {
134     let actual = fs::normalize("a/b/../../..");
135     let expected = "..";
136     assert actual == expected;
137 }
138
139 #[test]
140 fn normalize10() {
141     let actual = fs::normalize("/a/b/c/../d/./../../e/");
142     let expected = "/a/e/";
143     log(error, actual);
144     assert actual == expected;
145 }
146
147 #[test]
148 fn normalize11() {
149     let actual = fs::normalize("/a/..");
150     let expected = "/";
151     assert actual == expected;
152 }
153
154 #[test]
155 #[cfg(target_os = "win32")]
156 fn normalize12() {
157    let actual = fs::normalize("C:/whatever");
158    let expected = "C:/whatever";
159    log(error, actual);
160    assert actual == expected;
161 }
162
163 #[test]
164 #[cfg(target_os = "win32")]
165 fn path_is_absolute_win32() {
166    assert fs::path_is_absolute("C:/whatever");
167 }
168
169 #[test]
170 fn splitext_empty() {
171     let (base, ext) = fs::splitext("");
172     assert base == "";
173     assert ext == "";
174 }
175
176 #[test]
177 fn splitext_ext() {
178     let (base, ext) = fs::splitext("grum.exe");
179     assert base == "grum";
180     assert ext == ".exe";
181 }
182
183 #[test]
184 fn splitext_noext() {
185     let (base, ext) = fs::splitext("grum");
186     assert base == "grum";
187     assert ext == "";
188 }
189
190 #[test]
191 fn splitext_dotfile() {
192     let (base, ext) = fs::splitext(".grum");
193     assert base == ".grum";
194     assert ext == "";
195 }
196
197 #[test]
198 fn splitext_path_ext() {
199     let (base, ext) = fs::splitext("oh/grum.exe");
200     assert base == "oh/grum";
201     assert ext == ".exe";
202 }
203
204 #[test]
205 fn splitext_path_noext() {
206     let (base, ext) = fs::splitext("oh/grum");
207     assert base == "oh/grum";
208     assert ext == "";
209 }
210
211 #[test]
212 fn splitext_dot_in_path() {
213     let (base, ext) = fs::splitext("oh.my/grum");
214     assert base == "oh.my/grum";
215     assert ext == "";
216 }
217
218 #[test]
219 fn splitext_nobasename() {
220     let (base, ext) = fs::splitext("oh.my/");
221     assert base == "oh.my/";
222     assert ext == "";
223 }
224
225 #[test]
226 #[cfg(target_os = "linux")]
227 #[cfg(target_os = "macos")]
228 #[cfg(target_os = "freebsd")]
229 fn homedir() {
230     import getenv = std::generic_os::getenv;
231     import setenv = std::generic_os::setenv;
232
233     let oldhome = getenv("HOME");
234
235     setenv("HOME", "/home/MountainView");
236     assert fs::homedir() == some("/home/MountainView");
237
238     setenv("HOME", "");
239     assert fs::homedir() == none;
240
241     option::may(oldhome, {|s| setenv("HOME", s)});
242 }
243
244 #[test]
245 #[cfg(target_os = "win32")]
246 fn homedir() {
247     import getenv = std::generic_os::getenv;
248     import setenv = std::generic_os::setenv;
249
250     let oldhome = getenv("HOME");
251     let olduserprofile = getenv("USERPROFILE");
252
253     setenv("HOME", "");
254     setenv("USERPROFILE", "");
255
256     assert fs::homedir() == none;
257
258     setenv("HOME", "/home/MountainView");
259     assert fs::homedir() == some("/home/MountainView");
260
261     setenv("HOME", "");
262
263     setenv("USERPROFILE", "/home/MountainView");
264     assert fs::homedir() == some("/home/MountainView");
265
266     setenv("USERPROFILE", "/home/MountainView");
267     assert fs::homedir() == some("/home/MountainView");
268
269     setenv("HOME", "/home/MountainView");
270     setenv("USERPROFILE", "/home/PaloAlto");
271     assert fs::homedir() == some("/home/MountainView");
272
273     option::may(oldhome, {|s| setenv("HOME", s)});
274     option::may(olduserprofile, {|s| setenv("USERPROFILE", s)});
275 }