Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / chrome / test / data / webui / media_router / issue_banner_tests.js
blob18295674663b0f52f2bd11aa3bc26064a80ff089
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 /** @fileoverview Suite of tests for issue-banner. */
6 cr.define('issue_banner', function() {
7   function registerTests() {
8     suite('IssueBanner', function() {
9       /**
10        * Issue Banner created before each test.
11        * @type {IssueBanner}
12        */
13       var banner;
15       /**
16        * Fake blocking issue with an optional action created before
17        * each test.
18        * @type {media_router.Issue}
19        */
20       var fakeBlockingIssueOne;
22       /**
23        * Fake blocking issue without an optional action created before
24        * each test.
25        * @type {media_router.Issue}
26        */
27       var fakeBlockingIssueTwo;
29       /**
30        * Fake non-blocking issue with an optional action created before
31        * each test.
32        * @type {media_router.Issue}
33        */
34       var fakeNonBlockingIssueOne;
36       /**
37        * Fake non-blocking issue without an optional action created before
38        * each test.
39        * @type {media_router.Issue}
40        */
41       var fakeNonBlockingIssueTwo;
43       // Checks whether the 'issue-action-click' event was fired with the
44       // expected data.
45       var checkDataFromEventFiring = function(issue, data, isDefault) {
46         assertEquals(issue.id, data.detail.id);
47         if (isDefault)
48           assertEquals(issue.defaultActionType, data.detail.actionType);
49         else
50           assertEquals(issue.secondaryActionType, data.detail.actionType);
51         assertEquals(issue.helpPageId, data.detail.helpPageId);
52       };
54       // Checks whether |expected| and the text in the |elementId| element
55       // are equal.
56       var checkElementText = function(expected, elementId) {
57         assertEquals(expected.trim(), banner.$[elementId].textContent.trim());
58       };
60       // Checks whether |issue| title are equal with the title text in the UI.
61       var checkIssueText = function(issue) {
62         if (issue) {
63           checkElementText(issue.title, 'title');
65           checkElementText(loadTimeData.getString(
66               banner.issueActionTypeToButtonTextResource_[
67                   issue.defaultActionType]), 'default-button');
69           if (issue.secondaryActionType) {
70             checkElementText(loadTimeData.getString(
71                 banner.issueActionTypeToButtonTextResource_[
72                     issue.secondaryActionType]), 'opt-button');
73           }
74         } else {
75           checkElementText('', 'title');
76           checkElementText('', 'default-button');
77           checkElementText('', 'opt-button');
78         }
79       };
81       // Checks whether parts of the UI is visible.
82       var checkButtonVisibility = function(hasOptAction) {
83         assertEquals(!hasOptAction, banner.$['buttons']
84             .querySelector('paper-button').hidden);
85       };
87       // Import issue_banner.html before running suite.
88       suiteSetup(function() {
89         return PolymerTest.importHtml(
90             'chrome://media-router/elements/issue_banner/' +
91             'issue_banner.html');
92       });
94       // Initialize an issue-banner before each test.
95       setup(function(done) {
96         PolymerTest.clearBody();
97         banner = document.createElement('issue-banner');
98         document.body.appendChild(banner);
100         // Initialize issues.
101         fakeBlockingIssueOne = new media_router.Issue(
102             'issue id 1', 'Issue Title 1', 'Issue Message 1', 0, 1,
103             'route id 1', true, 1234);
104         fakeBlockingIssueTwo = new media_router.Issue(
105             'issue id 2', 'Issue Title 2', 'Issue Message 2', 0, null,
106             'route id 2', true, 1234);
107         fakeNonBlockingIssueOne = new media_router.Issue(
108             'issue id 3', 'Issue Title 3', 'Issue Message 3', 0, 1,
109             'route id 3', false, 1234);
110         fakeNonBlockingIssueTwo = new media_router.Issue(
111             'issue id 4', 'Issue Title 4', 'Issue Message 4', 0, null,
112             'route id 4', false, 1234);
114         // Allow for the issue banner to be created and attached.
115         setTimeout(done);
116       });
118       // Tests for 'issue-action-click' event firing when a blocking issue
119       // default action is clicked.
120       test('blocking issue default action click', function(done) {
121         banner.issue = fakeBlockingIssueOne;
122         banner.addEventListener('issue-action-click', function(data) {
123           checkDataFromEventFiring(fakeBlockingIssueOne,
124               data, true);
125           done();
126         });
127         MockInteractions.tap(banner.$['default-button']);
128       });
130       // Tests for 'issue-action-click' event firing when a blocking issue
131       // optional action is clicked.
132       test('blocking issue optional action click', function(done) {
133         banner.issue = fakeBlockingIssueOne;
134         banner.addEventListener('issue-action-click', function(data) {
135           checkDataFromEventFiring(fakeBlockingIssueOne,
136               data, false);
137           done();
138         });
139         MockInteractions.tap(banner.$['opt-button']);
140       });
142       // Tests for 'issue-action-click' event firing when a non-blocking issue
143       // default action is clicked.
144       test('non-blocking issue default action click', function(done) {
145         banner.issue = fakeNonBlockingIssueOne;
146         banner.addEventListener('issue-action-click', function(data) {
147           checkDataFromEventFiring(fakeNonBlockingIssueOne,
148               data, true);
149           done();
150         });
151         MockInteractions.tap(banner.$['default-button']);
152       });
154       // Tests for 'issue-action-click' event firing when a non-blocking issue
155       // optional action is clicked.
156       test('non-blocking issue optional action click', function(done) {
157         banner.issue = fakeNonBlockingIssueOne;
158         banner.addEventListener('issue-action-click', function(data) {
159           checkDataFromEventFiring(fakeNonBlockingIssueOne,
160               data, false);
161           done();
162         });
163         MockInteractions.tap(banner.$['opt-button']);
164       });
166       // Tests the issue text. While the UI will show only the blocking or
167       // non-blocking interface, the issue's info will be set if specified.
168       test('issue text', function() {
169         // |issue| is null. Title text should be empty.
170         assertEquals(null, banner.issue);
171         checkIssueText(banner.issue);
173         // Set |issue| to be a blocking issue. Title text should be updated.
174         banner.issue = fakeBlockingIssueOne;
175         checkIssueText(banner.issue);
177         // Set |issue| to be a non-blocking issue. Title text should be
178         // updated.
179         banner.issue = fakeNonBlockingIssueOne;
180         checkIssueText(banner.issue);
181       });
183       // Tests whether parts of the issue-banner is hidden based on the
184       // current state.
185       test('hidden versus visible components', function() {
186         // The blocking UI should be shown along with an optional action.
187         banner.issue = fakeBlockingIssueOne;
188         checkButtonVisibility(fakeBlockingIssueOne.secondaryActionType);
190         // The blocking UI should be shown without an optional action.
191         banner.issue = fakeBlockingIssueTwo;
192         checkButtonVisibility(fakeBlockingIssueTwo.secondaryActionType);
194         // The non-blocking UI should be shown along with an optional action.
195         banner.issue = fakeNonBlockingIssueOne;
196         checkButtonVisibility(fakeNonBlockingIssueOne.secondaryActionType);
198         // The non-blocking UI should be shown without an optional action.
199         banner.issue = fakeNonBlockingIssueTwo;
200         checkButtonVisibility(fakeNonBlockingIssueTwo.secondaryActionType);
201       });
202     });
203   }
205   return {
206     registerTests: registerTests,
207   };