summaryrefslogtreecommitdiffstats
path: root/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_console_group.js
blob: 94de78f1360f8e516f593d3c90f62766fe47b505 (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
/* -*- 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";

// Check console.group, console.groupCollapsed and console.groupEnd calls
// behave as expected.

const TEST_URI = "http://example.com/browser/devtools/client/webconsole/new-console-output/test/mochitest/test-console-group.html";
const { INDENT_WIDTH } = require("devtools/client/webconsole/new-console-output/components/message-indent");

add_task(function* () {
  let toolbox = yield openNewTabAndToolbox(TEST_URI, "webconsole");
  let hud = toolbox.getCurrentPanel().hud;

  const store = hud.ui.newConsoleOutput.getStore();
  // Adding loggin each time the store is modified in order to check
  // the store state in case of failure.
  store.subscribe(() => {
    const messages = store.getState().messages.messagesById.toJS()
      .map(message => {
        return {
          id: message.id,
          type: message.type,
          parameters: message.parameters,
          messageText: message.messageText
        };
      }
    );
    info("messages : " + JSON.stringify(messages));
  });

  yield ContentTask.spawn(gBrowser.selectedBrowser, null, function () {
    content.wrappedJSObject.doLog();
  });

  info("Test a group at root level");
  let node = yield waitFor(() => findMessage(hud, "group-1"));
  testClass(node, "startGroup");
  testIndent(node, 0);

  info("Test a message in a 1 level deep group");
  node = yield waitFor(() => findMessage(hud, "log-1"));
  testClass(node, "log");
  testIndent(node, 1);

  info("Test a group in a 1 level deep group");
  node = yield waitFor(() => findMessage(hud, "group-2"));
  testClass(node, "startGroup");
  testIndent(node, 1);

  info("Test a message in a 2 level deep group");
  node = yield waitFor(() => findMessage(hud, "log-2"));
  testClass(node, "log");
  testIndent(node, 2);

  info("Test a message in a 1 level deep group, after closing a 2 level deep group");
  node = yield waitFor(() => findMessage(hud, "log-3"));
  testClass(node, "log");
  testIndent(node, 1);

  info("Test a message at root level, after closing all the groups");
  node = yield waitFor(() => findMessage(hud, "log-4"));
  testClass(node, "log");
  testIndent(node, 0);

  info("Test a collapsed group at root level");
  node = yield waitFor(() => findMessage(hud, "group-3"));
  testClass(node, "startGroupCollapsed");
  testIndent(node, 0);

  info("Test a message at root level, after closing a collapsed group");
  node = yield waitFor(() => findMessage(hud, "log-6"));
  testClass(node, "log");
  testIndent(node, 0);

  let nodes = hud.ui.experimentalOutputNode.querySelectorAll(".message");
  is(nodes.length, 8, "expected number of messages are displayed");
});

function testClass(node, className) {
  ok(node.classList.contains(className), `message has the expected "${className}" class`);
}

function testIndent(node, indent) {
  indent = `${indent * INDENT_WIDTH}px`;
  is(node.querySelector(".indent").style.width, indent,
    "message has the expected level of indentation");
}