|
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/. */ |
|
5 |
|
6 const Cc = Components.classes; |
|
7 const Ci = Components.interfaces; |
|
8 const Cu = Components.utils; |
|
9 |
|
10 Cu.import("resource://gre/modules/Services.jsm"); |
|
11 |
|
12 const TEST_PREFIX = "TEST-"; |
|
13 const TEST_REGEX = new RegExp("^" + TEST_PREFIX); |
|
14 |
|
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 } |
|
21 |
|
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 } |
|
29 |
|
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 }); |
|
40 |
|
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 }); |
|
48 |
|
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 ]; |
|
59 |
|
60 do_check_eq(expected.length, measurements.length); |
|
61 |
|
62 for (let i = 0; i < measurements.length; ++i) { |
|
63 let m = measurements[i]; |
|
64 |
|
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 } |
|
75 |
|
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 } |
|
83 |
|
84 run_next_test(); |
|
85 }); |
|
86 |
|
87 run_next_test(); |