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

#include "components/component_updater/timer.h"

#include <utility>

#include "base/functional/bind.h"
#include "base/run_loop.h"
#include "base/test/task_environment.h"
#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace component_updater {

class ComponentUpdaterTimerTest : public testing::Test {
 private:
  base::test::TaskEnvironment environment_;
};

TEST_F(ComponentUpdaterTimerTest, Start) {
  class TimerClientMock {
   public:
    TimerClientMock(int max_count, base::OnceClosure quit_closure)
        : max_count_(max_count),
          quit_closure_(std::move(quit_closure)),
          count_(0) {}

    void OnTimerEvent() {
      ++count_;
      if (count_ >= max_count_) {
        std::move(quit_closure_).Run();
      }
    }

    int count() const { return count_; }

   private:
    const int max_count_;
    base::OnceClosure quit_closure_;

    int count_;
  };

  base::RunLoop run_loop;
  TimerClientMock timer_client_fake(3, run_loop.QuitClosure());
  EXPECT_EQ(0, timer_client_fake.count());

  Timer timer;
  const base::TimeDelta delay(base::Milliseconds(1));
  timer.Start(delay, delay,
              base::BindRepeating(&TimerClientMock::OnTimerEvent,
                                  base::Unretained(&timer_client_fake)));
  run_loop.Run();
  timer.Stop();

  EXPECT_EQ(3, timer_client_fake.count());
}

}  // namespace component_updater
