michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: "use strict"; michael@0: michael@0: Components.utils.import("resource://gre/modules/Services.jsm", this); michael@0: Services.prefs.setBoolPref("toolkit.osfile.test.syslib_necessary", false); michael@0: // We don't need libc/kernel32.dll for this test michael@0: michael@0: let ImportWin = {}; michael@0: let ImportUnix = {}; michael@0: Components.utils.import("resource://gre/modules/osfile/ospath_win.jsm", ImportWin); michael@0: Components.utils.import("resource://gre/modules/osfile/ospath_unix.jsm", ImportUnix); michael@0: michael@0: let Win = ImportWin; michael@0: let Unix = ImportUnix; michael@0: michael@0: function do_check_fail(f) michael@0: { michael@0: try { michael@0: let result = f(); michael@0: do_print("Failed do_check_fail: " + result); michael@0: do_check_true(false); michael@0: } catch (ex) { michael@0: do_check_true(true); michael@0: } michael@0: }; michael@0: michael@0: function run_test() michael@0: { michael@0: do_print("Testing Windows paths"); michael@0: michael@0: do_print("Backslash-separated, no drive"); michael@0: do_check_eq(Win.basename("a\\b"), "b"); michael@0: do_check_eq(Win.basename("a\\b\\"), ""); michael@0: do_check_eq(Win.basename("abc"), "abc"); michael@0: do_check_eq(Win.dirname("a\\b"), "a"); michael@0: do_check_eq(Win.dirname("a\\b\\"), "a\\b"); michael@0: do_check_eq(Win.dirname("a\\\\\\\\b"), "a"); michael@0: do_check_eq(Win.dirname("abc"), "."); michael@0: do_check_eq(Win.normalize("\\a\\b\\c"), "\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("\\a\\b\\\\\\\\c"), "\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("\\a\\b\\c\\\\\\"), "\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("\\a\\b\\c\\..\\..\\..\\d\\e\\f"), "\\d\\e\\f"); michael@0: do_check_eq(Win.normalize("a\\b\\c\\..\\..\\..\\d\\e\\f"), "d\\e\\f"); michael@0: do_check_fail(function() Win.normalize("\\a\\b\\c\\..\\..\\..\\..\\d\\e\\f")); michael@0: michael@0: do_check_eq(Win.join("\\tmp", "foo", "bar"), "\\tmp\\foo\\bar", "join \\tmp,foo,bar"); michael@0: do_check_eq(Win.join("\\tmp", "\\foo", "bar"), "\\foo\\bar", "join \\tmp,\\foo,bar"); michael@0: do_check_eq(Win.winGetDrive("\\tmp"), null); michael@0: do_check_eq(Win.winGetDrive("\\tmp\\a\\b\\c\\d\\e"), null); michael@0: do_check_eq(Win.winGetDrive("\\"), null); michael@0: michael@0: michael@0: do_print("Backslash-separated, with a drive"); michael@0: do_check_eq(Win.basename("c:a\\b"), "b"); michael@0: do_check_eq(Win.basename("c:a\\b\\"), ""); michael@0: do_check_eq(Win.basename("c:abc"), "abc"); michael@0: do_check_eq(Win.dirname("c:a\\b"), "c:a"); michael@0: do_check_eq(Win.dirname("c:a\\b\\"), "c:a\\b"); michael@0: do_check_eq(Win.dirname("c:a\\\\\\\\b"), "c:a"); michael@0: do_check_eq(Win.dirname("c:abc"), "c:"); michael@0: let options = { michael@0: winNoDrive: true michael@0: }; michael@0: do_check_eq(Win.dirname("c:a\\b", options), "a"); michael@0: do_check_eq(Win.dirname("c:a\\b\\", options), "a\\b"); michael@0: do_check_eq(Win.dirname("c:a\\\\\\\\b", options), "a"); michael@0: do_check_eq(Win.dirname("c:abc", options), "."); michael@0: do_check_eq(Win.join("c:", "abc"), "c:\\abc", "join c:,abc"); michael@0: michael@0: do_check_eq(Win.normalize("c:"), "c:\\"); michael@0: do_check_eq(Win.normalize("c:\\"), "c:\\"); michael@0: do_check_eq(Win.normalize("c:\\a\\b\\c"), "c:\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("c:\\a\\b\\\\\\\\c"), "c:\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("c:\\\\\\\\a\\b\\c"), "c:\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("c:\\a\\b\\c\\\\\\"), "c:\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("c:\\a\\b\\c\\..\\..\\..\\d\\e\\f"), "c:\\d\\e\\f"); michael@0: do_check_eq(Win.normalize("c:a\\b\\c\\..\\..\\..\\d\\e\\f"), "c:\\d\\e\\f"); michael@0: do_check_fail(function() Win.normalize("c:\\a\\b\\c\\..\\..\\..\\..\\d\\e\\f")); michael@0: michael@0: do_check_eq(Win.join("c:\\", "foo"), "c:\\foo", "join c:\,foo"); michael@0: do_check_eq(Win.join("c:\\tmp", "foo", "bar"), "c:\\tmp\\foo\\bar", "join c:\\tmp,foo,bar"); michael@0: do_check_eq(Win.join("c:\\tmp", "\\foo", "bar"), "c:\\foo\\bar", "join c:\\tmp,\\foo,bar"); michael@0: do_check_eq(Win.join("c:\\tmp", "c:\\foo", "bar"), "c:\\foo\\bar", "join c:\\tmp,c:\\foo,bar"); michael@0: do_check_eq(Win.join("c:\\tmp", "c:foo", "bar"), "c:\\foo\\bar", "join c:\\tmp,c:foo,bar"); michael@0: do_check_eq(Win.winGetDrive("c:"), "c:"); michael@0: do_check_eq(Win.winGetDrive("c:\\"), "c:"); michael@0: do_check_eq(Win.winGetDrive("c:abc"), "c:"); michael@0: do_check_eq(Win.winGetDrive("c:abc\\d\\e\\f\\g"), "c:"); michael@0: do_check_eq(Win.winGetDrive("c:\\abc"), "c:"); michael@0: do_check_eq(Win.winGetDrive("c:\\abc\\d\\e\\f\\g"), "c:"); michael@0: michael@0: do_print("Forwardslash-separated, no drive"); michael@0: do_check_eq(Win.normalize("/a/b/c"), "\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("/a/b////c"), "\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("/a/b/c///"), "\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("/a/b/c/../../../d/e/f"), "\\d\\e\\f"); michael@0: do_check_eq(Win.normalize("a/b/c/../../../d/e/f"), "d\\e\\f"); michael@0: michael@0: do_print("Forwardslash-separated, with a drive"); michael@0: do_check_eq(Win.normalize("c:/"), "c:\\"); michael@0: do_check_eq(Win.normalize("c:/a/b/c"), "c:\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("c:/a/b////c"), "c:\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("c:////a/b/c"), "c:\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("c:/a/b/c///"), "c:\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("c:/a/b/c/../../../d/e/f"), "c:\\d\\e\\f"); michael@0: do_check_eq(Win.normalize("c:a/b/c/../../../d/e/f"), "c:\\d\\e\\f"); michael@0: michael@0: do_print("Backslash-separated, UNC-style"); michael@0: do_check_eq(Win.basename("\\\\a\\b"), "b"); michael@0: do_check_eq(Win.basename("\\\\a\\b\\"), ""); michael@0: do_check_eq(Win.basename("\\\\abc"), ""); michael@0: do_check_eq(Win.dirname("\\\\a\\b"), "\\\\a"); michael@0: do_check_eq(Win.dirname("\\\\a\\b\\"), "\\\\a\\b"); michael@0: do_check_eq(Win.dirname("\\\\a\\\\\\\\b"), "\\\\a"); michael@0: do_check_eq(Win.dirname("\\\\abc"), "\\\\abc"); michael@0: do_check_eq(Win.normalize("\\\\a\\b\\c"), "\\\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("\\\\a\\b\\\\\\\\c"), "\\\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("\\\\a\\b\\c\\\\\\"), "\\\\a\\b\\c"); michael@0: do_check_eq(Win.normalize("\\\\a\\b\\c\\..\\..\\d\\e\\f"), "\\\\a\\d\\e\\f"); michael@0: do_check_fail(function() Win.normalize("\\\\a\\b\\c\\..\\..\\..\\d\\e\\f")); michael@0: michael@0: do_check_eq(Win.join("\\\\a\\tmp", "foo", "bar"), "\\\\a\\tmp\\foo\\bar"); michael@0: do_check_eq(Win.join("\\\\a\\tmp", "\\foo", "bar"), "\\\\a\\foo\\bar"); michael@0: do_check_eq(Win.join("\\\\a\\tmp", "\\\\foo\\", "bar"), "\\\\foo\\bar"); michael@0: do_check_eq(Win.winGetDrive("\\\\"), null); michael@0: do_check_eq(Win.winGetDrive("\\\\c"), "\\\\c"); michael@0: do_check_eq(Win.winGetDrive("\\\\c\\abc"), "\\\\c"); michael@0: michael@0: do_print("Testing unix paths"); michael@0: do_check_eq(Unix.basename("a/b"), "b"); michael@0: do_check_eq(Unix.basename("a/b/"), ""); michael@0: do_check_eq(Unix.basename("abc"), "abc"); michael@0: do_check_eq(Unix.dirname("a/b"), "a"); michael@0: do_check_eq(Unix.dirname("a/b/"), "a/b"); michael@0: do_check_eq(Unix.dirname("a////b"), "a"); michael@0: do_check_eq(Unix.dirname("abc"), "."); michael@0: do_check_eq(Unix.normalize("/a/b/c"), "/a/b/c"); michael@0: do_check_eq(Unix.normalize("/a/b////c"), "/a/b/c"); michael@0: do_check_eq(Unix.normalize("////a/b/c"), "/a/b/c"); michael@0: do_check_eq(Unix.normalize("/a/b/c///"), "/a/b/c"); michael@0: do_check_eq(Unix.normalize("/a/b/c/../../../d/e/f"), "/d/e/f"); michael@0: do_check_eq(Unix.normalize("a/b/c/../../../d/e/f"), "d/e/f"); michael@0: do_check_fail(function() Unix.normalize("/a/b/c/../../../../d/e/f")); michael@0: michael@0: do_check_eq(Unix.join("/tmp", "foo", "bar"), "/tmp/foo/bar", "join /tmp,foo,bar"); michael@0: do_check_eq(Unix.join("/tmp", "/foo", "bar"), "/foo/bar", "join /tmp,/foo,bar"); michael@0: michael@0: do_print("Testing the presence of ospath.jsm"); michael@0: let Scope = {}; michael@0: try { michael@0: Components.utils.import("resource://gre/modules/osfile/ospath.jsm", Scope); michael@0: } catch (ex) { michael@0: // Can't load ospath michael@0: } michael@0: do_check_true(!!Scope.basename); michael@0: }