Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1455)

Unified Diff: cc/test/ordered_simple_task_runner_unittest.cc

Issue 387493002: Fixing and enhancing OrderedSimpleTaskRunner to allow 100% deterministic tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sprintf is hard. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/test/ordered_simple_task_runner_unittest.cc
diff --git a/cc/test/ordered_simple_task_runner_unittest.cc b/cc/test/ordered_simple_task_runner_unittest.cc
index 3fbfd3b73ccff069f1ac7b58bf259254ec6a56e6..8412c25878ffa729d6b517ee5d50e4b13a6d90f7 100644
--- a/cc/test/ordered_simple_task_runner_unittest.cc
+++ b/cc/test/ordered_simple_task_runner_unittest.cc
@@ -5,12 +5,18 @@
#include <string>
#include "base/cancelable_callback.h"
+#include "base/format_macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/stringprintf.h"
#include "base/test/test_pending_task.h"
#include "cc/test/ordered_simple_task_runner.h"
#include "testing/gtest/include/gtest/gtest.h"
+#define RUN_AND_CHECK_RESULT(expected_result) \
+ task_runner_->RunPendingTasks(); \
+ EXPECT_EQ(expected_result, executed_tasks_); \
+ executed_tasks_ = "";
+
namespace cc {
class OrderedSimpleTaskRunnerTest : public testing::Test {
@@ -21,6 +27,9 @@ class OrderedSimpleTaskRunnerTest : public testing::Test {
virtual ~OrderedSimpleTaskRunnerTest() {}
protected:
+ std::string executed_tasks_;
+ scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
+
void CreateAndPostTask(int task_num, base::TimeDelta delay) {
base::Closure test_task = base::Bind(&OrderedSimpleTaskRunnerTest::Task,
base::Unretained(this),
@@ -28,19 +37,15 @@ class OrderedSimpleTaskRunnerTest : public testing::Test {
task_runner_->PostDelayedTask(FROM_HERE, test_task, delay);
}
- void RunAndCheckResult(const std::string expected_result) {
- task_runner_->RunPendingTasks();
- EXPECT_EQ(expected_result, executed_tasks_);
- }
-
private:
- std::string executed_tasks_;
- scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
-
void Task(int task_num) {
if (!executed_tasks_.empty())
executed_tasks_ += " ";
- executed_tasks_ += base::StringPrintf("%d", task_num);
+ executed_tasks_ +=
+ base::StringPrintf("%d(%" PRId64 "ms)",
+ task_num,
+ task_runner_->Now().ToInternalValue() /
+ base::Time::kMicrosecondsPerMillisecond);
}
DISALLOW_COPY_AND_ASSIGN(OrderedSimpleTaskRunnerTest);
@@ -51,16 +56,33 @@ TEST_F(OrderedSimpleTaskRunnerTest, BasicOrderingTest) {
CreateAndPostTask(2, base::TimeDelta());
CreateAndPostTask(3, base::TimeDelta());
- RunAndCheckResult("1 2 3");
+ RUN_AND_CHECK_RESULT("1(0ms) 2(0ms) 3(0ms)");
+ RUN_AND_CHECK_RESULT("");
+}
+
+TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasksAutoNow) {
+ task_runner_->SetAdvanceNow(true);
+ CreateAndPostTask(1, base::TimeDelta());
+ CreateAndPostTask(2, base::TimeDelta::FromMilliseconds(15));
+ CreateAndPostTask(3, base::TimeDelta());
+ CreateAndPostTask(4, base::TimeDelta::FromMilliseconds(8));
+
+ RUN_AND_CHECK_RESULT("1(0ms) 3(0ms) 4(8ms) 2(15ms)");
+ RUN_AND_CHECK_RESULT("");
}
-TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasks) {
+TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasksManualNow) {
+ task_runner_->SetAdvanceNow(false);
CreateAndPostTask(1, base::TimeDelta());
CreateAndPostTask(2, base::TimeDelta::FromMilliseconds(15));
CreateAndPostTask(3, base::TimeDelta());
CreateAndPostTask(4, base::TimeDelta::FromMilliseconds(8));
- RunAndCheckResult("1 3 4 2");
+ RUN_AND_CHECK_RESULT("1(0ms) 3(0ms)");
+ RUN_AND_CHECK_RESULT("");
+ task_runner_->SetNow(base::TimeTicks::FromInternalValue(25000));
+ RUN_AND_CHECK_RESULT("4(25ms) 2(25ms)");
+ RUN_AND_CHECK_RESULT("");
}
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698