| Index: chrome/browser/ui/webui/options/startup_page_list_browsertest.js
|
| diff --git a/chrome/browser/ui/webui/options/startup_page_list_browsertest.js b/chrome/browser/ui/webui/options/startup_page_list_browsertest.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0cf7b7c0798af1c79d6a4b6da49eb1b25f64c4ef
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/webui/options/startup_page_list_browsertest.js
|
| @@ -0,0 +1,148 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +/**
|
| + * Fixture for startup pages WebUI tests.
|
| + * @extends {testing.Test}
|
| + * @constructor
|
| + */
|
| +function StartupPageListWebUITest() {}
|
| +
|
| +StartupPageListWebUITest.prototype = {
|
| + __proto__: testing.Test.prototype,
|
| +
|
| + /**
|
| + * Browse to the options page & call our preLoad().
|
| + * @override
|
| + */
|
| + browsePreload: 'chrome://settings-frame/startup',
|
| +
|
| + /** @override */
|
| + setUp: function() {
|
| + StartupOverlay.updateStartupPages(this.fakeStartupList);
|
| + // 1 item for entering data, 1+ from |this.fakeStartupList|.
|
| + assertGE(this.getList().items.length, 2);
|
| + },
|
| +
|
| + /**
|
| + * Returns the list to be tested.
|
| + * @return {Element}
|
| + * @protected
|
| + */
|
| + getList: function() {
|
| + return $('startupPagesList');
|
| + },
|
| +
|
| + /**
|
| + * Register a mock handler to ensure expectations are met and options pages
|
| + * behave correctly.
|
| + * @override
|
| + */
|
| + preLoad: function() {
|
| + this.makeAndRegisterMockHandler(['addStartupPage',
|
| + 'dragDropStartupPage']);
|
| + },
|
| +
|
| + /**
|
| + * A fake list of startup pages to send to the overlay.
|
| + * @protected
|
| + */
|
| + fakeStartupList: [
|
| + {
|
| + title: 'Yahoo!',
|
| + url: 'http://yahoo.com',
|
| + tooltip: 'Yahoo! homepage',
|
| + modelIndex: 0
|
| + },
|
| + {
|
| + title: 'Facebook',
|
| + url: 'http://facebook.com',
|
| + tooltip: 'Facebook :: Sign In',
|
| + modelIndex: 1
|
| + }
|
| + ],
|
| +};
|
| +
|
| +(function() {
|
| +
|
| +/**
|
| + * A mock data transfer object for drag/drop events.
|
| + * @constructor
|
| + */
|
| +function MockDataTransfer() {
|
| + /**
|
| + * The data this dataTransfer object knows about.
|
| + * @type {!Object.<string, string>}
|
| + * @private
|
| + */
|
| + this.data_ = {};
|
| +}
|
| +
|
| +/**
|
| + * Installs a lazily created MockDataTransfer on event#dataTransfer.
|
| + * @param {!Event} event An event to modify.
|
| + */
|
| +MockDataTransfer.install = function(event) {
|
| + event.__defineGetter__('dataTransfer', function() {
|
| + event.dataTransfer_ = event.dataTransfer_ || new MockDataTransfer;
|
| + return event.dataTransfer_;
|
| + });
|
| +};
|
| +
|
| +MockDataTransfer.prototype = {
|
| + /**
|
| + * The URL data in this mock drop event.
|
| + * @param {string} type The text of data being set.
|
| + * @param {*} val The data to set. Will be stringified.
|
| + */
|
| + setData: function(type, val) {
|
| + this.data_[type] = String(val);
|
| + },
|
| +
|
| + /**
|
| + * Gets data associated with this fake data transfer.
|
| + * @param {string} type The type of data to get.
|
| + * @returns {string} The requested type of data or '' if not set.
|
| + */
|
| + getData: function(type) {
|
| + return this.data_[type] || '';
|
| + },
|
| +};
|
| +
|
| +/**
|
| + * Creates a fake bubbling, cancelable mouse event with a mock data transfer
|
| + * installed.
|
| + * @param {string} type A type of mouse event (e.g. 'drop').
|
| + * @return {!Event} A fake mouse event.
|
| + */
|
| +function createMouseEvent(type) {
|
| + var event = new MouseEvent(type, {bubbles: true, cancelable: true});
|
| + MockDataTransfer.install(event);
|
| + return event;
|
| +}
|
| +
|
| +TEST_F('StartupPageListWebUITest', 'testDropFromOutsideSource', function() {
|
| + /** @const */ var NEW_PAGE = 'http://google.com';
|
| +
|
| + var mockDropEvent = createMouseEvent('drop');
|
| + mockDropEvent.dataTransfer.setData('url', NEW_PAGE);
|
| +
|
| + this.mockHandler.expects(once()).addStartupPage([NEW_PAGE, 0]);
|
| +
|
| + this.getList().items[0].dispatchEvent(mockDropEvent);
|
| +
|
| + expectTrue(mockDropEvent.defaultPrevented);
|
| +});
|
| +
|
| +TEST_F('StartupPageListWebUITest', 'testDropToReorder', function() {
|
| + // TODO(dbeam): mock4js doesn't handle complex arguments well. Fix this.
|
| + this.mockHandler.expects(once()).dragDropStartupPage([0, [1].join()]);
|
| +
|
| + this.getList().selectionModel.selectedIndex = 1;
|
| + expectEquals(1, this.getList().selectionModel.selectedIndexes.length);
|
| +
|
| + this.getList().items[0].dispatchEvent(createMouseEvent('drop'));
|
| +});
|
| +
|
| +}());
|
|
|