mutable_phone_model_unittest.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // Copyright 2020 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/components/phonehub/mutable_phone_model.h"
  5. #include "ash/components/phonehub/phone_model_test_util.h"
  6. #include "base/strings/utf_string_conversions.h"
  7. #include "testing/gtest/include/gtest/gtest.h"
  8. namespace ash {
  9. namespace phonehub {
  10. namespace {
  11. class FakeObserver : public PhoneModel::Observer {
  12. public:
  13. FakeObserver() = default;
  14. ~FakeObserver() override = default;
  15. size_t num_calls() const { return num_calls_; }
  16. // PhoneModel::Observer:
  17. void OnModelChanged() override { ++num_calls_; }
  18. private:
  19. size_t num_calls_ = 0;
  20. };
  21. } // namespace
  22. class MutablePhoneModelTest : public testing::Test {
  23. protected:
  24. MutablePhoneModelTest() = default;
  25. MutablePhoneModelTest(const MutablePhoneModelTest&) = delete;
  26. MutablePhoneModelTest& operator=(const MutablePhoneModelTest&) = delete;
  27. ~MutablePhoneModelTest() override = default;
  28. // testing::Test:
  29. void SetUp() override { model_.AddObserver(&fake_observer_); }
  30. void TearDown() override { model_.RemoveObserver(&fake_observer_); }
  31. size_t GetNumObserverCalls() const { return fake_observer_.num_calls(); }
  32. protected:
  33. MutablePhoneModel model_;
  34. private:
  35. FakeObserver fake_observer_;
  36. };
  37. TEST_F(MutablePhoneModelTest, PhoneName) {
  38. const std::u16string fake_phone_name = u"Phone name";
  39. // Set the phone name to be null (the default value); observers should
  40. // not be notified, since this is not a change.
  41. model_.SetPhoneName(/*phone_name=*/absl::nullopt);
  42. EXPECT_FALSE(model_.phone_name().has_value());
  43. EXPECT_EQ(0u, GetNumObserverCalls());
  44. // Set the phone name; observers should be notified.
  45. model_.SetPhoneName(fake_phone_name);
  46. EXPECT_EQ(fake_phone_name, model_.phone_name());
  47. EXPECT_EQ(1u, GetNumObserverCalls());
  48. // Set the same phone name; observers should not be notified.
  49. model_.SetPhoneName(fake_phone_name);
  50. EXPECT_EQ(fake_phone_name, model_.phone_name());
  51. EXPECT_EQ(1u, GetNumObserverCalls());
  52. // Set the phone name back to null; observers should be notified.
  53. model_.SetPhoneName(/*phone_name=*/absl::nullopt);
  54. EXPECT_FALSE(model_.phone_name().has_value());
  55. EXPECT_EQ(2u, GetNumObserverCalls());
  56. }
  57. TEST_F(MutablePhoneModelTest, PhoneStatusModel) {
  58. // Set the PhoneStatusModel to be null (the default value); observers should
  59. // not be notified, since this is not a change.
  60. model_.SetPhoneStatusModel(/*phone_status_model=*/absl::nullopt);
  61. EXPECT_FALSE(model_.phone_status_model().has_value());
  62. EXPECT_EQ(0u, GetNumObserverCalls());
  63. // Set the PhoneStatusModel; observers should be notified.
  64. model_.SetPhoneStatusModel(CreateFakePhoneStatusModel());
  65. EXPECT_EQ(CreateFakePhoneStatusModel(), model_.phone_status_model());
  66. EXPECT_EQ(1u, GetNumObserverCalls());
  67. // Set the same PhoneStatusModel; observers should not be notified.
  68. model_.SetPhoneStatusModel(CreateFakePhoneStatusModel());
  69. EXPECT_EQ(CreateFakePhoneStatusModel(), model_.phone_status_model());
  70. EXPECT_EQ(1u, GetNumObserverCalls());
  71. // Set the PhoneStatusModel back to null; observers should be notified.
  72. model_.SetPhoneStatusModel(/*phone_status_model=*/absl::nullopt);
  73. EXPECT_FALSE(model_.phone_status_model().has_value());
  74. EXPECT_EQ(2u, GetNumObserverCalls());
  75. }
  76. TEST_F(MutablePhoneModelTest, BrowserTabsModel) {
  77. // Set the BrowserTabsModel to be null (the default value); observers should
  78. // not be notified, since this is not a change.
  79. model_.SetBrowserTabsModel(/*browser_tabs_model=*/absl::nullopt);
  80. EXPECT_FALSE(model_.browser_tabs_model().has_value());
  81. EXPECT_EQ(0u, GetNumObserverCalls());
  82. // Set the BrowserTabsModel; observers should be notified.
  83. model_.SetBrowserTabsModel(CreateFakeBrowserTabsModel());
  84. EXPECT_EQ(CreateFakeBrowserTabsModel(), model_.browser_tabs_model());
  85. EXPECT_EQ(1u, GetNumObserverCalls());
  86. // Set the same BrowserTabsModel; observers should not be notified.
  87. model_.SetBrowserTabsModel(CreateFakeBrowserTabsModel());
  88. EXPECT_EQ(CreateFakeBrowserTabsModel(), model_.browser_tabs_model());
  89. EXPECT_EQ(1u, GetNumObserverCalls());
  90. // Set the BrowserTabsModel back to null; observers should be notified.
  91. model_.SetBrowserTabsModel(/*browser_tabs_model=*/absl::nullopt);
  92. EXPECT_FALSE(model_.browser_tabs_model().has_value());
  93. EXPECT_EQ(2u, GetNumObserverCalls());
  94. }
  95. } // namespace phonehub
  96. } // namespace ash