| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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 #include <iostream> | |
| 6 | |
| 7 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" | |
| 8 #include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h" | |
| 9 #include "chromeos/dbus/mock_bluetooth_adapter_client.h" | |
| 10 #include "chromeos/dbus/mock_bluetooth_manager_client.h" | |
| 11 #include "chromeos/dbus/mock_dbus_thread_manager.h" | |
| 12 #include "dbus/object_path.h" | |
| 13 #include "testing/gtest/include/gtest/gtest.h" | |
| 14 | |
| 15 using ::testing::_; | |
| 16 using ::testing::Return; | |
| 17 using ::testing::SaveArg; | |
| 18 | |
| 19 namespace chromeos { | |
| 20 | |
| 21 class BluetoothAdapterTest : public testing::Test { | |
| 22 public: | |
| 23 virtual void SetUp() { | |
| 24 MockDBusThreadManager* mock_dbus_thread_manager = new MockDBusThreadManager; | |
| 25 | |
| 26 EXPECT_CALL(*mock_dbus_thread_manager, GetSystemBus()) | |
| 27 .WillRepeatedly(Return(reinterpret_cast<dbus::Bus*>(NULL))); | |
| 28 DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); | |
| 29 | |
| 30 mock_manager_client_ = | |
| 31 mock_dbus_thread_manager->mock_bluetooth_manager_client(); | |
| 32 mock_adapter_client_ = | |
| 33 mock_dbus_thread_manager->mock_bluetooth_adapter_client(); | |
| 34 } | |
| 35 | |
| 36 virtual void TearDown() { | |
| 37 DBusThreadManager::Shutdown(); | |
| 38 } | |
| 39 | |
| 40 protected: | |
| 41 MockBluetoothManagerClient* mock_manager_client_; | |
| 42 MockBluetoothAdapterClient* mock_adapter_client_; | |
| 43 }; | |
| 44 | |
| 45 TEST_F(BluetoothAdapterTest, DefaultAdapterNotPresent) { | |
| 46 // Create the default adapter instance; | |
| 47 // BluetoothManagerClient::DefaultAdapter will be called once, passing | |
| 48 // a callback to obtain the adapter path. | |
| 49 BluetoothManagerClient::AdapterCallback adapter_callback; | |
| 50 EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) | |
| 51 .WillOnce(SaveArg<0>(&adapter_callback)); | |
| 52 | |
| 53 scoped_refptr<BluetoothAdapter> adapter = BluetoothAdapter::DefaultAdapter(); | |
| 54 | |
| 55 // Call the adapter callback; make out it failed. | |
| 56 // BluetoothAdapter::Observer::AdapterPresentChanged must not be called. | |
| 57 MockBluetoothAdapter::Observer adapter_observer; | |
| 58 adapter->AddObserver(&adapter_observer); | |
| 59 | |
| 60 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), _)) | |
| 61 .Times(0); | |
| 62 | |
| 63 adapter_callback.Run(dbus::ObjectPath(""), false); | |
| 64 | |
| 65 // Adapter should not be present. | |
| 66 EXPECT_FALSE(adapter->IsPresent()); | |
| 67 } | |
| 68 | |
| 69 TEST_F(BluetoothAdapterTest, DefaultAdapterWithAddress) { | |
| 70 const dbus::ObjectPath adapter_path("/fake/hci0"); | |
| 71 const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; | |
| 72 | |
| 73 // Create the default adapter instance; | |
| 74 // BluetoothManagerClient::DefaultAdapter will be called once, passing | |
| 75 // a callback to obtain the adapter path. | |
| 76 BluetoothManagerClient::AdapterCallback adapter_callback; | |
| 77 EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) | |
| 78 .WillOnce(SaveArg<0>(&adapter_callback)); | |
| 79 | |
| 80 scoped_refptr<BluetoothAdapter> adapter = BluetoothAdapter::DefaultAdapter(); | |
| 81 | |
| 82 // Call the adapter callback; | |
| 83 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 84 // the property set. | |
| 85 MockBluetoothAdapterClient::Properties adapter_properties; | |
| 86 adapter_properties.address.ReplaceValue(adapter_address); | |
| 87 | |
| 88 EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) | |
| 89 .WillRepeatedly(Return(&adapter_properties)); | |
| 90 | |
| 91 // BluetoothAdapter::Observer::AdapterPresentChanged will be called to | |
| 92 // indicate the adapter is now present. | |
| 93 MockBluetoothAdapter::Observer adapter_observer; | |
| 94 adapter->AddObserver(&adapter_observer); | |
| 95 | |
| 96 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) | |
| 97 .Times(1); | |
| 98 | |
| 99 adapter_callback.Run(adapter_path, true); | |
| 100 | |
| 101 // Adapter should be present with the given address. | |
| 102 EXPECT_TRUE(adapter->IsPresent()); | |
| 103 EXPECT_EQ(adapter_address, adapter->address()); | |
| 104 } | |
| 105 | |
| 106 TEST_F(BluetoothAdapterTest, DefaultAdapterWithoutAddress) { | |
| 107 const dbus::ObjectPath adapter_path("/fake/hci0"); | |
| 108 const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; | |
| 109 | |
| 110 // Create the default adapter instance; | |
| 111 // BluetoothManagerClient::DefaultAdapter will be called once, passing | |
| 112 // a callback to obtain the adapter path. | |
| 113 BluetoothManagerClient::AdapterCallback adapter_callback; | |
| 114 EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) | |
| 115 .WillOnce(SaveArg<0>(&adapter_callback)); | |
| 116 | |
| 117 scoped_refptr<BluetoothAdapter> adapter = BluetoothAdapter::DefaultAdapter(); | |
| 118 | |
| 119 // Call the adapter callback; | |
| 120 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 121 // the property set. | |
| 122 MockBluetoothAdapterClient::Properties adapter_properties; | |
| 123 | |
| 124 EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) | |
| 125 .WillRepeatedly(Return(&adapter_properties)); | |
| 126 | |
| 127 // BluetoothAdapter::Observer::AdapterPresentChanged must not be called | |
| 128 // yet. | |
| 129 MockBluetoothAdapter::Observer adapter_observer; | |
| 130 adapter->AddObserver(&adapter_observer); | |
| 131 | |
| 132 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), _)) | |
| 133 .Times(0); | |
| 134 | |
| 135 adapter_callback.Run(adapter_path, true); | |
| 136 | |
| 137 // Adapter should not be present yet. | |
| 138 EXPECT_FALSE(adapter->IsPresent()); | |
| 139 | |
| 140 // Tell the adapter the address now; | |
| 141 // BluetoothAdapter::Observer::AdapterPresentChanged now must be called. | |
| 142 adapter_properties.address.ReplaceValue(adapter_address); | |
| 143 | |
| 144 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) | |
| 145 .Times(1); | |
| 146 | |
| 147 static_cast<BluetoothAdapterClient::Observer*>(adapter.get()) | |
| 148 ->AdapterPropertyChanged(adapter_path, | |
| 149 adapter_properties.address.name()); | |
| 150 | |
| 151 // Adapter should be present with the given address. | |
| 152 EXPECT_TRUE(adapter->IsPresent()); | |
| 153 EXPECT_EQ(adapter_address, adapter->address()); | |
| 154 } | |
| 155 | |
| 156 TEST_F(BluetoothAdapterTest, DefaultAdapterBecomesPresentWithAddress) { | |
| 157 const dbus::ObjectPath adapter_path("/fake/hci0"); | |
| 158 const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; | |
| 159 | |
| 160 // Create the default adapter instance; | |
| 161 // BluetoothManagerClient::DefaultAdapter will be called once, passing | |
| 162 // a callback to obtain the adapter path. | |
| 163 BluetoothManagerClient::AdapterCallback adapter_callback; | |
| 164 EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) | |
| 165 .WillOnce(SaveArg<0>(&adapter_callback)); | |
| 166 | |
| 167 scoped_refptr<BluetoothAdapter> adapter = BluetoothAdapter::DefaultAdapter(); | |
| 168 | |
| 169 // Call the adapter callback; make out it failed. | |
| 170 adapter_callback.Run(dbus::ObjectPath(""), false); | |
| 171 | |
| 172 // Tell the adapter the default adapter changed; | |
| 173 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 174 // the property set. | |
| 175 MockBluetoothAdapterClient::Properties adapter_properties; | |
| 176 adapter_properties.address.ReplaceValue(adapter_address); | |
| 177 | |
| 178 EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) | |
| 179 .WillRepeatedly(Return(&adapter_properties)); | |
| 180 | |
| 181 // BluetoothAdapter::Observer::AdapterPresentChanged must be called. | |
| 182 MockBluetoothAdapter::Observer adapter_observer; | |
| 183 adapter->AddObserver(&adapter_observer); | |
| 184 | |
| 185 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) | |
| 186 .Times(1); | |
| 187 | |
| 188 static_cast<BluetoothManagerClient::Observer*>(adapter.get()) | |
| 189 ->DefaultAdapterChanged(adapter_path); | |
| 190 | |
| 191 // Adapter should be present with the new address. | |
| 192 EXPECT_TRUE(adapter->IsPresent()); | |
| 193 EXPECT_EQ(adapter_address, adapter->address()); | |
| 194 } | |
| 195 | |
| 196 TEST_F(BluetoothAdapterTest, DefaultAdapterReplacedWithAddress) { | |
| 197 const dbus::ObjectPath initial_adapter_path("/fake/hci0"); | |
| 198 const dbus::ObjectPath new_adapter_path("/fake/hci1"); | |
| 199 const std::string initial_adapter_address = "CA:FE:4A:C0:FE:FE"; | |
| 200 const std::string new_adapter_address = "BA:C0:11:CO:FE:FE"; | |
| 201 | |
| 202 // Create the default adapter instance; | |
| 203 // BluetoothManagerClient::DefaultAdapter will be called once, passing | |
| 204 // a callback to obtain the adapter path. | |
| 205 BluetoothManagerClient::AdapterCallback adapter_callback; | |
| 206 EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) | |
| 207 .WillOnce(SaveArg<0>(&adapter_callback)); | |
| 208 | |
| 209 scoped_refptr<BluetoothAdapter> adapter = BluetoothAdapter::DefaultAdapter(); | |
| 210 | |
| 211 // Call the adapter callback; | |
| 212 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 213 // the property set. | |
| 214 MockBluetoothAdapterClient::Properties initial_adapter_properties; | |
| 215 initial_adapter_properties.address.ReplaceValue(initial_adapter_address); | |
| 216 | |
| 217 EXPECT_CALL(*mock_adapter_client_, GetProperties(initial_adapter_path)) | |
| 218 .WillRepeatedly(Return(&initial_adapter_properties)); | |
| 219 | |
| 220 adapter_callback.Run(initial_adapter_path, true); | |
| 221 | |
| 222 // Tell the adapter the default adapter changed; | |
| 223 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 224 // the property set. | |
| 225 MockBluetoothAdapterClient::Properties new_adapter_properties; | |
| 226 new_adapter_properties.address.ReplaceValue(new_adapter_address); | |
| 227 | |
| 228 EXPECT_CALL(*mock_adapter_client_, GetProperties(new_adapter_path)) | |
| 229 .WillRepeatedly(Return(&new_adapter_properties)); | |
| 230 | |
| 231 // BluetoothAdapter::Observer::AdapterPresentChanged must be called once | |
| 232 // with false to indicate the old adapter being removed and once with true | |
| 233 // to announce the new adapter. | |
| 234 MockBluetoothAdapter::Observer adapter_observer; | |
| 235 adapter->AddObserver(&adapter_observer); | |
| 236 | |
| 237 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) | |
| 238 .Times(1); | |
| 239 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) | |
| 240 .Times(1); | |
| 241 | |
| 242 static_cast<BluetoothManagerClient::Observer*>(adapter.get()) | |
| 243 ->DefaultAdapterChanged(new_adapter_path); | |
| 244 | |
| 245 // Adapter should be present with the new address. | |
| 246 EXPECT_TRUE(adapter->IsPresent()); | |
| 247 EXPECT_EQ(new_adapter_address, adapter->address()); | |
| 248 } | |
| 249 | |
| 250 TEST_F(BluetoothAdapterTest, DefaultAdapterBecomesPresentWithoutAddress) { | |
| 251 const dbus::ObjectPath adapter_path("/fake/hci0"); | |
| 252 const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; | |
| 253 | |
| 254 // Create the default adapter instance; | |
| 255 // BluetoothManagerClient::DefaultAdapter will be called once, passing | |
| 256 // a callback to obtain the adapter path. | |
| 257 BluetoothManagerClient::AdapterCallback adapter_callback; | |
| 258 EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) | |
| 259 .WillOnce(SaveArg<0>(&adapter_callback)); | |
| 260 | |
| 261 scoped_refptr<BluetoothAdapter> adapter = BluetoothAdapter::DefaultAdapter(); | |
| 262 | |
| 263 // Call the adapter callback; make out it failed. | |
| 264 adapter_callback.Run(dbus::ObjectPath(""), false); | |
| 265 | |
| 266 // Tell the adapter the default adapter changed; | |
| 267 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 268 // the property set. | |
| 269 MockBluetoothAdapterClient::Properties adapter_properties; | |
| 270 | |
| 271 EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) | |
| 272 .WillRepeatedly(Return(&adapter_properties)); | |
| 273 | |
| 274 // BluetoothAdapter::Observer::AdapterPresentChanged must not be called. | |
| 275 MockBluetoothAdapter::Observer adapter_observer; | |
| 276 adapter->AddObserver(&adapter_observer); | |
| 277 | |
| 278 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), _)) | |
| 279 .Times(0); | |
| 280 | |
| 281 static_cast<BluetoothManagerClient::Observer*>(adapter.get()) | |
| 282 ->DefaultAdapterChanged(adapter_path); | |
| 283 | |
| 284 // Adapter should not be present yet. | |
| 285 EXPECT_FALSE(adapter->IsPresent()); | |
| 286 | |
| 287 // Tell the adapter the address now; | |
| 288 // BluetoothAdapter::Observer::AdapterPresentChanged now must be called. | |
| 289 adapter_properties.address.ReplaceValue(adapter_address); | |
| 290 | |
| 291 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) | |
| 292 .Times(1); | |
| 293 | |
| 294 static_cast<BluetoothAdapterClient::Observer*>(adapter.get()) | |
| 295 ->AdapterPropertyChanged(adapter_path, | |
| 296 adapter_properties.address.name()); | |
| 297 | |
| 298 // Adapter should be present with the new address. | |
| 299 EXPECT_TRUE(adapter->IsPresent()); | |
| 300 EXPECT_EQ(adapter_address, adapter->address()); | |
| 301 } | |
| 302 | |
| 303 TEST_F(BluetoothAdapterTest, DefaultAdapterReplacedWithoutAddress) { | |
| 304 const dbus::ObjectPath initial_adapter_path("/fake/hci0"); | |
| 305 const dbus::ObjectPath new_adapter_path("/fake/hci1"); | |
| 306 const std::string initial_adapter_address = "CA:FE:4A:C0:FE:FE"; | |
| 307 const std::string new_adapter_address = "BA:C0:11:CO:FE:FE"; | |
| 308 | |
| 309 // Create the default adapter instance; | |
| 310 // BluetoothManagerClient::DefaultAdapter will be called once, passing | |
| 311 // a callback to obtain the adapter path. | |
| 312 BluetoothManagerClient::AdapterCallback adapter_callback; | |
| 313 EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) | |
| 314 .WillOnce(SaveArg<0>(&adapter_callback)); | |
| 315 | |
| 316 scoped_refptr<BluetoothAdapter> adapter = BluetoothAdapter::DefaultAdapter(); | |
| 317 | |
| 318 // Call the adapter callback; | |
| 319 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 320 // the property set. | |
| 321 MockBluetoothAdapterClient::Properties initial_adapter_properties; | |
| 322 initial_adapter_properties.address.ReplaceValue(initial_adapter_address); | |
| 323 | |
| 324 EXPECT_CALL(*mock_adapter_client_, GetProperties(initial_adapter_path)) | |
| 325 .WillRepeatedly(Return(&initial_adapter_properties)); | |
| 326 | |
| 327 adapter_callback.Run(initial_adapter_path, true); | |
| 328 | |
| 329 // Tell the adapter the default adapter changed; | |
| 330 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 331 // the property set. | |
| 332 MockBluetoothAdapterClient::Properties new_adapter_properties; | |
| 333 | |
| 334 EXPECT_CALL(*mock_adapter_client_, GetProperties(new_adapter_path)) | |
| 335 .WillRepeatedly(Return(&new_adapter_properties)); | |
| 336 | |
| 337 // BluetoothAdapter::Observer::AdapterPresentChanged must be called to | |
| 338 // indicate the adapter has gone away. | |
| 339 MockBluetoothAdapter::Observer adapter_observer; | |
| 340 adapter->AddObserver(&adapter_observer); | |
| 341 | |
| 342 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) | |
| 343 .Times(1); | |
| 344 | |
| 345 static_cast<BluetoothManagerClient::Observer*>(adapter.get()) | |
| 346 ->DefaultAdapterChanged(new_adapter_path); | |
| 347 | |
| 348 // Adapter should be now marked not present. | |
| 349 EXPECT_FALSE(adapter->IsPresent()); | |
| 350 | |
| 351 // Tell the adapter the address now; | |
| 352 // BluetoothAdapter::Observer::AdapterPresentChanged now must be called. | |
| 353 new_adapter_properties.address.ReplaceValue(new_adapter_address); | |
| 354 | |
| 355 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) | |
| 356 .Times(1); | |
| 357 | |
| 358 static_cast<BluetoothAdapterClient::Observer*>(adapter.get()) | |
| 359 ->AdapterPropertyChanged(new_adapter_path, | |
| 360 new_adapter_properties.address.name()); | |
| 361 | |
| 362 // Adapter should be present with the new address. | |
| 363 EXPECT_TRUE(adapter->IsPresent()); | |
| 364 EXPECT_EQ(new_adapter_address, adapter->address()); | |
| 365 } | |
| 366 | |
| 367 TEST_F(BluetoothAdapterTest, DefaultAdapterRemoved) { | |
| 368 const dbus::ObjectPath adapter_path("/fake/hci0"); | |
| 369 const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; | |
| 370 | |
| 371 // Create the default adapter instance; | |
| 372 // BluetoothManagerClient::DefaultAdapter will be called once, passing | |
| 373 // a callback to obtain the adapter path. | |
| 374 BluetoothManagerClient::AdapterCallback adapter_callback; | |
| 375 EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) | |
| 376 .WillOnce(SaveArg<0>(&adapter_callback)); | |
| 377 | |
| 378 scoped_refptr<BluetoothAdapter> adapter = BluetoothAdapter::DefaultAdapter(); | |
| 379 | |
| 380 // Call the adapter callback; | |
| 381 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 382 // the property set. | |
| 383 MockBluetoothAdapterClient::Properties adapter_properties; | |
| 384 adapter_properties.address.ReplaceValue(adapter_address); | |
| 385 | |
| 386 EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) | |
| 387 .WillRepeatedly(Return(&adapter_properties)); | |
| 388 | |
| 389 adapter_callback.Run(adapter_path, true); | |
| 390 | |
| 391 // Report that the adapter has been removed; | |
| 392 // BluetoothAdapter::Observer::AdapterPresentChanged will be called to | |
| 393 // indicate the adapter is no longer present. | |
| 394 MockBluetoothAdapter::Observer adapter_observer; | |
| 395 adapter->AddObserver(&adapter_observer); | |
| 396 | |
| 397 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) | |
| 398 .Times(1); | |
| 399 | |
| 400 static_cast<BluetoothManagerClient::Observer*>(adapter.get()) | |
| 401 ->AdapterRemoved(adapter_path); | |
| 402 | |
| 403 // Adapter should be no longer present. | |
| 404 EXPECT_FALSE(adapter->IsPresent()); | |
| 405 } | |
| 406 | |
| 407 TEST_F(BluetoothAdapterTest, DefaultAdapterWithoutAddressRemoved) { | |
| 408 const dbus::ObjectPath adapter_path("/fake/hci0"); | |
| 409 | |
| 410 // Create the default adapter instance; | |
| 411 // BluetoothManagerClient::DefaultAdapter will be called once, passing | |
| 412 // a callback to obtain the adapter path. | |
| 413 BluetoothManagerClient::AdapterCallback adapter_callback; | |
| 414 EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) | |
| 415 .WillOnce(SaveArg<0>(&adapter_callback)); | |
| 416 | |
| 417 scoped_refptr<BluetoothAdapter> adapter = BluetoothAdapter::DefaultAdapter(); | |
| 418 | |
| 419 // Call the adapter callback; | |
| 420 // BluetoothAdapterClient::GetProperties will be called once to obtain | |
| 421 // the property set. | |
| 422 MockBluetoothAdapterClient::Properties adapter_properties; | |
| 423 | |
| 424 EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) | |
| 425 .WillRepeatedly(Return(&adapter_properties)); | |
| 426 | |
| 427 adapter_callback.Run(adapter_path, true); | |
| 428 | |
| 429 // Report that the adapter has been removed; | |
| 430 // BluetoothAdapter::Observer::AdapterPresentChanged must not be called | |
| 431 // since we never should have announced it in the first place. | |
| 432 MockBluetoothAdapter::Observer adapter_observer; | |
| 433 adapter->AddObserver(&adapter_observer); | |
| 434 | |
| 435 EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), _)) | |
| 436 .Times(0); | |
| 437 | |
| 438 static_cast<BluetoothManagerClient::Observer*>(adapter.get()) | |
| 439 ->AdapterRemoved(adapter_path); | |
| 440 | |
| 441 // Adapter should be still no longer present. | |
| 442 EXPECT_FALSE(adapter->IsPresent()); | |
| 443 } | |
| 444 | |
| 445 } // namespace chromeos | |
| OLD | NEW |