bluetooth_enabled_provider_unittest.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // Copyright 2021 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. #include "ash/quick_pair/feature_status_tracker/bluetooth_enabled_provider.h"
  5. #include <memory>
  6. #include "ash/quick_pair/feature_status_tracker/fake_bluetooth_adapter.h"
  7. #include "base/callback.h"
  8. #include "base/memory/scoped_refptr.h"
  9. #include "base/test/mock_callback.h"
  10. #include "device/bluetooth/bluetooth_adapter_factory.h"
  11. #include "testing/gtest/include/gtest/gtest.h"
  12. namespace ash {
  13. namespace quick_pair {
  14. class BluetoothEnabledProviderTest : public testing::Test {
  15. public:
  16. void SetUp() override {
  17. adapter_ = base::MakeRefCounted<FakeBluetoothAdapter>();
  18. device::BluetoothAdapterFactory::SetAdapterForTesting(adapter_);
  19. EXPECT_CALL(adapter(), AddObserver);
  20. provider_ = std::make_unique<BluetoothEnabledProvider>();
  21. }
  22. void TearDown() override {
  23. EXPECT_CALL(adapter(), RemoveObserver(provider_.get()));
  24. }
  25. FakeBluetoothAdapter& adapter() { return *(adapter_.get()); }
  26. protected:
  27. scoped_refptr<FakeBluetoothAdapter> adapter_;
  28. std::unique_ptr<BluetoothEnabledProvider> provider_;
  29. };
  30. TEST_F(BluetoothEnabledProviderTest, IsInitallyDisabled) {
  31. base::MockCallback<base::RepeatingCallback<void(bool)>> callback;
  32. EXPECT_CALL(callback, Run).Times(0);
  33. EXPECT_FALSE(provider_->is_enabled());
  34. }
  35. TEST_F(BluetoothEnabledProviderTest, GetsEnabledWhenAdapterIsPowered) {
  36. base::MockCallback<base::RepeatingCallback<void(bool)>> callback;
  37. EXPECT_CALL(callback, Run(true));
  38. provider_->SetCallback(callback.Get());
  39. adapter().SetBluetoothIsPowered(true);
  40. EXPECT_TRUE(provider_->is_enabled());
  41. }
  42. TEST_F(BluetoothEnabledProviderTest, TogglesStateBasedOnAdapterIsPowered) {
  43. base::MockCallback<base::RepeatingCallback<void(bool)>> callback;
  44. {
  45. testing::InSequence sequence;
  46. EXPECT_CALL(callback, Run(true));
  47. EXPECT_CALL(callback, Run(false));
  48. EXPECT_CALL(callback, Run(true));
  49. }
  50. provider_->SetCallback(callback.Get());
  51. adapter().SetBluetoothIsPowered(true);
  52. EXPECT_TRUE(provider_->is_enabled());
  53. adapter().SetBluetoothIsPowered(false);
  54. EXPECT_FALSE(provider_->is_enabled());
  55. adapter().SetBluetoothIsPowered(true);
  56. EXPECT_TRUE(provider_->is_enabled());
  57. }
  58. TEST_F(BluetoothEnabledProviderTest, NoHardwareSupport) {
  59. adapter().SetHardwareOffloadingStatus(
  60. device::BluetoothAdapter::LowEnergyScanSessionHardwareOffloadingStatus::
  61. kNotSupported);
  62. EXPECT_FALSE(provider_->is_enabled());
  63. adapter().SetBluetoothIsPowered(true);
  64. EXPECT_FALSE(provider_->is_enabled());
  65. }
  66. TEST_F(BluetoothEnabledProviderTest, HasHardwareSupport) {
  67. adapter().SetHardwareOffloadingStatus(
  68. device::BluetoothAdapter::LowEnergyScanSessionHardwareOffloadingStatus::
  69. kSupported);
  70. EXPECT_FALSE(provider_->is_enabled());
  71. adapter().SetBluetoothIsPowered(true);
  72. EXPECT_TRUE(provider_->is_enabled());
  73. }
  74. TEST_F(BluetoothEnabledProviderTest, HardwareSupportBecomesAvailable) {
  75. adapter().SetHardwareOffloadingStatus(
  76. device::BluetoothAdapter::LowEnergyScanSessionHardwareOffloadingStatus::
  77. kNotSupported);
  78. EXPECT_FALSE(provider_->is_enabled());
  79. adapter().SetBluetoothIsPowered(true);
  80. EXPECT_FALSE(provider_->is_enabled());
  81. adapter().SetHardwareOffloadingStatus(
  82. device::BluetoothAdapter::LowEnergyScanSessionHardwareOffloadingStatus::
  83. kSupported);
  84. EXPECT_TRUE(provider_->is_enabled());
  85. }
  86. TEST_F(BluetoothEnabledProviderTest, AdapterPresentChanges) {
  87. EXPECT_FALSE(provider_->is_enabled());
  88. adapter().SetBluetoothIsPresent(true);
  89. EXPECT_FALSE(provider_->is_enabled());
  90. adapter().SetBluetoothIsPowered(true);
  91. EXPECT_TRUE(provider_->is_enabled());
  92. }
  93. } // namespace quick_pair
  94. } // namespace ash