2 * Copyright 2011-2016 Blender Foundation
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #include "testing/testing.h"
19 #include "util/util_path.h"
23 /* ******** Tests for path_filename() ******** */
26 TEST(util_path_filename, simple_unix)
28 string str = path_filename("/tmp/foo.txt");
29 EXPECT_EQ(str, "foo.txt");
32 TEST(util_path_filename, root_unix)
34 string str = path_filename("/");
38 TEST(util_path_filename, last_slash_unix)
40 string str = path_filename("/tmp/foo.txt/");
44 TEST(util_path_filename, alternate_slash_unix)
46 string str = path_filename("/tmp\\foo.txt");
47 EXPECT_EQ(str, "tmp\\foo.txt");
51 TEST(util_path_filename, file_only)
53 string str = path_filename("foo.txt");
54 EXPECT_EQ(str, "foo.txt");
57 TEST(util_path_filename, empty)
59 string str = path_filename("");
64 TEST(util_path_filename, simple_windows)
66 string str = path_filename("C:\\tmp\\foo.txt");
67 EXPECT_EQ(str, "foo.txt");
70 TEST(util_path_filename, root_windows)
72 string str = path_filename("C:\\");
76 TEST(util_path_filename, last_slash_windows)
78 string str = path_filename("C:\\tmp\\foo.txt\\");
82 TEST(util_path_filename, alternate_slash_windows)
84 string str = path_filename("C:\\tmp/foo.txt");
85 EXPECT_EQ(str, "foo.txt");
89 /* ******** Tests for path_dirname() ******** */
92 TEST(util_path_dirname, simple_unix)
94 string str = path_dirname("/tmp/foo.txt");
95 EXPECT_EQ(str, "/tmp");
98 TEST(util_path_dirname, root_unix)
100 string str = path_dirname("/");
104 TEST(util_path_dirname, last_slash_unix)
106 string str = path_dirname("/tmp/foo.txt/");
107 EXPECT_EQ(str, "/tmp/foo.txt");
110 TEST(util_path_dirname, alternate_slash_unix)
112 string str = path_dirname("/tmp\\foo.txt");
117 TEST(util_path_dirname, file_only)
119 string str = path_dirname("foo.txt");
123 TEST(util_path_dirname, empty)
125 string str = path_dirname("");
130 TEST(util_path_dirname, simple_windows)
132 string str = path_dirname("C:\\tmp\\foo.txt");
133 EXPECT_EQ(str, "C:\\tmp");
136 TEST(util_path_dirname, root_windows)
138 string str = path_dirname("C:\\");
139 EXPECT_EQ(str, "C:");
142 TEST(util_path_dirname, last_slash_windows)
144 string str = path_dirname("C:\\tmp\\foo.txt\\");
145 EXPECT_EQ(str, "C:\\tmp\\foo.txt");
148 TEST(util_path_dirname, alternate_slash_windows)
150 string str = path_dirname("C:\\tmp/foo.txt");
151 EXPECT_EQ(str, "C:\\tmp");
155 /* ******** Tests for path_join() ******** */
157 TEST(util_path_join, empty_both)
159 string str = path_join("", "");
163 TEST(util_path_join, empty_directory)
165 string str = path_join("", "foo.txt");
166 EXPECT_EQ(str, "foo.txt");
169 TEST(util_path_join, empty_filename)
171 string str = path_join("foo", "");
172 EXPECT_EQ(str, "foo");
176 TEST(util_path_join, simple_unix)
178 string str = path_join("foo", "bar");
179 EXPECT_EQ(str, "foo/bar");
182 TEST(util_path_join, directory_slash_unix)
184 string str = path_join("foo/", "bar");
185 EXPECT_EQ(str, "foo/bar");
188 TEST(util_path_join, filename_slash_unix)
190 string str = path_join("foo", "/bar");
191 EXPECT_EQ(str, "foo/bar");
194 TEST(util_path_join, both_slash_unix)
196 string str = path_join("foo/", "/bar");
197 EXPECT_EQ(str, "foo//bar");
200 TEST(util_path_join, directory_alternate_slash_unix)
202 string str = path_join("foo\\", "bar");
203 EXPECT_EQ(str, "foo\\/bar");
206 TEST(util_path_join, filename_alternate_slash_unix)
208 string str = path_join("foo", "\\bar");
209 EXPECT_EQ(str, "foo/\\bar");
212 TEST(util_path_join, both_alternate_slash_unix)
214 string str = path_join("foo", "\\bar");
215 EXPECT_EQ(str, "foo/\\bar");
218 TEST(util_path_join, empty_dir_filename_slash_unix)
220 string str = path_join("", "/foo.txt");
221 EXPECT_EQ(str, "/foo.txt");
224 TEST(util_path_join, empty_dir_filename_alternate_slash_unix)
226 string str = path_join("", "\\foo.txt");
227 EXPECT_EQ(str, "\\foo.txt");
230 TEST(util_path_join, empty_filename_dir_slash_unix)
232 string str = path_join("foo/", "");
233 EXPECT_EQ(str, "foo/");
236 TEST(util_path_join, empty_filename_dir_alternate_slash_unix)
238 string str = path_join("foo\\", "");
239 EXPECT_EQ(str, "foo\\");
242 TEST(util_path_join, simple_windows)
244 string str = path_join("foo", "bar");
245 EXPECT_EQ(str, "foo\\bar");
248 TEST(util_path_join, directory_slash_windows)
250 string str = path_join("foo\\", "bar");
251 EXPECT_EQ(str, "foo\\bar");
254 TEST(util_path_join, filename_slash_windows)
256 string str = path_join("foo", "\\bar");
257 EXPECT_EQ(str, "foo\\bar");
260 TEST(util_path_join, both_slash_windows)
262 string str = path_join("foo\\", "\\bar");
263 EXPECT_EQ(str, "foo\\\\bar");
266 TEST(util_path_join, directory_alternate_slash_windows)
268 string str = path_join("foo/", "bar");
269 EXPECT_EQ(str, "foo/bar");
272 TEST(util_path_join, filename_alternate_slash_windows)
274 string str = path_join("foo", "/bar");
275 EXPECT_EQ(str, "foo/bar");
278 TEST(util_path_join, both_alternate_slash_windows)
280 string str = path_join("foo/", "/bar");
281 EXPECT_EQ(str, "foo//bar");
284 TEST(util_path_join, empty_dir_filename_slash_windows)
286 string str = path_join("", "\\foo.txt");
287 EXPECT_EQ(str, "\\foo.txt");
290 TEST(util_path_join, empty_dir_filename_alternate_slash_windows)
292 string str = path_join("", "/foo.txt");
293 EXPECT_EQ(str, "/foo.txt");
296 TEST(util_path_join, empty_filename_dir_slash_windows)
298 string str = path_join("foo\\", "");
299 EXPECT_EQ(str, "foo\\");
302 TEST(util_path_join, empty_filename_dir_alternate_slash_windows)
304 string str = path_join("foo/", "");
305 EXPECT_EQ(str, "foo/");
309 /* ******** Tests for path_escape() ******** */
311 TEST(util_path_escape, no_escape_chars)
313 string str = path_escape("/tmp/foo/bar");
314 EXPECT_EQ(str, "/tmp/foo/bar");
317 TEST(util_path_escape, simple)
319 string str = path_escape("/tmp/foo bar");
320 EXPECT_EQ(str, "/tmp/foo\\ bar");
323 TEST(util_path_escape, simple_end)
325 string str = path_escape("/tmp/foo/bar ");
326 EXPECT_EQ(str, "/tmp/foo/bar\\ ");
329 TEST(util_path_escape, multiple)
331 string str = path_escape("/tmp/foo bar");
332 EXPECT_EQ(str, "/tmp/foo\\ \\ bar");
335 TEST(util_path_escape, simple_multiple_end)
337 string str = path_escape("/tmp/foo/bar ");
338 EXPECT_EQ(str, "/tmp/foo/bar\\ \\ ");
341 /* ******** Tests for path_is_relative() ******** */
343 TEST(util_path_is_relative, filename)
345 bool is_relative = path_is_relative("foo.txt");
346 EXPECT_TRUE(is_relative);
350 TEST(util_path_is_relative, absolute_unix)
352 bool is_relative = path_is_relative("/tmp/foo.txt");
353 EXPECT_FALSE(is_relative);
356 TEST(util_path_is_relative, relative_dir_unix)
358 bool is_relative = path_is_relative("tmp/foo.txt");
359 EXPECT_TRUE(is_relative);
362 TEST(util_path_is_relative, absolute_windir_on_unix)
364 bool is_relative = path_is_relative("C:\\tmp\\foo.txt");
365 EXPECT_TRUE(is_relative);
368 TEST(util_path_is_relative, relative_windir_on_unix)
370 bool is_relative = path_is_relative("tmp\\foo.txt");
371 EXPECT_TRUE(is_relative);
376 TEST(util_path_is_relative, absolute_windows)
378 bool is_relative = path_is_relative("C:\\tmp\\foo.txt");
379 EXPECT_FALSE(is_relative);
382 TEST(util_path_is_relative, relative_dir_windows)
384 bool is_relative = path_is_relative("tmp\\foo.txt");
385 EXPECT_TRUE(is_relative);
388 TEST(util_path_is_relative, absolute_unixdir_on_windows)
390 bool is_relative = path_is_relative("/tmp/foo.txt");
391 EXPECT_TRUE(is_relative);
394 TEST(util_path_is_relative, relative_unixdir_on_windows)
396 bool is_relative = path_is_relative("tmp/foo.txt");
397 EXPECT_TRUE(is_relative);