Flutter Windows Embedder
task_runner_unittests.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter 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 
6 
7 #include "flutter/fml/macros.h"
8 #include "gtest/gtest.h"
9 
10 namespace flutter {
11 namespace testing {
12 
13 namespace {
14 class MockTaskRunner : public TaskRunner {
15  public:
16  MockTaskRunner(CurrentTimeProc get_current_time,
17  const TaskExpiredCallback& on_task_expired)
18  : TaskRunner(get_current_time, on_task_expired) {}
19 
20  virtual bool RunsTasksOnCurrentThread() const override { return true; }
21 
22  void SimulateTimerAwake() { ProcessTasks(); }
23 
24  protected:
25  virtual void WakeUp() override {
26  // Do nothing to avoid processing tasks immediately after the tasks is
27  // posted.
28  }
29 
30  virtual TaskTimePoint GetCurrentTimeForTask() const override {
31  return TaskTimePoint(
32  std::chrono::duration_cast<std::chrono::steady_clock::duration>(
33  std::chrono::nanoseconds(10000)));
34  }
35 
36  private:
37  FML_DISALLOW_COPY_AND_ASSIGN(MockTaskRunner);
38 };
39 
40 uint64_t MockGetCurrentTime() {
41  return 10000;
42 }
43 } // namespace
44 
45 TEST(TaskRunnerTest, MaybeExecuteTaskWithExactOrder) {
46  std::vector<uint64_t> executed_task_order;
47  auto runner =
48  MockTaskRunner(MockGetCurrentTime,
49  [&executed_task_order](const FlutterTask* expired_task) {
50  executed_task_order.push_back(expired_task->task);
51  });
52 
53  uint64_t time_now = MockGetCurrentTime();
54 
55  runner.PostFlutterTask(FlutterTask{nullptr, 1}, time_now);
56  runner.PostFlutterTask(FlutterTask{nullptr, 2}, time_now);
57  runner.PostTask(
58  [&executed_task_order]() { executed_task_order.push_back(3); });
59  runner.PostTask(
60  [&executed_task_order]() { executed_task_order.push_back(4); });
61 
62  runner.SimulateTimerAwake();
63 
64  std::vector<uint64_t> posted_task_order{1, 2, 3, 4};
65  EXPECT_EQ(executed_task_order, posted_task_order);
66 }
67 
68 TEST(TaskRunnerTest, MaybeExecuteTaskOnlyExpired) {
69  std::set<uint64_t> executed_task;
70  auto runner = MockTaskRunner(
71  MockGetCurrentTime, [&executed_task](const FlutterTask* expired_task) {
72  executed_task.insert(expired_task->task);
73  });
74 
75  uint64_t task_expired_before_now = 1;
76  uint64_t time_before_now = 0;
77  runner.PostFlutterTask(FlutterTask{nullptr, task_expired_before_now},
78  time_before_now);
79 
80  uint64_t task_expired_after_now = 2;
81  uint64_t time_after_now = MockGetCurrentTime() * 2;
82  runner.PostFlutterTask(FlutterTask{nullptr, task_expired_after_now},
83  time_after_now);
84 
85  runner.SimulateTimerAwake();
86 
87  std::set<uint64_t> only_task_expired_before_now{task_expired_before_now};
88  EXPECT_EQ(executed_task, only_task_expired_before_now);
89 }
90 
91 } // namespace testing
92 } // namespace flutter
flutter
Definition: accessibility_bridge_windows.cc:11
flutter::CurrentTimeProc
uint64_t(* CurrentTimeProc)()
Definition: task_runner.h:21
flutter::testing::TEST
TEST(AccessibilityBridgeWindows, GetParent)
Definition: accessibility_bridge_windows_unittests.cc:237
task_runner.h