Wed, 31 Dec 2014 07:22:50 +0100
Correct previous dual key logic pending first delivery installment.
1 // -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 const Cc = Components.classes;
7 const Ci = Components.interfaces;
8 const Cu = Components.utils;
10 Cu.import("resource://gre/modules/Services.jsm");
12 const TEST_PREFIX = "TEST-";
13 const TEST_REGEX = new RegExp("^" + TEST_PREFIX);
15 function do_check_array_eq(a1, a2) {
16 do_check_eq(a1.length, a2.length);
17 for (let i = 0; i < a1.length; ++i) {
18 do_check_eq(a1[i], a2[i]);
19 }
20 }
22 function getObserver() {
23 let bridge = Cc["@mozilla.org/android/bridge;1"]
24 .getService(Ci.nsIAndroidBridge);
25 let obsXPCOM = bridge.browserApp.getUITelemetryObserver();
26 do_check_true(!!obsXPCOM);
27 return obsXPCOM.wrappedJSObject;
28 }
30 /**
31 * The following event test will fail if telemetry isn't enabled. The Java-side
32 * part of this test should have turned it on; fail if it didn't work.
33 */
34 add_test(function test_enabled() {
35 let obs = getObserver();
36 do_check_true(!!obs);
37 do_check_true(obs.enabled);
38 run_next_test();
39 });
41 add_test(function test_telemetry_events() {
42 let obs = getObserver();
43 let measurements = obs.getUIMeasurements().filter(function(m) {
44 // Only want events and sessions that were generated by
45 // the Java-side of the test.
46 return TEST_REGEX.test(m.type == "event" ? m.action : m.name);
47 });
49 let expected = [
50 ["event", TEST_PREFIX + "enone", "method0", [], null],
51 ["event", TEST_PREFIX + "efoo", "method1", [TEST_PREFIX + "foo"], null],
52 ["event", TEST_PREFIX + "efoo", "method2", [TEST_PREFIX + "foo"], null],
53 ["event", TEST_PREFIX + "efoobar", "method3", [TEST_PREFIX + "foo", TEST_PREFIX + "bar"], "foobarextras"],
54 ["session", TEST_PREFIX + "foo", "reasonfoo"],
55 ["event", TEST_PREFIX + "ebar", "method4", [TEST_PREFIX + "bar"], "barextras"],
56 ["session", TEST_PREFIX + "bar", "reasonbar"],
57 ["event", TEST_PREFIX + "enone", "method5", [], null],
58 ];
60 do_check_eq(expected.length, measurements.length);
62 for (let i = 0; i < measurements.length; ++i) {
63 let m = measurements[i];
65 let type = m.type;
66 if (type == "event") {
67 let [type, action, method, sessions, extras] = expected[i];
68 do_check_eq(m.action, action);
69 do_check_eq(m.method, method);
70 // might receive real sessions in addition to the test ones -- remove the real ones
71 do_check_array_eq(m.sessions.filter(s => TEST_REGEX.test(s)), sessions);
72 do_check_eq(m.extras, extras);
73 continue;
74 }
76 if (type == "session") {
77 let [type, name, reason] = expected[i];
78 do_check_eq(m.name, name);
79 do_check_eq(m.reason, reason);
80 continue;
81 }
82 }
84 run_next_test();
85 });
87 run_next_test();