diff options
Diffstat (limited to 'toolkit/components/crashmonitor/test/unit')
9 files changed, 154 insertions, 0 deletions
diff --git a/toolkit/components/crashmonitor/test/unit/.eslintrc.js b/toolkit/components/crashmonitor/test/unit/.eslintrc.js new file mode 100644 index 000000000..d35787cd2 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/.eslintrc.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + "extends": [ + "../../../../../testing/xpcshell/xpcshell.eslintrc.js" + ] +}; diff --git a/toolkit/components/crashmonitor/test/unit/head.js b/toolkit/components/crashmonitor/test/unit/head.js new file mode 100644 index 000000000..6d7d50d0c --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/head.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "OS", + "resource://gre/modules/osfile.jsm"); + +var sessionCheckpointsPath; + +/** + * Start the tasks of the different tests + */ +function run_test() +{ + do_get_profile(); + sessionCheckpointsPath = OS.Path.join(OS.Constants.Path.profileDir, + "sessionCheckpoints.json"); + Components.utils.import("resource://gre/modules/CrashMonitor.jsm"); + run_next_test(); +} diff --git a/toolkit/components/crashmonitor/test/unit/test_init.js b/toolkit/components/crashmonitor/test/unit/test_init.js new file mode 100644 index 000000000..d72f46aca --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_init.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +/** + * Test that calling |init| twice throws an error + */ +add_task(function test_init() { + CrashMonitor.init(); + try { + CrashMonitor.init(); + do_check_true(false); + } catch (ex) { + do_check_true(true); + } +}); diff --git a/toolkit/components/crashmonitor/test/unit/test_invalid_file.js b/toolkit/components/crashmonitor/test/unit/test_invalid_file.js new file mode 100644 index 000000000..cc55a2755 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_invalid_file.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +/** + * Test with sessionCheckpoints.json containing invalid data + */ +add_task(function* test_invalid_file() { + // Write bogus data to checkpoint file + let data = "1234"; + yield OS.File.writeAtomic(sessionCheckpointsPath, data, + {tmpPath: sessionCheckpointsPath + ".tmp"}); + + // An invalid file will cause |init| to return null + let status = yield CrashMonitor.init(); + do_check_true(status === null ? true : false); + + // and |previousCheckpoints| will be null + let checkpoints = yield CrashMonitor.previousCheckpoints; + do_check_true(checkpoints === null ? true : false); +}); diff --git a/toolkit/components/crashmonitor/test/unit/test_invalid_json.js b/toolkit/components/crashmonitor/test/unit/test_invalid_json.js new file mode 100644 index 000000000..f3b05208a --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_invalid_json.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +/** + * Test with sessionCheckpoints.json containing invalid JSON data + */ +add_task(function* test_invalid_file() { + // Write bogus data to checkpoint file + let data = "[}"; + yield OS.File.writeAtomic(sessionCheckpointsPath, data, + {tmpPath: sessionCheckpointsPath + ".tmp"}); + + CrashMonitor.init(); + let checkpoints = yield CrashMonitor.previousCheckpoints; + do_check_eq(checkpoints, null); +}); diff --git a/toolkit/components/crashmonitor/test/unit/test_missing_file.js b/toolkit/components/crashmonitor/test/unit/test_missing_file.js new file mode 100644 index 000000000..9ce31da95 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_missing_file.js @@ -0,0 +1,13 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +/** + * Test with non-existing sessionCheckpoints.json + */ +add_task(function* test_missing_file() { + CrashMonitor.init(); + let checkpoints = yield CrashMonitor.previousCheckpoints; + do_check_eq(checkpoints, null); +}); diff --git a/toolkit/components/crashmonitor/test/unit/test_register.js b/toolkit/components/crashmonitor/test/unit/test_register.js new file mode 100644 index 000000000..33c73a5ae --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_register.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +/** + * Test that CrashMonitor.jsm is correctly loaded from XPCOM component + */ +add_task(function test_register() { + let cm = Components.classes["@mozilla.org/toolkit/crashmonitor;1"] + .createInstance(Components.interfaces.nsIObserver); + + // Send "profile-after-change" to trigger the initialization + cm.observe(null, "profile-after-change", null); + + // If CrashMonitor was initialized properly a new call to |init| + // should fail + try { + CrashMonitor.init(); + do_check_true(false); + } catch (ex) { + do_check_true(true); + } +}); diff --git a/toolkit/components/crashmonitor/test/unit/test_valid_file.js b/toolkit/components/crashmonitor/test/unit/test_valid_file.js new file mode 100644 index 000000000..d2f214cc0 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_valid_file.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +/** + * Test with sessionCheckpoints.json containing valid data + */ +add_task(function* test_valid_file() { + // Write valid data to checkpoint file + let data = JSON.stringify({"final-ui-startup": true}); + yield OS.File.writeAtomic(sessionCheckpointsPath, data, + {tmpPath: sessionCheckpointsPath + ".tmp"}); + + CrashMonitor.init(); + let checkpoints = yield CrashMonitor.previousCheckpoints; + + do_check_true(checkpoints["final-ui-startup"]); + do_check_eq(Object.keys(checkpoints).length, 1); +}); diff --git a/toolkit/components/crashmonitor/test/unit/xpcshell.ini b/toolkit/components/crashmonitor/test/unit/xpcshell.ini new file mode 100644 index 000000000..cd86b2535 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/xpcshell.ini @@ -0,0 +1,11 @@ +[DEFAULT] +head = head.js +tail = +skip-if = toolkit == 'android' + +[test_init.js] +[test_valid_file.js] +[test_invalid_file.js] +[test_invalid_json.js] +[test_missing_file.js] +[test_register.js] |