summaryrefslogtreecommitdiffstats
path: root/toolkit/content/tests/chrome/test_bug457632.xhtml
blob: 7f94eaef09a0ed2dbc81d7d5b513786877a4d8f2 (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
150
151
152
153
154
155
156
157
158
159
160
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
<!--
  XUL Widget Test for bug 457632
  -->
<window title="Bug 457632" width="500" height="600"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>  

  <vbox id="nb"/>

  <!-- test results are displayed in the html:body -->
  <body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"
        onload="test()"/>

  <!-- test code goes here -->
<script type="application/javascript">
<![CDATA[
var gNotificationBox;

function completeAnimation(nextTest) {
  if (!gNotificationBox._animating) {
    nextTest();
    return;
  }

  setTimeout(completeAnimation, 50, nextTest);
}

function test() {
  SimpleTest.waitForExplicitFinish();
  gNotificationBox = new MozElements.NotificationBox(e => {
    document.getElementById("nb").appendChild(e);
  });

  is(gNotificationBox.allNotifications.length, 0, "There should be no initial notifications");
  gNotificationBox.appendNotification("notification1",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });
  is(gNotificationBox.allNotifications.length, 1, "Notification exists while animating in");
  let notification = gNotificationBox.getNotificationWithValue("notification1");
  ok(notification, "Notification should exist while animating in");

  // Wait for the notificaton to finish displaying
  completeAnimation(test1);
}

// Tests that a notification that is fully animated in gets removed immediately
function test1() {
  let notification = gNotificationBox.getNotificationWithValue("notification1");
  gNotificationBox.removeNotification(notification);
  notification = gNotificationBox.getNotificationWithValue("notification1");
  ok(!notification, "Test 1 showed notification was still present");
  ok(!gNotificationBox.currentNotification, "Test 1 said there was still a current notification");
  is(gNotificationBox.allNotifications.length, 0, "Test 1 should show no notifications present");

  // Wait for the notificaton to finish hiding
  completeAnimation(test2);
}

// Tests that a notification that is animating in gets removed immediately
function test2() {
  let notification = gNotificationBox.appendNotification("notification2",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });
  gNotificationBox.removeNotification(notification);
  notification = gNotificationBox.getNotificationWithValue("notification2");
  ok(!notification, "Test 2 showed notification was still present");
  ok(!gNotificationBox.currentNotification, "Test 2 said there was still a current notification");
  is(gNotificationBox.allNotifications.length, 0, "Test 2 should show no notifications present");

  // Get rid of the hiding notifications
  gNotificationBox.removeAllNotifications(true);
  test3();
}

// Tests that a background notification goes away immediately
function test3() {
  let notification = gNotificationBox.appendNotification("notification3",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });
  let notification2 = gNotificationBox.appendNotification("notification4",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });
  is(gNotificationBox.allNotifications.length, 2, "Test 3 should show 2 notifications present");
  gNotificationBox.removeNotification(notification);
  is(gNotificationBox.allNotifications.length, 1, "Test 3 should show 1 notifications present");
  notification = gNotificationBox.getNotificationWithValue("notification3");
  ok(!notification, "Test 3 showed notification was still present");
  gNotificationBox.removeNotification(notification2);
  is(gNotificationBox.allNotifications.length, 0, "Test 3 should show 0 notifications present");
  notification2 = gNotificationBox.getNotificationWithValue("notification4");
  ok(!notification2, "Test 3 showed notification2 was still present");
  ok(!gNotificationBox.currentNotification, "Test 3 said there was still a current notification");

  // Get rid of the hiding notifications
  gNotificationBox.removeAllNotifications(true);
  test4();
}

// Tests that a foreground notification hiding a background one goes away
function test4() {
  let notification = gNotificationBox.appendNotification("notification5",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });
  let notification2 = gNotificationBox.appendNotification("notification6",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });
  gNotificationBox.removeNotification(notification2);
  notification2 = gNotificationBox.getNotificationWithValue("notification6");
  ok(!notification2, "Test 4 showed notification2 was still present");
  is(gNotificationBox.currentNotification, notification, "Test 4 said the current notification was wrong");
  is(gNotificationBox.allNotifications.length, 1, "Test 4 should show 1 notifications present");
  gNotificationBox.removeNotification(notification);
  notification = gNotificationBox.getNotificationWithValue("notification5");
  ok(!notification, "Test 4 showed notification was still present");
  ok(!gNotificationBox.currentNotification, "Test 4 said there was still a current notification");
  is(gNotificationBox.allNotifications.length, 0, "Test 4 should show 0 notifications present");

  // Get rid of the hiding notifications
  gNotificationBox.removeAllNotifications(true);
  test5();
}

// Tests that removeAllNotifications gets rid of everything
function test5() {
  let notification = gNotificationBox.appendNotification("notification7",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });
  let notification2 = gNotificationBox.appendNotification("notification8",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });
  gNotificationBox.removeAllNotifications();
  notification = gNotificationBox.getNotificationWithValue("notification7");
  notification2 = gNotificationBox.getNotificationWithValue("notification8");
  ok(!notification, "Test 5 showed notification was still present");
  ok(!notification2, "Test 5 showed notification2 was still present");
  ok(!gNotificationBox.currentNotification, "Test 5 said there was still a current notification");
  is(gNotificationBox.allNotifications.length, 0, "Test 5 should show 0 notifications present");

  gNotificationBox.appendNotification("notification9",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });

  // Wait for the notificaton to finish displaying
  completeAnimation(test6);
}

// Tests whether removing an already removed notification doesn't break things
function test6() {
  let notification = gNotificationBox.getNotificationWithValue("notification9");
  ok(notification, "Test 6 should have an initial notification");
  gNotificationBox.removeNotification(notification);
  gNotificationBox.removeNotification(notification);

  ok(!gNotificationBox.currentNotification, "Test 6 shouldn't be any current notification");
  is(gNotificationBox.allNotifications.length, 0, "Test 6 allNotifications.length should be 0");
  notification = gNotificationBox.appendNotification("notification10",
    { label: "Test notification", priority: gNotificationBox.PRIORITY_INFO_LOW });
  is(notification, gNotificationBox.currentNotification, "Test 6 should have made the current notification");
  gNotificationBox.removeNotification(notification);

  SimpleTest.finish();
}
]]>
</script>

</window>