OLD | NEW |
| (Empty) |
1 // Copyright 2013 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 /** | |
6 * Fixture for startup pages WebUI tests. | |
7 * @extends {testing.Test} | |
8 * @constructor | |
9 */ | |
10 function StartupPageListWebUITest() {} | |
11 | |
12 StartupPageListWebUITest.prototype = { | |
13 __proto__: testing.Test.prototype, | |
14 | |
15 /** | |
16 * Browse to the options page & call our preLoad(). | |
17 * @override | |
18 */ | |
19 browsePreload: 'chrome://settings-frame/startup', | |
20 | |
21 /** @override */ | |
22 setUp: function() { | |
23 StartupOverlay.updateStartupPages(this.fakeStartupList); | |
24 // 1 item for entering data, 1+ from |this.fakeStartupList|. | |
25 assertGE(this.getList().items.length, 2); | |
26 }, | |
27 | |
28 /** | |
29 * Returns the list to be tested. | |
30 * @return {Element} The start-up pages list. | |
31 * @protected | |
32 */ | |
33 getList: function() { | |
34 return $('startupPagesList'); | |
35 }, | |
36 | |
37 /** | |
38 * Register a mock handler to ensure expectations are met and options pages | |
39 * behave correctly. | |
40 * @override | |
41 */ | |
42 preLoad: function() { | |
43 this.makeAndRegisterMockHandler(['addStartupPage', | |
44 'dragDropStartupPage']); | |
45 }, | |
46 | |
47 /** | |
48 * A fake list of startup pages to send to the overlay. | |
49 * @protected | |
50 */ | |
51 fakeStartupList: [ | |
52 { | |
53 title: 'Yahoo!', | |
54 url: 'http://yahoo.com', | |
55 tooltip: 'Yahoo! homepage', | |
56 modelIndex: 0 | |
57 }, | |
58 { | |
59 title: 'Facebook', | |
60 url: 'http://facebook.com', | |
61 tooltip: 'Facebook :: Sign In', | |
62 modelIndex: 1 | |
63 } | |
64 ], | |
65 }; | |
66 | |
67 (function() { | |
68 | |
69 /** | |
70 * A mock data transfer object for drag/drop events. | |
71 * @constructor | |
72 */ | |
73 function MockDataTransfer() { | |
74 /** | |
75 * The data this dataTransfer object knows about. | |
76 * @type {!Object<string>} | |
77 * @private | |
78 */ | |
79 this.data_ = {}; | |
80 } | |
81 | |
82 /** | |
83 * Installs a lazily created MockDataTransfer on event#dataTransfer. | |
84 * @param {!Event} event An event to modify. | |
85 */ | |
86 MockDataTransfer.install = function(event) { | |
87 event.__defineGetter__('dataTransfer', function() { | |
88 event.dataTransfer_ = event.dataTransfer_ || new MockDataTransfer; | |
89 return event.dataTransfer_; | |
90 }); | |
91 }; | |
92 | |
93 MockDataTransfer.prototype = { | |
94 /** | |
95 * The URL data in this mock drop event. | |
96 * @param {string} type The text of data being set. | |
97 * @param {*} val The data to set. Will be stringified. | |
98 */ | |
99 setData: function(type, val) { | |
100 this.data_[type] = String(val); | |
101 }, | |
102 | |
103 /** | |
104 * Gets data associated with this fake data transfer. | |
105 * @param {string} type The type of data to get. | |
106 * @return {string} The requested type of data or '' if not set. | |
107 */ | |
108 getData: function(type) { | |
109 return this.data_[type] || ''; | |
110 }, | |
111 }; | |
112 | |
113 /** | |
114 * Creates a fake bubbling, cancelable mouse event with a mock data transfer | |
115 * installed. | |
116 * @param {string} type A type of mouse event (e.g. 'drop'). | |
117 * @return {!Event} A fake mouse event. | |
118 */ | |
119 function createMouseEvent(type) { | |
120 var event = new MouseEvent(type, {bubbles: true, cancelable: true}); | |
121 MockDataTransfer.install(event); | |
122 return event; | |
123 } | |
124 | |
125 // Disabled due to: crbug.com/419370 | |
126 TEST_F('StartupPageListWebUITest', 'DISABLED_testDropFromOutsideSource', | |
127 function() { | |
128 /** @const */ var NEW_PAGE = 'http://google.com'; | |
129 | |
130 var mockDropEvent = createMouseEvent('drop'); | |
131 mockDropEvent.dataTransfer.setData('url', NEW_PAGE); | |
132 | |
133 this.mockHandler.expects(once()).addStartupPage([NEW_PAGE, 0]); | |
134 | |
135 this.getList().items[0].dispatchEvent(mockDropEvent); | |
136 | |
137 expectTrue(mockDropEvent.defaultPrevented); | |
138 }); | |
139 | |
140 // Disabled due to: crbug.com/419370 | |
141 TEST_F('StartupPageListWebUITest', 'DISABLED_testDropToReorder', function() { | |
142 // TODO(dbeam): mock4js doesn't handle complex arguments well. Fix this. | |
143 this.mockHandler.expects(once()).dragDropStartupPage([0, [1].join()]); | |
144 | |
145 this.getList().selectionModel.selectedIndex = 1; | |
146 expectEquals(1, this.getList().selectionModel.selectedIndexes.length); | |
147 | |
148 this.getList().items[0].dispatchEvent(createMouseEvent('drop')); | |
149 }); | |
150 | |
151 }()); | |
OLD | NEW |