author | Michael Brennan <brennan.brisad@gmail.com> |
Tue, 20 Aug 2013 22:46:38 +0200 | |
changeset 161354 | 0ecaf7b5bc926a7c12e84e37187f83fe766ba151 |
parent 161353 | 2bb13ecf0297b7a46312765337f9d220b3ebe21a |
child 161355 | 9f97b68c6bdf00bfcfd246be4bd8d5d9985da36a |
push id | 25878 |
push user | kwierso@gmail.com |
push date | Fri, 20 Dec 2013 03:09:21 +0000 |
treeherder | mozilla-central@599100c4ebfe [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | yoric, gps |
bugs | 888373 |
milestone | 29.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/toolkit/components/crashmonitor/moz.build +++ b/toolkit/components/crashmonitor/moz.build @@ -1,14 +1,16 @@ # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- # vim: set filetype=python: # 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/. +XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini'] + EXTRA_JS_MODULES = [ 'CrashMonitor.jsm', ] EXTRA_COMPONENTS += [ 'crashmonitor.manifest', ]
new file mode 100644 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/head.js @@ -0,0 +1,22 @@ +/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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"); + +let 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(); +}
new file mode 100644 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_init.js @@ -0,0 +1,17 @@ +/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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); + } +});
new file mode 100644 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_invalid_file.js @@ -0,0 +1,30 @@ +/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 throw an exception + try { + let status = yield CrashMonitor.init(); + do_check_true(false); + } catch (ex) { + do_check_true(true); + } + + // and |previousCheckpoints| will be rejected + try { + let checkpoints = yield CrashMonitor.previousCheckpoints; + do_check_true(false); + } catch (ex) { + do_check_true(true); + } +});
new file mode 100644 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_missing_file.js @@ -0,0 +1,13 @@ +/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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); +});
new file mode 100644 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_register.js @@ -0,0 +1,24 @@ +/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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); + } +});
new file mode 100644 --- /dev/null +++ b/toolkit/components/crashmonitor/test/unit/test_valid_file.js @@ -0,0 +1,20 @@ +/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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); +});