1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/mobile/android/base/tests/testUITelemetry.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,87 @@ 1.4 +// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*- 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this file, 1.7 + * You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +const Cc = Components.classes; 1.10 +const Ci = Components.interfaces; 1.11 +const Cu = Components.utils; 1.12 + 1.13 +Cu.import("resource://gre/modules/Services.jsm"); 1.14 + 1.15 +const TEST_PREFIX = "TEST-"; 1.16 +const TEST_REGEX = new RegExp("^" + TEST_PREFIX); 1.17 + 1.18 +function do_check_array_eq(a1, a2) { 1.19 + do_check_eq(a1.length, a2.length); 1.20 + for (let i = 0; i < a1.length; ++i) { 1.21 + do_check_eq(a1[i], a2[i]); 1.22 + } 1.23 +} 1.24 + 1.25 +function getObserver() { 1.26 + let bridge = Cc["@mozilla.org/android/bridge;1"] 1.27 + .getService(Ci.nsIAndroidBridge); 1.28 + let obsXPCOM = bridge.browserApp.getUITelemetryObserver(); 1.29 + do_check_true(!!obsXPCOM); 1.30 + return obsXPCOM.wrappedJSObject; 1.31 +} 1.32 + 1.33 +/** 1.34 + * The following event test will fail if telemetry isn't enabled. The Java-side 1.35 + * part of this test should have turned it on; fail if it didn't work. 1.36 + */ 1.37 +add_test(function test_enabled() { 1.38 + let obs = getObserver(); 1.39 + do_check_true(!!obs); 1.40 + do_check_true(obs.enabled); 1.41 + run_next_test(); 1.42 +}); 1.43 + 1.44 +add_test(function test_telemetry_events() { 1.45 + let obs = getObserver(); 1.46 + let measurements = obs.getUIMeasurements().filter(function(m) { 1.47 + // Only want events and sessions that were generated by 1.48 + // the Java-side of the test. 1.49 + return TEST_REGEX.test(m.type == "event" ? m.action : m.name); 1.50 + }); 1.51 + 1.52 + let expected = [ 1.53 + ["event", TEST_PREFIX + "enone", "method0", [], null], 1.54 + ["event", TEST_PREFIX + "efoo", "method1", [TEST_PREFIX + "foo"], null], 1.55 + ["event", TEST_PREFIX + "efoo", "method2", [TEST_PREFIX + "foo"], null], 1.56 + ["event", TEST_PREFIX + "efoobar", "method3", [TEST_PREFIX + "foo", TEST_PREFIX + "bar"], "foobarextras"], 1.57 + ["session", TEST_PREFIX + "foo", "reasonfoo"], 1.58 + ["event", TEST_PREFIX + "ebar", "method4", [TEST_PREFIX + "bar"], "barextras"], 1.59 + ["session", TEST_PREFIX + "bar", "reasonbar"], 1.60 + ["event", TEST_PREFIX + "enone", "method5", [], null], 1.61 + ]; 1.62 + 1.63 + do_check_eq(expected.length, measurements.length); 1.64 + 1.65 + for (let i = 0; i < measurements.length; ++i) { 1.66 + let m = measurements[i]; 1.67 + 1.68 + let type = m.type; 1.69 + if (type == "event") { 1.70 + let [type, action, method, sessions, extras] = expected[i]; 1.71 + do_check_eq(m.action, action); 1.72 + do_check_eq(m.method, method); 1.73 + // might receive real sessions in addition to the test ones -- remove the real ones 1.74 + do_check_array_eq(m.sessions.filter(s => TEST_REGEX.test(s)), sessions); 1.75 + do_check_eq(m.extras, extras); 1.76 + continue; 1.77 + } 1.78 + 1.79 + if (type == "session") { 1.80 + let [type, name, reason] = expected[i]; 1.81 + do_check_eq(m.name, name); 1.82 + do_check_eq(m.reason, reason); 1.83 + continue; 1.84 + } 1.85 + } 1.86 + 1.87 + run_next_test(); 1.88 +}); 1.89 + 1.90 +run_next_test();