| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 cr.define('device_page_tests', function() { | 5 cr.define('device_page_tests', function() { |
| 6 /** @enum {string} */ | 6 /** @enum {string} */ |
| 7 var TestNames = { | 7 var TestNames = { |
| 8 DevicePage: 'device page', | 8 DevicePage: 'device page', |
| 9 Display: 'display', | 9 Display: 'display', |
| 10 Keyboard: 'keyboard', | 10 Keyboard: 'keyboard', |
| 11 Pointers: 'pointers', | 11 Pointers: 'pointers', |
| 12 Power: 'power', |
| 12 }; | 13 }; |
| 13 | 14 |
| 14 /** | 15 /** |
| 15 * @constructor | 16 * @constructor |
| 16 * @implements {settings.DevicePageBrowserProxy} | 17 * @implements {settings.DevicePageBrowserProxy} |
| 17 */ | 18 */ |
| 18 function TestDevicePageBrowserProxy() { | 19 function TestDevicePageBrowserProxy() { |
| 19 this.keyboardShortcutsOverlayShown_ = 0; | 20 this.keyboardShortcutsOverlayShown_ = 0; |
| 21 this.updatePowerStatusCalled_ = 0; |
| 20 } | 22 } |
| 21 | 23 |
| 22 TestDevicePageBrowserProxy.prototype = { | 24 TestDevicePageBrowserProxy.prototype = { |
| 23 /** override */ | 25 /** override */ |
| 24 initializePointers: function() { | 26 initializePointers: function() { |
| 25 // Enable mouse and touchpad. | 27 // Enable mouse and touchpad. |
| 26 cr.webUIListenerCallback('has-mouse-changed', true); | 28 cr.webUIListenerCallback('has-mouse-changed', true); |
| 27 cr.webUIListenerCallback('has-touchpad-changed', true); | 29 cr.webUIListenerCallback('has-touchpad-changed', true); |
| 28 }, | 30 }, |
| 29 | 31 |
| 30 /** @override */ | 32 /** @override */ |
| 31 handleLinkEvent: function(e) { | 33 handleLinkEvent: function(e) { |
| 32 settings.DevicePageBrowserProxyImpl.prototype.handleLinkEvent.call( | 34 settings.DevicePageBrowserProxyImpl.prototype.handleLinkEvent.call( |
| 33 this, e); | 35 this, e); |
| 34 // Prevent opening the link, which can block the test. | 36 // Prevent opening the link, which can block the test. |
| 35 e.preventDefault(); | 37 e.preventDefault(); |
| 36 }, | 38 }, |
| 37 | 39 |
| 38 /** override */ | 40 /** override */ |
| 39 initializeKeyboard: function() {}, | 41 initializeKeyboard: function() {}, |
| 40 | 42 |
| 41 /** override */ | 43 /** override */ |
| 42 showKeyboardShortcutsOverlay: function() { | 44 showKeyboardShortcutsOverlay: function() { |
| 43 this.keyboardShortcutsOverlayShown_++; | 45 this.keyboardShortcutsOverlayShown_++; |
| 44 }, | 46 }, |
| 47 |
| 48 /** @override */ |
| 49 updatePowerStatus: function() { |
| 50 this.updatePowerStatusCalled_++; |
| 51 }, |
| 52 |
| 53 /** @override */ |
| 54 setPowerSource: function(powerSourceId) { |
| 55 this.powerSourceId_ = powerSourceId; |
| 56 }, |
| 45 }; | 57 }; |
| 46 | 58 |
| 47 function getFakePrefs() { | 59 function getFakePrefs() { |
| 48 return { | 60 return { |
| 49 settings: { | 61 settings: { |
| 50 touchpad: { | 62 touchpad: { |
| 51 enable_tap_to_click: { | 63 enable_tap_to_click: { |
| 52 key: 'settings.touchpad.enable_tap_to_click', | 64 key: 'settings.touchpad.enable_tap_to_click', |
| 53 type: chrome.settingsPrivate.PrefType.BOOLEAN, | 65 type: chrome.settingsPrivate.PrefType.BOOLEAN, |
| 54 value: true, | 66 value: true, |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 // Confirm that there is now only one display and that it is primary | 530 // Confirm that there is now only one display and that it is primary |
| 519 // and mirroring is enabled. | 531 // and mirroring is enabled. |
| 520 expectEquals(1, displayPage.displays.length); | 532 expectEquals(1, displayPage.displays.length); |
| 521 expectEquals( | 533 expectEquals( |
| 522 displayPage.displays[0].id, displayPage.selectedDisplay.id); | 534 displayPage.displays[0].id, displayPage.selectedDisplay.id); |
| 523 expectTrue(displayPage.displays[0].isPrimary); | 535 expectTrue(displayPage.displays[0].isPrimary); |
| 524 expectTrue(displayPage.showMirror_(displayPage.displays)); | 536 expectTrue(displayPage.showMirror_(displayPage.displays)); |
| 525 expectTrue(displayPage.isMirrored_(displayPage.displays)); | 537 expectTrue(displayPage.isMirrored_(displayPage.displays)); |
| 526 }); | 538 }); |
| 527 }); | 539 }); |
| 540 |
| 541 suite(assert(TestNames.Power), function() { |
| 542 /** |
| 543 * Sets power sources using a deep copy of |sources|. |
| 544 * @param {Array<settings.PowerSource>} sources |
| 545 * @param {string} powerSourceId |
| 546 * @param {bool} isLowPowerCharger |
| 547 */ |
| 548 function setPowerSources(sources, powerSourceId, isLowPowerCharger) { |
| 549 var sourcesCopy = sources.map(function(source) { |
| 550 return Object.assign({}, source); |
| 551 }); |
| 552 cr.webUIListenerCallback('power-sources-changed', |
| 553 sourcesCopy, powerSourceId, isLowPowerCharger); |
| 554 } |
| 555 |
| 556 suite('no power settings', function() { |
| 557 test('power row hidden', function() { |
| 558 assertEquals(null, devicePage.$$('#powerRow')); |
| 559 assertEquals(0, |
| 560 settings.DevicePageBrowserProxyImpl.getInstance() |
| 561 .updatePowerStatusCalled_); |
| 562 }); |
| 563 }); |
| 564 |
| 565 suite('power settings', function() { |
| 566 var powerRow; |
| 567 var powerSourceWrapper; |
| 568 var powerSourceSelect; |
| 569 |
| 570 suiteSetup(function() { |
| 571 // Always show power settings. |
| 572 loadTimeData.overrideValues({ |
| 573 enablePowerSettings: true, |
| 574 }); |
| 575 }); |
| 576 |
| 577 setup(function() { |
| 578 powerRow = assert(devicePage.$$('#powerRow')); |
| 579 powerSourceWrapper = |
| 580 assert(powerRow.querySelector('.md-select-wrapper')); |
| 581 powerSourceSelect = assert(devicePage.$$('#powerSource')); |
| 582 assertEquals(1, |
| 583 settings.DevicePageBrowserProxyImpl.getInstance() |
| 584 .updatePowerStatusCalled_); |
| 585 }); |
| 586 |
| 587 test('battery status', function() { |
| 588 var icon = powerRow.querySelector('iron-icon'); |
| 589 assertEquals('settings:battery-unknown', icon.icon); |
| 590 |
| 591 // Start at 50%. |
| 592 var batteryStatus = { |
| 593 charging: false, |
| 594 calculating: false, |
| 595 percent: 50, |
| 596 statusText: '5 hours left', |
| 597 }; |
| 598 cr.webUIListenerCallback( |
| 599 'battery-status-changed', Object.assign({}, batteryStatus)); |
| 600 setPowerSources([], '', false); |
| 601 assertEquals(icon.icon, 'settings:battery-50'); |
| 602 |
| 603 // Update to charging. |
| 604 var powerSource = { |
| 605 id: '1', |
| 606 type: settings.PowerDeviceType.DEDICATED_CHARGER, |
| 607 description: 'AC adapter', |
| 608 }; |
| 609 batteryStatus.charging = true; |
| 610 batteryStatus.percent = 65; |
| 611 cr.webUIListenerCallback( |
| 612 'battery-status-changed', Object.assign({}, batteryStatus)); |
| 613 setPowerSources([powerSource], powerSource.id, false); |
| 614 assertEquals(icon.icon, 'settings:battery-charging-60'); |
| 615 |
| 616 // Update with a low-power charger. |
| 617 setPowerSources([powerSource], powerSource.id, true); |
| 618 assertEquals(icon.icon, 'settings:battery-unreliable'); |
| 619 |
| 620 // Update with no charger and a critical battery level. |
| 621 batteryStatus.charging = false; |
| 622 batteryStatus.percent = 2; |
| 623 cr.webUIListenerCallback( |
| 624 'battery-status-changed', Object.assign({}, batteryStatus)); |
| 625 setPowerSources([], '', false); |
| 626 assertEquals(icon.icon, 'settings:battery-alert'); |
| 627 }); |
| 628 |
| 629 test('power sources', function() { |
| 630 var batteryStatus = { |
| 631 charging: false, |
| 632 calculating: false, |
| 633 percent: 50, |
| 634 statusText: '5 hours left', |
| 635 }; |
| 636 cr.webUIListenerCallback( |
| 637 'battery-status-changed', Object.assign({}, batteryStatus)); |
| 638 setPowerSources([], '', false); |
| 639 Polymer.dom.flush(); |
| 640 |
| 641 // Power sources dropdown is hidden. |
| 642 assertTrue(powerSourceWrapper.hidden); |
| 643 |
| 644 // Attach a dual-role USB device. |
| 645 var powerSource = { |
| 646 id: '2', |
| 647 type: settings.PowerDeviceType.DUAL_ROLE_USB, |
| 648 description: 'USB-C device', |
| 649 }; |
| 650 setPowerSources([powerSource], '', false); |
| 651 Polymer.dom.flush(); |
| 652 |
| 653 // "Battery" should be selected. |
| 654 assertFalse(powerSourceWrapper.hidden); |
| 655 assertEquals('', powerSourceSelect.value); |
| 656 |
| 657 // Select the power source. |
| 658 setPowerSources([powerSource], powerSource.id, true); |
| 659 Polymer.dom.flush(); |
| 660 assertFalse(powerSourceWrapper.hidden); |
| 661 assertEquals(powerSource.id, powerSourceSelect.value); |
| 662 |
| 663 // Send another power source; the first should still be selected. |
| 664 var otherPowerSource = Object.assign({}, powerSource); |
| 665 otherPowerSource.id = '3'; |
| 666 setPowerSources( |
| 667 [otherPowerSource, powerSource], powerSource.id, true); |
| 668 Polymer.dom.flush(); |
| 669 assertFalse(powerSourceWrapper.hidden); |
| 670 assertEquals(powerSource.id, powerSourceSelect.value); |
| 671 }); |
| 672 |
| 673 test('choose power source', function() { |
| 674 var batteryStatus = { |
| 675 charging: false, |
| 676 calculating: false, |
| 677 percent: 50, |
| 678 statusText: '5 hours left', |
| 679 }; |
| 680 cr.webUIListenerCallback( |
| 681 'battery-status-changed', Object.assign({}, batteryStatus)); |
| 682 |
| 683 // Attach a dual-role USB device. |
| 684 var powerSource = { |
| 685 id: '3', |
| 686 type: settings.PowerDeviceType.DUAL_ROLE_USB, |
| 687 description: 'USB-C device', |
| 688 }; |
| 689 setPowerSources([powerSource], '', false); |
| 690 Polymer.dom.flush(); |
| 691 |
| 692 // Select the device. |
| 693 powerSourceSelect.value = powerSourceSelect.children[1].value; |
| 694 powerSourceSelect.dispatchEvent(new CustomEvent('change')); |
| 695 Polymer.dom.flush(); |
| 696 expectEquals( |
| 697 powerSource.id, |
| 698 settings.DevicePageBrowserProxyImpl.getInstance().powerSourceId_); |
| 699 }); |
| 700 }); |
| 701 }); |
| 528 }); | 702 }); |
| 529 | 703 |
| 530 return { | 704 return { |
| 531 TestNames: TestNames | 705 TestNames: TestNames |
| 532 }; | 706 }; |
| 533 }); | 707 }); |
| OLD | NEW |