Chromium Code Reviews| 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 /** @protected */ | |
|
arv (Not doing code reviews)
2013/10/29 13:48:03
protected seems strange but ok
Dan Beam
2013/10/29 17:31:31
Ack.
| |
| 29 getList: function() { | |
| 30 return $('startupPagesList'); | |
| 31 }, | |
| 32 | |
| 33 /** | |
| 34 * Register a mock handler to ensure expectations are met and options pages | |
| 35 * behave correctly. | |
| 36 * @override | |
| 37 */ | |
| 38 preLoad: function() { | |
| 39 this.makeAndRegisterMockHandler(['addStartupPage', | |
| 40 'dragDropStartupPage']); | |
| 41 }, | |
| 42 | |
| 43 /** | |
| 44 * A fake list of startup pages to send to the overlay. | |
| 45 * @protected | |
| 46 */ | |
| 47 fakeStartupList: [{title: 'Yahoo!', | |
| 48 url: 'http://yahoo.com', | |
|
arv (Not doing code reviews)
2013/10/29 13:48:03
{
key: value,
...
}
If the object literal doe
Dan Beam
2013/10/29 17:31:31
Done.
| |
| 49 tooltip: 'Yahoo! homepage', | |
| 50 modelIndex: 0}, | |
| 51 {title: 'Facebook', | |
| 52 url: 'http://facebook.com', | |
| 53 tooltip: 'Facebook :: Sign In', | |
| 54 modelIndex: 1}], | |
| 55 }; | |
| 56 | |
| 57 (function() { | |
| 58 | |
| 59 /** | |
| 60 * A mock data transfer object for drag/drop events. | |
| 61 * @constructor | |
| 62 */ | |
| 63 function MockDataTransfer() {} | |
| 64 | |
| 65 /** | |
| 66 * Installs a lazily created MockDataTransfer on event#dataTransfer. | |
| 67 * @param {!Event} event An event to modify. | |
| 68 */ | |
| 69 MockDataTransfer.install = function(event) { | |
| 70 event.__defineGetter__('dataTransfer', function() { | |
| 71 event.dataTransfer_ = event.dataTransfer_ || new MockDataTransfer; | |
| 72 return event.dataTransfer_; | |
| 73 }); | |
| 74 }; | |
| 75 | |
| 76 MockDataTransfer.prototype = { | |
| 77 /** | |
| 78 * @type {!Object.<string, string>} | |
| 79 * @private | |
| 80 */ | |
| 81 data_: {}, | |
|
arv (Not doing code reviews)
2013/10/29 13:48:03
No storage on the prototype object please
Dan Beam
2013/10/29 17:31:31
Done.
| |
| 82 | |
| 83 /** | |
| 84 * The URL data in this mock drop event. | |
| 85 * @param {string} type The text of data being set. | |
| 86 * @param {string} val The data to set. | |
| 87 * @private | |
|
arv (Not doing code reviews)
2013/10/29 13:48:03
private does not seem correct. It is never called
Dan Beam
2013/10/29 17:31:31
spurious annotation removed
| |
| 88 */ | |
| 89 setData: function(type, val) { | |
| 90 this.data_[type] = String(val); | |
| 91 }, | |
| 92 | |
| 93 /** | |
| 94 * Gets data associated with this fake data transfer. | |
| 95 * @param {string} type The type of data to get. | |
| 96 * @returns {string} The requested type of data or '' if not set. | |
| 97 */ | |
| 98 getData: function(type) { | |
| 99 return this.data_[type] || ''; | |
| 100 }, | |
| 101 }; | |
| 102 | |
| 103 /** | |
| 104 * Creates a fake bubbling, cancelable mouse event with a mock data transfer | |
| 105 * installed. | |
| 106 * @param {string} type A type of mouse event (e.g. 'drop'). | |
| 107 * @return {!Event} A fake mouse event. | |
| 108 */ | |
| 109 function createMouseEvent(type) { | |
| 110 var event = document.createEvent('MouseEvent'); | |
|
arv (Not doing code reviews)
2013/10/29 13:48:03
Use
new MouseEvent(type, {bubbles: true, cancela
Dan Beam
2013/10/29 17:31:31
Done.
| |
| 111 event.initMouseEvent(type, true, true); | |
|
arv (Not doing code reviews)
2013/10/29 13:48:03
initMouseEvent has 15 (or some ridiculous number l
Dan Beam
2013/10/29 17:31:31
Ack.
| |
| 112 MockDataTransfer.install(event); | |
| 113 return event; | |
| 114 } | |
| 115 | |
| 116 TEST_F('StartupPageListWebUITest', 'testDropFromOutsideSource', function() { | |
| 117 /** @const */ var newPage = 'http://google.com'; | |
|
arv (Not doing code reviews)
2013/10/29 13:48:03
useless anotation
Dan Beam
2013/10/29 17:31:31
technically all of these are useless without a com
arv (Not doing code reviews)
2013/10/29 19:51:21
Generally I do not see the point in consts for loc
| |
| 118 | |
| 119 var mockDropEvent = createMouseEvent('drop'); | |
| 120 mockDropEvent.dataTransfer.setData('url', newPage); | |
| 121 | |
| 122 this.mockHandler.expects(once()).addStartupPage([newPage, 0]); | |
| 123 | |
| 124 this.getList().items[0].dispatchEvent(mockDropEvent); | |
| 125 | |
| 126 expectTrue(mockDropEvent.defaultPrevented); | |
| 127 }); | |
| 128 | |
| 129 TEST_F('StartupPageListWebUITest', 'testDropToReorder', function() { | |
| 130 // TODO(dbeam): mock4js doesn't handle complex arguments well. Fix this. | |
| 131 this.mockHandler.expects(once()).dragDropStartupPage([0, [1].join()]); | |
| 132 | |
| 133 this.getList().selectionModel.selectedIndex = 1; | |
| 134 expectEquals(1, this.getList().selectionModel.selectedIndexes.length); | |
| 135 | |
| 136 this.getList().items[0].dispatchEvent(createMouseEvent('drop')); | |
| 137 }); | |
| 138 | |
| 139 }()); | |
| OLD | NEW |