Chromium Code Reviews| Index: components/scheduler/renderer/user_model_unittest.cc |
| diff --git a/components/scheduler/renderer/user_model_unittest.cc b/components/scheduler/renderer/user_model_unittest.cc |
| index ebf3ff345c7bbbc282029049de09f4e450d548be..de690e2bf353907b59ec96855a3f0b641c591785 100644 |
| --- a/components/scheduler/renderer/user_model_unittest.cc |
| +++ b/components/scheduler/renderer/user_model_unittest.cc |
| @@ -4,7 +4,11 @@ |
| #include "components/scheduler/renderer/user_model.h" |
| +#include "base/metrics/field_trial.h" |
| +#include "base/metrics/user_metrics.h" |
| +#include "base/metrics/user_metrics_action.h" |
| #include "base/test/simple_test_tick_clock.h" |
| +#include "base/test/test_simple_task_runner.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -12,14 +16,22 @@ namespace scheduler { |
| class UserModelTest : public testing::Test { |
| public: |
| - UserModelTest() {} |
| - ~UserModelTest() override {} |
| + UserModelTest() : mock_task_runner_(new base::TestSimpleTaskRunner()) {} |
| + ~UserModelTest() override { base::RemoveActionCallback(action_callback_); } |
| void SetUp() override { |
| clock_.reset(new base::SimpleTestTickClock()); |
| clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); |
| - user_model_.reset(new UserModel()); |
| + user_model_.reset(new UserModel(mock_task_runner_)); |
| + |
| + // Register a mock user action callback for testing. |
| + numActionsRecorded_ = 0; |
| + lastActionRecorded_ = ""; |
| + base::RemoveActionCallback(action_callback_); |
| + action_callback_ = base::Bind(&UserModelTest::RecordComputedAction, |
| + base::Unretained(this)); |
| + base::AddActionCallback(action_callback_); |
| } |
| protected: |
| @@ -33,8 +45,19 @@ class UserModelTest : public testing::Test { |
| UserModel::kExpectSubsequentGestureMillis); |
| } |
| + void RecordComputedAction(const std::string& action) { |
| + numActionsRecorded_++; |
| + lastActionRecorded_ = action; |
| + } |
| + |
| scoped_ptr<base::SimpleTestTickClock> clock_; |
| scoped_ptr<UserModel> user_model_; |
| + scoped_refptr<base::TestSimpleTaskRunner> mock_task_runner_; |
| + base::ActionCallback action_callback_; |
| + |
| + // Tracks user actions that were recorded. |
| + int numActionsRecorded_; |
| + std::string lastActionRecorded_; |
|
Alexei Svitkine (slow)
2016/03/17 21:38:46
hacker_style, please.
beaudoin
2016/03/18 16:08:36
Done.
|
| }; |
| TEST_F(UserModelTest, TimeLeftInUserGesture_NoInput) { |
| @@ -237,18 +260,35 @@ TEST_F(UserModelTest, IsGestureExpectedToContinue_ShortlyAfterGestureStarted) { |
| prediction_valid_duration); |
| } |
| -TEST_F(UserModelTest, IsGestureExpectedToContinue_LongAfterGestureStarted) { |
| +TEST_F(UserModelTest, AreActionsLogged) { |
| + // Add the action logging feature. |
| + base::FeatureList::ClearInstanceForTesting(); |
| + scoped_ptr<base::FeatureList> feature_list(new base::FeatureList); |
| + feature_list->InitializeFromCommandLine(features::kRecordGestureAction.name, |
| + ""); |
| + base::FeatureList::SetInstance(std::move(feature_list)); |
| + |
| + // Reset user model so it uses the new feature list. |
| + user_model_.reset(new UserModel(mock_task_runner_)); |
| + |
| + EXPECT_EQ(0, numActionsRecorded_); |
| + |
| user_model_->DidStartProcessingInputEvent( |
| blink::WebInputEvent::Type::GestureScrollBegin, clock_->NowTicks()); |
| + mock_task_runner_->RunPendingTasks(); |
| - base::TimeDelta delta(base::TimeDelta::FromMilliseconds( |
| - UserModel::kMedianGestureDurationMillis * 2)); |
| + EXPECT_EQ(1, numActionsRecorded_); |
| + EXPECT_EQ("RendererScheduler.UserModel.GestureStart", lastActionRecorded_); |
| + |
| + base::TimeDelta delta(base::TimeDelta::FromMilliseconds(500)); |
| clock_->Advance(delta); |
| - base::TimeDelta prediction_valid_duration; |
| - EXPECT_FALSE(user_model_->IsGestureExpectedToContinue( |
| - clock_->NowTicks(), &prediction_valid_duration)); |
| - EXPECT_EQ(base::TimeDelta(), prediction_valid_duration); |
| + user_model_->DidStartProcessingInputEvent( |
| + blink::WebInputEvent::Type::GestureScrollEnd, clock_->NowTicks()); |
| + mock_task_runner_->RunPendingTasks(); |
| + |
| + EXPECT_EQ(2, numActionsRecorded_); |
| + EXPECT_EQ("RendererScheduler.UserModel.GestureEnd", lastActionRecorded_); |
| } |
| } // namespace scheduler |