summaryrefslogtreecommitdiffstats
path: root/devtools/client/webconsole/test/browser_webconsole_bug_622303_persistent_filters.js
blob: f4b5dca96ff1db008eba979a810d55dfb9e127f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const prefs = {
  "net": [
    "network",
    "netwarn",
    "netxhr",
    "networkinfo"
  ],
  "css": [
    "csserror",
    "cssparser",
    "csslog"
  ],
  "js": [
    "exception",
    "jswarn",
    "jslog",
  ],
  "logging": [
    "error",
    "warn",
    "info",
    "log",
    "serviceworkers",
    "sharedworkers",
    "windowlessworkers"
  ]
};

add_task(function* () {
  // Set all prefs to true
  for (let category in prefs) {
    prefs[category].forEach(function (pref) {
      Services.prefs.setBoolPref("devtools.webconsole.filter." + pref, true);
    });
  }

  yield loadTab("about:blank");

  let hud = yield openConsole();

  let hud2 = yield onConsoleOpen(hud);
  let hud3 = yield onConsoleReopen1(hud2);
  yield onConsoleReopen2(hud3);

  // Clear prefs
  for (let category in prefs) {
    prefs[category].forEach(function (pref) {
      Services.prefs.clearUserPref("devtools.webconsole.filter." + pref);
    });
  }
});

function onConsoleOpen(hud) {
  let deferred = promise.defer();

  let hudBox = hud.ui.rootElement;

  // Check if the filters menuitems exists and are checked
  for (let category in prefs) {
    let button = hudBox.querySelector(".webconsole-filter-button[category=\""
                                      + category + "\"]");
    ok(isChecked(button), "main button for " + category +
       " category is checked");

    prefs[category].forEach(function (pref) {
      let menuitem = hudBox.querySelector("menuitem[prefKey=" + pref + "]");
      ok(isChecked(menuitem), "menuitem for " + pref + " is checked");
    });
  }

  // Set all prefs to false
  for (let category in prefs) {
    prefs[category].forEach(function (pref) {
      hud.setFilterState(pref, false);
    });
  }

  // Re-init the console
  closeConsole().then(() => {
    openConsole().then(deferred.resolve);
  });

  return deferred.promise;
}

function onConsoleReopen1(hud) {
  info("testing after reopening once");
  let deferred = promise.defer();

  let hudBox = hud.ui.rootElement;

  // Check if the filter button and menuitems are unchecked
  for (let category in prefs) {
    let button = hudBox.querySelector(".webconsole-filter-button[category=\""
                                           + category + "\"]");
    ok(isUnchecked(button), "main button for " + category +
       " category is not checked");

    prefs[category].forEach(function (pref) {
      let menuitem = hudBox.querySelector("menuitem[prefKey=" + pref + "]");
      ok(isUnchecked(menuitem), "menuitem for " + pref + " is not checked");
    });
  }

  // Set first pref in each category to true
  for (let category in prefs) {
    hud.setFilterState(prefs[category][0], true);
  }

  // Re-init the console
  closeConsole().then(() => {
    openConsole().then(deferred.resolve);
  });

  return deferred.promise;
}

function onConsoleReopen2(hud) {
  info("testing after reopening again");

  let hudBox = hud.ui.rootElement;

  // Check the main category button is checked and first menuitem is checked
  for (let category in prefs) {
    let button = hudBox.querySelector(".webconsole-filter-button[category=\"" +
                                      category + "\"]");
    ok(isChecked(button), category +
       " button is checked when first pref is true");

    let pref = prefs[category][0];
    let menuitem = hudBox.querySelector("menuitem[prefKey=" + pref + "]");
    ok(isChecked(menuitem), "first " + category + " menuitem is checked");
  }
}

function isChecked(aNode) {
  return aNode.getAttribute("checked") === "true";
}

function isUnchecked(aNode) {
  return aNode.getAttribute("checked") === "false";
}