chromium/ash/system/tracing_notification_controller_unittest.cc

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/system/tracing_notification_controller.h"

#include "ash/shell.h"
#include "ash/system/model/system_tray_model.h"
#include "ash/test/ash_test_base.h"
#include "ui/message_center/message_center.h"

namespace ash {

class TracingNotificationControllerTest : public AshTestBase {
 public:
  TracingNotificationControllerTest() = default;

  TracingNotificationControllerTest(const TracingNotificationControllerTest&) =
      delete;
  TracingNotificationControllerTest& operator=(
      const TracingNotificationControllerTest&) = delete;

  ~TracingNotificationControllerTest() override = default;

 protected:
  bool HasNotification() {
    return message_center::MessageCenter::Get()->FindVisibleNotificationById(
        TracingNotificationController::kNotificationId);
  }
};

// Tests that the notification becomes visible when the tray model toggles
// it.
TEST_F(TracingNotificationControllerTest, Visibility) {
  // The system starts with tracing off, so the notification isn't visible.
  EXPECT_FALSE(HasNotification());

  // Simulate turning on tracing.
  SystemTrayModel* model = Shell::Get()->system_tray_model();
  model->SetPerformanceTracingIconVisible(true);
  EXPECT_TRUE(HasNotification());

  // Simulate turning off tracing.
  model->SetPerformanceTracingIconVisible(false);
  EXPECT_FALSE(HasNotification());
}

}  // namespace ash