123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
- /* vim:set ts=2 sw=2 sts=2 et: */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
- var Cr = Components.results;
- var Ci = Components.interfaces;
- var Cc = Components.classes;
- var Cu = Components.utils;
- var CC = Components.Constructor;
- const LocalFile = CC("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath");
- Cu.import("resource://gre/modules/Services.jsm");
- function run_test()
- {
- // This test makes sense only on Windows, so skip it on other platforms
- if ("nsILocalFileWin" in Ci
- && do_get_cwd() instanceof Ci.nsILocalFileWin) {
- let tempDir = Services.dirsvc.get("TmpD", Ci.nsILocalFile);
- tempDir.append("shortcutTesting");
- tempDir.createUnique(Ci.nsIFile.DIRECTORY_TYPE, 0o666);
- test_create_noargs(tempDir);
- test_create_notarget(tempDir);
- test_create_targetonly(tempDir);
- test_create_normal(tempDir);
- test_create_unicode(tempDir);
- test_update_noargs(tempDir);
- test_update_notarget(tempDir);
- test_update_targetonly(tempDir);
- test_update_normal(tempDir);
- test_update_unicode(tempDir);
- }
- }
- function test_create_noargs(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("shouldNeverExist.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- try
- {
- win.setShortcut();
- do_throw("Creating a shortcut with no args (no target) should throw");
- }
- catch(e if (e instanceof Ci.nsIException
- && e.result == Cr.NS_ERROR_FILE_TARGET_DOES_NOT_EXIST))
- {
- }
- }
- function test_create_notarget(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("shouldNeverExist2.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- try
- {
- win.setShortcut(null,
- do_get_cwd(),
- "arg1 arg2",
- "Shortcut with no target");
- do_throw("Creating a shortcut with no target should throw");
- }
- catch(e if (e instanceof Ci.nsIException
- && e.result == Cr.NS_ERROR_FILE_TARGET_DOES_NOT_EXIST))
- {
- }
- }
- function test_create_targetonly(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("createdShortcut.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let targetFile = tempDir.clone();
- targetFile.append("shortcutTarget.exe");
- targetFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- win.setShortcut(targetFile);
- let shortcutTarget = LocalFile(shortcutFile.target);
- do_check_true(shortcutTarget.equals(targetFile));
- }
- function test_create_normal(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("createdShortcut.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let targetFile = tempDir.clone();
- targetFile.append("shortcutTarget.exe");
- targetFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- win.setShortcut(targetFile,
- do_get_cwd(),
- "arg1 arg2",
- "Ordinary shortcut");
- let shortcutTarget = LocalFile(shortcutFile.target);
- do_check_true(shortcutTarget.equals(targetFile))
- }
- function test_create_unicode(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("createdShortcut.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let targetFile = tempDir.clone();
- targetFile.append("ṩhогТϾừ†Target.exe");
- targetFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- win.setShortcut(targetFile,
- do_get_cwd(), // XXX: This should probably be a unicode dir
- "ᾶṟǵ1 ᾶṟǵ2",
- "ῧṋіḉѻₑ");
- let shortcutTarget = LocalFile(shortcutFile.target);
- do_check_true(shortcutTarget.equals(targetFile))
- }
- function test_update_noargs(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("createdShortcut.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let targetFile = tempDir.clone();
- targetFile.append("shortcutTarget.exe");
- targetFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- win.setShortcut(targetFile,
- do_get_cwd(),
- "arg1 arg2",
- "A sample shortcut");
- win.setShortcut();
- let shortcutTarget = LocalFile(shortcutFile.target);
- do_check_true(shortcutTarget.equals(targetFile))
- }
- function test_update_notarget(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("createdShortcut.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let targetFile = tempDir.clone();
- targetFile.append("shortcutTarget.exe");
- targetFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- win.setShortcut(targetFile,
- do_get_cwd(),
- "arg1 arg2",
- "A sample shortcut");
- win.setShortcut(null,
- do_get_profile(),
- "arg3 arg4",
- "An UPDATED shortcut");
- let shortcutTarget = LocalFile(shortcutFile.target);
- do_check_true(shortcutTarget.equals(targetFile))
- }
- function test_update_targetonly(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("createdShortcut.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let targetFile = tempDir.clone();
- targetFile.append("shortcutTarget.exe");
- targetFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- win.setShortcut(targetFile,
- do_get_cwd(),
- "arg1 arg2",
- "A sample shortcut");
- let newTargetFile = tempDir.clone();
- newTargetFile.append("shortcutTarget.exe");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- win.setShortcut(newTargetFile);
- let shortcutTarget = LocalFile(shortcutFile.target);
- do_check_true(shortcutTarget.equals(newTargetFile))
- }
- function test_update_normal(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("createdShortcut.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let targetFile = tempDir.clone();
- targetFile.append("shortcutTarget.exe");
- targetFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- win.setShortcut(targetFile,
- do_get_cwd(),
- "arg1 arg2",
- "A sample shortcut");
- let newTargetFile = tempDir.clone();
- newTargetFile.append("shortcutTarget.exe");
- newTargetFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- win.setShortcut(newTargetFile,
- do_get_profile(),
- "arg3 arg4",
- "An UPDATED shortcut");
- let shortcutTarget = LocalFile(shortcutFile.target);
- do_check_true(shortcutTarget.equals(newTargetFile))
- }
- function test_update_unicode(tempDir)
- {
- let shortcutFile = tempDir.clone();
- shortcutFile.append("createdShortcut.lnk");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let targetFile = tempDir.clone();
- targetFile.append("shortcutTarget.exe");
- targetFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- let win = shortcutFile.QueryInterface(Ci.nsILocalFileWin);
- win.setShortcut(targetFile,
- do_get_cwd(),
- "arg1 arg2",
- "A sample shortcut");
- let newTargetFile = tempDir.clone();
- newTargetFile.append("ṩhогТϾừ†Target.exe");
- shortcutFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
- win.setShortcut(newTargetFile,
- do_get_profile(), // XXX: This should probably be unicode
- "ᾶṟǵ3 ᾶṟǵ4",
- "A ῧṋіḉѻₑ shortcut");
- let shortcutTarget = LocalFile(shortcutFile.target);
- do_check_true(shortcutTarget.equals(newTargetFile))
- }
|