Bug 888373 - Tests for startup/shutdown crash detection API. r=yoric, r=gps

This commit is contained in:
Michael Brennan 2013-08-20 22:46:38 +02:00
parent f65bd5e29e
commit 7206a7caa7
8 changed files with 137 additions and 0 deletions

View File

@ -4,6 +4,8 @@
# 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',
]

View File

@ -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();
}

View File

@ -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);
}
});

View File

@ -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);
}
});

View File

@ -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);
});

View File

@ -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);
}
});

View File

@ -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);
});

View File

@ -0,0 +1,9 @@
[DEFAULT]
head = head.js
tail =
[test_init.js]
[test_valid_file.js]
[test_invalid_file.js]
[test_missing_file.js]
[test_register.js]