summaryrefslogtreecommitdiffstats
path: root/testing/marionette/test/unit/test_modal.js
blob: 0a7c365af0ed07c84bb71253d9f4c692cfd9f686 (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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

const { modal } = ChromeUtils.import("chrome://marionette/content/modal.js");

const mockModalDialog = {
  opener: {
    ownerGlobal: "foo",
  },
};

const mockTabModalDialog = {
  ownerGlobal: "foo",
};

add_test(function test_addCallback() {
  let observer = new modal.DialogObserver();
  let cb1 = () => true;
  let cb2 = () => false;

  equal(observer.callbacks.size, 0);
  observer.add(cb1);
  equal(observer.callbacks.size, 1);
  observer.add(cb1);
  equal(observer.callbacks.size, 1);
  observer.add(cb2);
  equal(observer.callbacks.size, 2);

  run_next_test();
});

add_test(function test_removeCallback() {
  let observer = new modal.DialogObserver();
  let cb1 = () => true;
  let cb2 = () => false;

  equal(observer.callbacks.size, 0);
  observer.add(cb1);
  observer.add(cb2);

  equal(observer.callbacks.size, 2);
  observer.remove(cb1);
  equal(observer.callbacks.size, 1);
  observer.remove(cb1);
  equal(observer.callbacks.size, 1);
  observer.remove(cb2);
  equal(observer.callbacks.size, 0);

  run_next_test();
});

add_test(function test_registerDialogClosedEventHandler() {
  let observer = new modal.DialogObserver();
  let mockChromeWindow = {
    addEventListener(event, cb) {
      equal(
        event,
        "DOMModalDialogClosed",
        "registered event for closing modal"
      );
      equal(cb, observer, "set itself as handler");
      run_next_test();
    },
  };

  observer.observe(mockChromeWindow, "toplevel-window-ready");
});

add_test(function test_handleCallbackOpenModalDialog() {
  let observer = new modal.DialogObserver();

  observer.add((action, target, win) => {
    equal(action, modal.ACTION_OPENED, "'opened' action has been passed");
    equal(
      target.get(),
      mockModalDialog,
      "weak reference has been created for target"
    );
    equal(
      win,
      mockModalDialog.opener.ownerGlobal,
      "chrome window has been passed"
    );
    run_next_test();
  });
  observer.observe(mockModalDialog, "common-dialog-loaded");
});

add_test(function test_handleCallbackCloseModalDialog() {
  let observer = new modal.DialogObserver();

  observer.add((action, target, win) => {
    equal(action, modal.ACTION_CLOSED, "'closed' action has been passed");
    equal(
      target.get(),
      mockModalDialog,
      "weak reference has been created for target"
    );
    equal(
      win,
      mockModalDialog.opener.ownerGlobal,
      "chrome window has been passed"
    );
    run_next_test();
  });
  observer.handleEvent({
    type: "DOMModalDialogClosed",
    target: mockModalDialog,
  });
});

add_test(function test_handleCallbackOpenTabModalDialog() {
  let observer = new modal.DialogObserver();

  observer.add((action, target, win) => {
    equal(action, modal.ACTION_OPENED, "'opened' action has been passed");
    equal(
      target.get(),
      mockTabModalDialog,
      "weak reference has been created for target"
    );
    equal(win, mockTabModalDialog.ownerGlobal, "chrome window has been passed");
    run_next_test();
  });
  observer.observe(mockTabModalDialog, "tabmodal-dialog-loaded");
});

add_test(function test_handleCallbackCloseTabModalDialog() {
  let observer = new modal.DialogObserver();

  observer.add((action, target, win) => {
    equal(action, modal.ACTION_CLOSED, "'closed' action has been passed");
    equal(
      target.get(),
      mockTabModalDialog,
      "weak reference has been created for target"
    );
    equal(win, mockTabModalDialog.ownerGlobal, "chrome window has been passed");
    run_next_test();
  });
  observer.handleEvent({
    type: "DOMModalDialogClosed",
    target: mockTabModalDialog,
  });
});