mobile/android/base/tests/testUITelemetry.js

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

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

mercurial