Chromium Code Reviews| Index: chrome/test/data/webui/settings/bluetooth_page_browsertest.js |
| diff --git a/chrome/test/data/webui/settings/bluetooth_page_browsertest.js b/chrome/test/data/webui/settings/bluetooth_page_browsertest.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bbc09afe4b3e0bc318d4c7eb29d723628ee23a15 |
| --- /dev/null |
| +++ b/chrome/test/data/webui/settings/bluetooth_page_browsertest.js |
| @@ -0,0 +1,145 @@ |
| +// Copyright 2015 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. |
| + |
| +/** @fileoverview Suite of tests for settings-bluetooth-page. */ |
| + |
| +GEN_INCLUDE(['settings_page_browsertest.js']); |
| + |
| +/** |
| + * @constructor |
| + * @extends {SettingsPageBrowserTest} |
| +*/ |
| +function SettingsBluetoothPageBrowserTest() { |
| +} |
| + |
| +SettingsBluetoothPageBrowserTest.prototype = { |
| + __proto__: SettingsPageBrowserTest.prototype, |
| + |
| + /** @override */ |
| + browsePreload: 'chrome://md-settings/advanced', |
| + |
| + /** @override */ |
| + extraLibraries: PolymerTest.getLibraries(ROOT_PATH).concat([ |
| + '../fake_chrome_event.js', |
| + 'fake_bluetooth.js', |
| + 'fake_bluetooth_private.js' |
| + ]), |
| + |
| + /** @type {Bluetooth} */ |
| + bluetoothApi_: undefined, |
| + |
| + /** @type {BluetoothPrivate} */ |
| + bluetoothPrivateApi_: undefined, |
| + |
| + /** @override */ |
| + preLoad: function() { |
| + SettingsPageBrowserTest.prototype.preLoad.call(this); |
| + settingsHidePagesByDefaultForTest = true; |
| + this.bluetoothApi_ = new settings.FakeBluetooth(); |
| + bluetoothApiForTest = this.bluetoothApi_; |
|
dpapad
2015/12/16 22:07:48
Where is bluetoothApiForTest defined, and where is
stevenjb
2015/12/17 00:13:34
It, along with bluetoothPrivateApiForTest are defi
dpapad
2015/12/17 02:06:58
Ok. I am guessing that those two objects are being
stevenjb
2015/12/17 17:28:12
Correct. Once a DOM element is stamped, we have no
|
| + this.bluetoothPrivateApi_ = |
| + new settings.FakeBluetoothPrivate(this.bluetoothApi_); |
| + bluetoothPrivateApiForTest = this.bluetoothPrivateApi_; |
| + } |
| +}; |
| + |
| +// Times out on debug builders and may time out on memory bots because |
| +// the Settings page can take several seconds to load in a Release build |
| +// and several times that in a Debug build. See https://crbug.com/558434. |
| +GEN('#if defined(MEMORY_SANITIZER) || !defined(NDEBUG)'); |
| +GEN('#define MAYBE_Bluetooth DISABLED_Bluetooth'); |
| +GEN('#else'); |
| +GEN('#define MAYBE_Bluetooth Bluetooth'); |
| +GEN('#endif'); |
| + |
| +// Runs bluetooth tests. |
| +TEST_F('SettingsBluetoothPageBrowserTest', 'MAYBE_Bluetooth', function() { |
| + // Assign |self| to |this| instead of binding since 'this' in suite() |
| + // and test() will be a Mocha 'Suite' or 'Test' instance. |
|
dschuyler
2015/12/16 22:15:01
I'm having trouble parsing this comment. I'm wond
stevenjb
2015/12/17 00:13:34
That would be:
// Assign |self| to |this| instead
dpapad
2015/12/17 01:12:54
FWIW (I know we talked about this before), I find
stevenjb
2015/12/17 01:28:57
If we ever need to reference the Mocha Suite or Te
dpapad
2015/12/17 02:06:58
It's fine to leave as is and address in a follow u
|
| + var self = this; |
| + |
| + var advanced = self.getPage('advanced'); |
| + assertTrue(!!advanced); |
| + advanced.set('pageVisibility.bluetooth', true); |
| + Polymer.dom.flush(); |
| + |
| + var fakeDevices_ = [ |
| + { |
| + address: '10:00:00:00:00:01', |
| + name: 'FakePairedDevice1', |
| + paired: true, |
| + }, |
| + { |
| + address: '10:00:00:00:00:02', |
| + name: 'FakePairedDevice2', |
| + paired: true, |
| + }, |
| + { |
| + address: '00:00:00:00:00:01', |
| + name: 'FakeUnPairedDevice1', |
| + paired: false, |
| + }, |
| + ]; |
| + |
| + suite('SettingsBluetoothPage', function() { |
| + test('enable', function() { |
| + assertFalse(self.bluetoothApi_.enabled); |
| + var bluetoothSection = self.getSection(advanced, 'bluetooth'); |
| + assertTrue(!!bluetoothSection); |
| + var bluetooth = |
| + bluetoothSection.querySelector('settings-bluetooth-page'); |
|
dpapad
2015/12/16 22:07:48
Nit: use $$() shorthand.
stevenjb
2015/12/17 00:13:34
Not actually the same thing. $$ queries the shadow
|
| + assertTrue(!!bluetooth); |
| + expectFalse(bluetooth.bluetoothEnabled); |
| + var enable = bluetooth.$.enableBluetooth; |
| + assertTrue(!!enable); |
| + expectFalse(enable.checked); |
| + // Test that tapping the enable checkbox changes its value and calls |
| + // bluetooth.setAdapterState with pwered = false. |
|
dschuyler
2015/12/16 22:15:01
is pwered a mistype of powered?
stevenjb
2015/12/17 00:13:34
Done.
|
| + MockInteractions.tap(enable); |
| + expectTrue(enable.checked); |
| + expectTrue(self.bluetoothApi_.enabled); |
| + // Confirm that 'bluetoothEnabled' remains set to true. |
| + Polymer.dom.flush(); |
| + expectTrue(bluetooth.bluetoothEnabled); |
| + // Set 'bluetoothEnabled' directly and confirm that the checkbox |
| + // toggles. |
| + bluetooth.bluetoothEnabled = false; |
| + Polymer.dom.flush(); |
| + expectFalse(enable.checked); |
| + }); |
| + |
| + test('device list', function() { |
| + var bluetoothSection = self.getSection(advanced, 'bluetooth'); |
| + var bluetooth = |
| + bluetoothSection.querySelector('settings-bluetooth-page'); |
| + assertTrue(!!bluetooth); |
| + var deviceList = bluetooth.$.deviceList; |
| + assertTrue(!!deviceList); |
| + // Set enabled, with default (empty) device list. |
| + self.bluetoothApi_.enabled = true; |
| + bluetooth.bluetoothEnabled = true; |
| + Polymer.dom.flush(); |
| + // Ensure that initially the 'device list empty' span is visible. |
| + expectFalse(deviceList.hidden); |
| + var noDevices = deviceList.querySelector('span'); |
| + assertTrue(!!noDevices); |
| + expectFalse(noDevices.hidden); |
| + // Set some devices (triggers onDeviceAdded events). 'empty' span should |
| + // be hidden. |
| + self.bluetoothApi_.setDevicesForTest(fakeDevices_); |
| + Polymer.dom.flush(); |
| + expectTrue(noDevices.hidden); |
| + // Confirm that there are three devices in the list. |
| + var devices = deviceList.querySelectorAll('iron-selector div'); |
| + assertEquals(3, devices.length); |
| + // Only paired devices should be visible. |
| + expectFalse(devices[0].hidden); |
| + expectFalse(devices[1].hidden); |
| + expectTrue(devices[2].hidden); |
| + }); |
| + }); |
| + |
| + // Run all registered tests. |
| + mocha.run(); |
| +}); |