| 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 /** | 5 /** | 
| 6  * @fileoverview Tests for chrome://bluetooth-internals | 6  * @fileoverview Tests for chrome://bluetooth-internals | 
| 7  */ | 7  */ | 
| 8 | 8 | 
| 9 /** @const {string} Path to source root. */ | 9 /** @const {string} Path to source root. */ | 
| 10 var ROOT_PATH = '../../../../'; | 10 var ROOT_PATH = '../../../../'; | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 58           * | 58           * | 
| 59           * @constructor | 59           * @constructor | 
| 60           * @extends {TestBrowserProxyBase} | 60           * @extends {TestBrowserProxyBase} | 
| 61           */ | 61           */ | 
| 62         var TestAdapterFactoryProxy = function() { | 62         var TestAdapterFactoryProxy = function() { | 
| 63           settings.TestBrowserProxy.call(this, [ | 63           settings.TestBrowserProxy.call(this, [ | 
| 64             'getAdapter', | 64             'getAdapter', | 
| 65           ]); | 65           ]); | 
| 66 | 66 | 
| 67           this.binding = new bindings.Binding(adapter.AdapterFactory, this); | 67           this.binding = new bindings.Binding(adapter.AdapterFactory, this); | 
| 68           this.adapter = new TestAdapter(); | 68           this.adapter = new TestAdapterProxy(); | 
| 69           this.adapterBinding_ = new bindings.Binding(adapter.Adapter, | 69           this.adapterBinding_ = new bindings.Binding(adapter.Adapter, | 
| 70                                                       this.adapter); | 70                                                       this.adapter); | 
| 71         }; | 71         }; | 
| 72 | 72 | 
| 73         TestAdapterFactoryProxy.prototype = { | 73         TestAdapterFactoryProxy.prototype = { | 
| 74           __proto__: settings.TestBrowserProxy.prototype, | 74           __proto__: settings.TestBrowserProxy.prototype, | 
| 75           getAdapter: function() { | 75           getAdapter: function() { | 
| 76             this.methodCalled('getAdapter'); | 76             this.methodCalled('getAdapter'); | 
| 77 | 77 | 
| 78             // Create message pipe bound to TestAdapter. | 78             // Create message pipe bound to TestAdapter. | 
| 79             return Promise.resolve({ | 79             return Promise.resolve({ | 
| 80               adapter: this.adapterBinding_.createInterfacePtrAndBind(), | 80               adapter: this.adapterBinding_.createInterfacePtrAndBind(), | 
| 81             }); | 81             }); | 
| 82           } | 82           } | 
| 83         }; | 83         }; | 
| 84 | 84 | 
| 85         /** | 85         /** | 
| 86           * A test adapter for the chrome://bluetooth-internals page. |  | 
| 87           * Must be used to create message pipe handle from test code. |  | 
| 88           * |  | 
| 89           * @constructor |  | 
| 90           */ |  | 
| 91         var TestAdapter = function() { |  | 
| 92           this.proxy = new TestAdapterProxy(); |  | 
| 93         }; |  | 
| 94 |  | 
| 95         TestAdapter.prototype = { |  | 
| 96           getInfo: function() { return this.proxy.getInfo(); }, |  | 
| 97           getDevices: function() { return this.proxy.getDevices(); }, |  | 
| 98           setClient: function(client) { return this.proxy.setClient(client); } |  | 
| 99         }; |  | 
| 100 |  | 
| 101         /** |  | 
| 102           * A test adapter proxy for the chrome://bluetooth-internals page. | 86           * A test adapter proxy for the chrome://bluetooth-internals page. | 
| 103           * | 87           * | 
| 104           * @constructor | 88           * @constructor | 
| 105           * @extends {TestBrowserProxyBase} | 89           * @extends {TestBrowserProxyBase} | 
| 106           */ | 90           */ | 
| 107         var TestAdapterProxy = function() { | 91         var TestAdapterProxy = function() { | 
| 108           settings.TestBrowserProxy.call(this, [ | 92           settings.TestBrowserProxy.call(this, [ | 
| 109             'getInfo', | 93             'getInfo', | 
| 110             'getDevices', | 94             'getDevices', | 
| 111             'setClient', | 95             'setClient', | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 139           setTestDevices: function(devices) { | 123           setTestDevices: function(devices) { | 
| 140             this.devices_ = devices; | 124             this.devices_ = devices; | 
| 141           } | 125           } | 
| 142         }; | 126         }; | 
| 143 | 127 | 
| 144         frameInterfaces.addInterfaceOverrideForTesting( | 128         frameInterfaces.addInterfaceOverrideForTesting( | 
| 145             adapter.AdapterFactory.name, function(handle) { | 129             adapter.AdapterFactory.name, function(handle) { | 
| 146               this.adapterFactory = new TestAdapterFactoryProxy(); | 130               this.adapterFactory = new TestAdapterFactoryProxy(); | 
| 147               this.adapterFactory.binding.bind(handle); | 131               this.adapterFactory.binding.bind(handle); | 
| 148 | 132 | 
| 149               this.adapterFactory.adapter.proxy.setTestDevices([ | 133               this.adapterFactory.adapter.setTestDevices([ | 
| 150                 this.fakeDeviceInfo1(), | 134                 this.fakeDeviceInfo1(), | 
| 151                 this.fakeDeviceInfo2(), | 135                 this.fakeDeviceInfo2(), | 
| 152               ]); | 136               ]); | 
| 153               this.adapterFactory.adapter.proxy.setTestAdapter( | 137               this.adapterFactory.adapter.setTestAdapter( | 
| 154                   this.fakeAdapterInfo()); | 138                   this.fakeAdapterInfo()); | 
| 155 | 139 | 
| 156               this.setupResolver.resolve(); | 140               this.setupResolver.resolve(); | 
| 157             }.bind(this)); | 141             }.bind(this)); | 
| 158 | 142 | 
| 159       }.bind(this)); | 143       }.bind(this)); | 
| 160     }.bind(this); | 144     }.bind(this); | 
| 161   }, | 145   }, | 
| 162 | 146 | 
| 163   /** | 147   /** | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 212   fakeDeviceInfo3: function() { | 196   fakeDeviceInfo3: function() { | 
| 213     return { | 197     return { | 
| 214       address: "CC:CC:84:96:92:84", | 198       address: "CC:CC:84:96:92:84", | 
| 215       name: "CCC", | 199       name: "CCC", | 
| 216       name_for_display: "CCC", | 200       name_for_display: "CCC", | 
| 217     }; | 201     }; | 
| 218   }, | 202   }, | 
| 219 }; | 203 }; | 
| 220 | 204 | 
| 221 TEST_F('BluetoothInternalsTest', 'Startup_BluetoothInternals', function() { | 205 TEST_F('BluetoothInternalsTest', 'Startup_BluetoothInternals', function() { | 
|  | 206   /** @const */ var PageManager = cr.ui.pageManager.PageManager; | 
|  | 207 | 
| 222   var adapterFactory = null; | 208   var adapterFactory = null; | 
|  | 209   var adapterFieldSet = null; | 
| 223   var deviceTable = null; | 210   var deviceTable = null; | 
| 224   var sidebarNode = null; | 211   var sidebarNode = null; | 
| 225 | 212 | 
|  | 213   var fakeAdapterInfo = this.fakeAdapterInfo; | 
| 226   var fakeDeviceInfo1 = this.fakeDeviceInfo1; | 214   var fakeDeviceInfo1 = this.fakeDeviceInfo1; | 
| 227   var fakeDeviceInfo2 = this.fakeDeviceInfo2; | 215   var fakeDeviceInfo2 = this.fakeDeviceInfo2; | 
| 228   var fakeDeviceInfo3 = this.fakeDeviceInfo3; | 216   var fakeDeviceInfo3 = this.fakeDeviceInfo3; | 
| 229 | 217 | 
| 230   // Before tests are run, make sure setup completes. | 218   // Before tests are run, make sure setup completes. | 
| 231   var setupPromise = this.setupResolver.promise.then(function() { | 219   var setupPromise = this.setupResolver.promise.then(function() { | 
| 232     adapterFactory = this.adapterFactory; | 220     adapterFactory = this.adapterFactory; | 
| 233   }.bind(this)); | 221   }.bind(this)); | 
| 234 | 222 | 
| 235   suite('BluetoothInternalsUITest', function() { | 223   suite('BluetoothInternalsUITest', function() { | 
| 236     var EXPECTED_DEVICES = 2; | 224     var EXPECTED_DEVICES = 2; | 
| 237 | 225 | 
| 238     suiteSetup(function() { | 226     suiteSetup(function() { | 
| 239       return setupPromise.then(function() { | 227       return setupPromise.then(function() { | 
| 240         return Promise.all([ | 228         return Promise.all([ | 
| 241           adapterFactory.whenCalled('getAdapter'), | 229           adapterFactory.whenCalled('getAdapter'), | 
| 242           adapterFactory.adapter.proxy.whenCalled('getInfo'), | 230           adapterFactory.adapter.whenCalled('getInfo'), | 
| 243           adapterFactory.adapter.proxy.whenCalled('getDevices'), | 231           adapterFactory.adapter.whenCalled('getDevices'), | 
| 244           adapterFactory.adapter.proxy.whenCalled('setClient'), | 232           adapterFactory.adapter.whenCalled('setClient'), | 
| 245         ]); | 233         ]); | 
| 246       }); | 234       }); | 
| 247     }); | 235     }); | 
| 248 | 236 | 
| 249     setup(function() { | 237     setup(function() { | 
|  | 238       adapterFieldSet = document.querySelector('#adapter fieldset'); | 
| 250       deviceTable = document.querySelector('#devices table'); | 239       deviceTable = document.querySelector('#devices table'); | 
| 251       sidebarNode = document.querySelector('#sidebar'); | 240       sidebarNode = document.querySelector('#sidebar'); | 
| 252       devices.splice(0, devices.length); | 241       devices.splice(0, devices.length); | 
| 253       adapterBroker.adapterClient_.deviceAdded(fakeDeviceInfo1()); | 242       adapterBroker.adapterClient_.deviceAdded(fakeDeviceInfo1()); | 
| 254       adapterBroker.adapterClient_.deviceAdded(fakeDeviceInfo2()); | 243       adapterBroker.adapterClient_.deviceAdded(fakeDeviceInfo2()); | 
| 255     }); | 244     }); | 
| 256 | 245 | 
| 257     teardown(function() { | 246     teardown(function() { | 
| 258       adapterFactory.reset(); | 247       adapterFactory.reset(); | 
| 259       sidebarObj.close(); | 248       sidebarObj.close(); | 
| 260       snackbar.Snackbar.dismiss(true); | 249       snackbar.Snackbar.dismiss(true); | 
|  | 250       PageManager.registeredPages['adapter'].setAdapterInfo(fakeAdapterInfo()); | 
| 261     }); | 251     }); | 
| 262 | 252 | 
| 263     /** | 253     /** | 
| 264      * Updates device info and verifies the contents of the device table. | 254      * Updates device info and verifies the contents of the device table. | 
| 265      * @param {!device_collection.DeviceInfo} deviceInfo | 255      * @param {!device_collection.DeviceInfo} deviceInfo | 
| 266      */ | 256      */ | 
| 267     function changeDevice(deviceInfo) { | 257     function changeDevice(deviceInfo) { | 
| 268       var deviceRow = deviceTable.querySelector('#' + escapeDeviceAddress( | 258       var deviceRow = deviceTable.querySelector('#' + escapeDeviceAddress( | 
| 269           deviceInfo.address)); | 259           deviceInfo.address)); | 
| 270       var nameForDisplayColumn = deviceRow.children[0]; | 260       var nameForDisplayColumn = deviceRow.children[0]; | 
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 420       newDeviceInfo3.rssi = {value: -17}; | 410       newDeviceInfo3.rssi = {value: -17}; | 
| 421       adapterBroker.adapterClient_.deviceChanged(newDeviceInfo3); | 411       adapterBroker.adapterClient_.deviceChanged(newDeviceInfo3); | 
| 422       expectEquals('-17', rssiColumn.textContent); | 412       expectEquals('-17', rssiColumn.textContent); | 
| 423     }); | 413     }); | 
| 424 | 414 | 
| 425     /* Sidebar Tests */ | 415     /* Sidebar Tests */ | 
| 426     test('Sidebar_Setup', function() { | 416     test('Sidebar_Setup', function() { | 
| 427       var sidebarItems = Array.from( | 417       var sidebarItems = Array.from( | 
| 428           sidebarNode.querySelectorAll('.sidebar-content li')); | 418           sidebarNode.querySelectorAll('.sidebar-content li')); | 
| 429 | 419 | 
| 430       ['devices'].forEach(function(pageName) { | 420       ['adapter', 'devices'].forEach(function(pageName) { | 
| 431         expectTrue(sidebarItems.some(function(item) { | 421         expectTrue(sidebarItems.some(function(item) { | 
| 432           return item.dataset.pageName === pageName; | 422           return item.dataset.pageName === pageName; | 
| 433         })); | 423         })); | 
| 434       }); | 424       }); | 
| 435     }); | 425     }); | 
| 436 | 426 | 
| 437     test('Sidebar_DefaultState', function() { | 427     test('Sidebar_DefaultState', function() { | 
| 438       // Sidebar should be closed by default. | 428       // Sidebar should be closed by default. | 
| 439       expectFalse(sidebarNode.classList.contains('open')); | 429       expectFalse(sidebarNode.classList.contains('open')); | 
| 440     }); | 430     }); | 
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 554       whenSnackbarShows(snackbar3).then(next); | 544       whenSnackbarShows(snackbar3).then(next); | 
| 555       snackbar3.addEventListener('dismissed', next); | 545       snackbar3.addEventListener('dismissed', next); | 
| 556 | 546 | 
| 557       whenSnackbarShows(snackbar1).then(function() { | 547       whenSnackbarShows(snackbar1).then(function() { | 
| 558         return snackbar.Snackbar.dismiss(true); | 548         return snackbar.Snackbar.dismiss(true); | 
| 559       }).then(function() { | 549       }).then(function() { | 
| 560         expectEquals(0, snackbar.Snackbar.queue_.length); | 550         expectEquals(0, snackbar.Snackbar.queue_.length); | 
| 561         expectFalse(!!snackbar.Snackbar.current_); | 551         expectFalse(!!snackbar.Snackbar.current_); | 
| 562       }).then(finishSnackbarTest); | 552       }).then(finishSnackbarTest); | 
| 563     }); | 553     }); | 
|  | 554 | 
|  | 555     /* AdapterPage Tests */ | 
|  | 556     function checkAdapterFieldSet(adapterInfo) { | 
|  | 557       for (var propName in adapterInfo) { | 
|  | 558         var valueCell = adapterFieldSet.querySelector( | 
|  | 559             '[data-field="' + propName + '"]'); | 
|  | 560         var value = adapterInfo[propName]; | 
|  | 561 | 
|  | 562         if (typeof(value) === 'boolean') { | 
|  | 563           expectEquals(value, valueCell.classList.contains('checked')); | 
|  | 564         } else if (typeof(value) === 'string') { | 
|  | 565           expectEquals(value, valueCell.textContent); | 
|  | 566         } else { | 
|  | 567           assert('boolean or string type expected but got ' + typeof(value)); | 
|  | 568         } | 
|  | 569       } | 
|  | 570     } | 
|  | 571 | 
|  | 572     test('AdapterPage_DefaultState', function() { | 
|  | 573       checkAdapterFieldSet(adapterFieldSet.value); | 
|  | 574     }); | 
|  | 575 | 
|  | 576     test('AdapterPage_AdapterChanged', function() { | 
|  | 577       var adapterInfo = adapterFieldSet.value; | 
|  | 578 | 
|  | 579       adapterInfo.present = !adapterInfo.present; | 
|  | 580       adapterBroker.adapterClient_.presentChanged(adapterInfo.present); | 
|  | 581       checkAdapterFieldSet(adapterInfo); | 
|  | 582 | 
|  | 583       adapterInfo.discovering = !adapterInfo.discovering; | 
|  | 584       adapterBroker.adapterClient_.discoveringChanged(adapterInfo.discovering); | 
|  | 585       checkAdapterFieldSet(adapterInfo); | 
|  | 586     }); | 
|  | 587 | 
|  | 588     test('AdapterPage_AdapterChanged_RepeatTwice', function() { | 
|  | 589       var adapterInfo = adapterFieldSet.value; | 
|  | 590 | 
|  | 591       adapterInfo.present = !adapterInfo.present; | 
|  | 592       adapterBroker.adapterClient_.presentChanged(adapterInfo.present); | 
|  | 593       checkAdapterFieldSet(adapterInfo); | 
|  | 594       adapterBroker.adapterClient_.presentChanged(adapterInfo.present); | 
|  | 595       checkAdapterFieldSet(adapterInfo); | 
|  | 596 | 
|  | 597       adapterInfo.discovering = !adapterInfo.discovering; | 
|  | 598       adapterBroker.adapterClient_.discoveringChanged(adapterInfo.discovering); | 
|  | 599       checkAdapterFieldSet(adapterInfo); | 
|  | 600       adapterBroker.adapterClient_.discoveringChanged(adapterInfo.discovering); | 
|  | 601       checkAdapterFieldSet(adapterInfo); | 
|  | 602     }); | 
| 564   }); | 603   }); | 
| 565 | 604 | 
| 566 |  | 
| 567   // Run all registered tests. | 605   // Run all registered tests. | 
| 568   mocha.run(); | 606   mocha.run(); | 
| 569 }); | 607 }); | 
| OLD | NEW | 
|---|