Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1275)

Side by Side Diff: remoting/webapp/unittests/host_table_entry_unittest.js

Issue 944183002: HostTableEntry refactor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reviewer's feedbacks with unit tests Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 (function() {
6
7 'use strict';
8
9 var hostTableEntry_ = null;
10 var onConnect_ = null;
11 var onRename_ = null;
12 var onDelete_ = null;
13 var host_ = null;
14
15 module('HostTableEntry', {
16 setup: function() {
17 onConnect_ = sinon.spy();
18 onRename_ = sinon.spy();
19 onDelete_ = sinon.spy();
20 hostTableEntry_ =
21 new remoting.HostTableEntry(10, onConnect_, onRename_, onDelete_);
22
23 // Setup the DOM dependencies on the confirm delete dialog.
24 var fixture = document.getElementById('qunit-fixture');
25 fixture.innerHTML = '<div id="confirm-host-delete-message"></div>' +
26 '<div id="confirm-host-delete"></div>' +
27 '<div id="cancel-host-delete"></div>';
28 hostTableEntry_.setHost({
29 hostName: 'LocalHost',
30 status: 'ONLINE'
31 });
32 fixture.appendChild(hostTableEntry_.element());
33 sinon.stub(chrome.i18n, 'getMessage', function(tag) {
34 return tag;
35 });
36 },
37 teardown: function() {
38 hostTableEntry_.dispose();
39 hostTableEntry_ = null;
40 chrome.i18n.getMessage.restore();
41 }
42 });
43
44
45 function sendKeydown(/** HTMLElement */ target, /** number */ keyCode) {
46 var event = document.createEvent('KeyboardEvent');
47 Object.defineProperty(
48 event, 'which', {get: function() { return keyCode; }});
49 event.initKeyboardEvent("keydown", true, true, document.defaultView,
50 false, false, false, false, keyCode, keyCode);
51 target.dispatchEvent(event);
52 }
53
54 function verifyVisible(
55 /** HTMLElement*/ element,
56 /** boolean */ isVisible,
57 /** string= */ opt_name) {
58 var expectedVisibility = (isVisible) ? 'visible' : 'hidden';
59 QUnit.equal(element.hidden, !isVisible,
60 'Element ' + opt_name + ' should be ' + expectedVisibility);
61 }
62
63 test('Clicking confirm on confirm dialog deletes the host', function() {
Jamie 2015/02/27 18:19:41 Should there also be a test for clicking Cancel?
kelvinp 2015/03/03 21:57:54 Done.
64 // Setup.
65 sinon.stub(remoting, 'setMode', function(mode) {
66 if (mode === remoting.AppMode.CONFIRM_HOST_DELETE) {
67 document.getElementById('confirm-host-delete').click();
68 }
69 });
70
71 // Invoke.
72 hostTableEntry_.element().querySelector('.delete-button').click();
73
74 // Verify.
75 sinon.assert.calledWith(onDelete_, hostTableEntry_);
76
77 // Cleanup.
78 remoting.setMode.restore();
79 });
80
81 test('Clicking rename button shows the input field.', function() {
82 // Invoke.
83 hostTableEntry_.element().querySelector('.rename-button').click();
84
85 // Verify.
86 var inputField =
87 hostTableEntry_.element().querySelector('.box-spacer input');
88
89 verifyVisible(inputField, true, 'inputField');
90 QUnit.equal(document.activeElement, inputField);
91 });
92
93 test('Host renaming is canceled when input field lost focus.', function() {
Jamie 2015/02/27 18:19:41 s/lost/loses/
kelvinp 2015/03/03 21:57:54 Done.
94 // Invoke.
95 hostTableEntry_.element().querySelector('.rename-button').click();
96
97 // Verify.
98 var inputField =
99 hostTableEntry_.element().querySelector('.box-spacer input');
100
101 verifyVisible(inputField, true, 'inputField');
102 QUnit.equal(document.activeElement, inputField);
103 inputField.blur();
104 verifyVisible(inputField, false, 'inputField');
105 });
106
107 test('Host renaming commits on ENTER.', function() {
Jamie 2015/02/27 18:19:41 Add a test for Escape as well?
kelvinp 2015/03/03 21:57:54 Done.
108 // Invoke.
109 var inputField =
110 hostTableEntry_.element().querySelector('.box-spacer input');
111 hostTableEntry_.element().querySelector('.rename-button').click();
112 inputField.value = 'Renamed Host';
113 sendKeydown(inputField, 13 /* ENTER */);
114
115 // Verify
116 verifyVisible(inputField, false, 'inputField');
117 sinon.assert.called(onRename_);
118 QUnit.equal(hostTableEntry_.host.hostName, 'Renamed Host');
119
120 // Renaming shouldn't trigger a connection request.
121 sinon.assert.notCalled(onConnect_);
122 });
123
124 test('HostTableEntry renders the host name correctly.', function() {
125 var label = hostTableEntry_.element().querySelector('.host-list-label');
126 QUnit.equal(label.innerText, 'LocalHost');
127 });
128
129 test('HostTableEntry renders an offline host correctly.', function() {
130 hostTableEntry_.setHost({
131 hostName: 'LocalHost',
132 status: 'OFFLINE',
133 hostOfflineReason: 'INITIALIZATION_FAILED'
134 });
135 var label = hostTableEntry_.element().querySelector('.host-list-label');
136 QUnit.equal(label.innerText, 'OFFLINE');
137 QUnit.equal(label.title, 'OFFLINE_REASON_INITIALIZATION_FAILED');
138 });
139
140 test('Clicking on an online host connects it', function() {
141 hostTableEntry_.element().querySelector('.host-list-label').click();
142 sinon.assert.calledWith(onConnect_,
143 encodeURIComponent(hostTableEntry_.host.hostId));
144 });
145
146 test('Clicking on an offline host should be a no-op', function() {
147 hostTableEntry_.setHost({
148 hostName: 'LocalHost',
149 status: 'OFFLINE'
150 });
151 hostTableEntry_.element().querySelector('.host-list-label').click();
152 sinon.assert.notCalled(onConnect_);
153 });
154
155 test('HostTableEntry handles host that is null', function() {
156 hostTableEntry_.setHost(null);
157 hostTableEntry_.element().querySelector('.host-list-label').click();
158 sinon.assert.notCalled(onConnect_);
159 });
160
Jamie 2015/02/27 18:19:41 Can you add a test for host-out-of-date as well? I
kelvinp 2015/03/03 21:57:54 Done. Unfortunately, the host out of date warning
161 })();
OLDNEW
« remoting/webapp/crd/js/local_host_section.js ('K') | « remoting/webapp/crd/js/local_host_section.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698