Index: ui/display/chromeos/update_display_configuration_task_unittest.cc |
diff --git a/ui/display/chromeos/update_display_configuration_task_unittest.cc b/ui/display/chromeos/update_display_configuration_task_unittest.cc |
index b2904c730f614792ea1d369d27a5f03d775dde96..0abb9f12620b0b7fd2430daf0419b106da01c95e 100644 |
--- a/ui/display/chromeos/update_display_configuration_task_unittest.cc |
+++ b/ui/display/chromeos/update_display_configuration_task_unittest.cc |
@@ -17,6 +17,22 @@ namespace test { |
namespace { |
+class TestSoftwareMirroringController |
+ : public DisplayConfigurator::SoftwareMirroringController { |
+ public: |
+ TestSoftwareMirroringController() : is_enabled_(false) {} |
+ ~TestSoftwareMirroringController() override {} |
+ |
+ // DisplayConfigurator::SoftwareMirroringController: |
+ void SetSoftwareMirroring(bool enabled) override { is_enabled_ = enabled; } |
+ bool SoftwareMirroringEnabled() const override { return is_enabled_; } |
+ |
+ private: |
+ bool is_enabled_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestSoftwareMirroringController); |
+}; |
+ |
class TestDisplayLayoutManager : public DisplayLayoutManager { |
public: |
TestDisplayLayoutManager() |
@@ -33,10 +49,16 @@ class TestDisplayLayoutManager : public DisplayLayoutManager { |
power_state_ = state; |
} |
+ void set_software_mirroring_controller( |
+ scoped_ptr<DisplayConfigurator::SoftwareMirroringController> |
+ software_mirroring_controller) { |
+ software_mirroring_controller_ = software_mirroring_controller.Pass(); |
+ } |
+ |
// DisplayConfigurator::DisplayLayoutManager: |
DisplayConfigurator::SoftwareMirroringController* |
GetSoftwareMirroringController() const override { |
- return nullptr; |
+ return software_mirroring_controller_.get(); |
} |
DisplayConfigurator::StateController* GetStateController() const override { |
@@ -109,6 +131,9 @@ class TestDisplayLayoutManager : public DisplayLayoutManager { |
chromeos::DisplayPowerState power_state_; |
+ scoped_ptr<DisplayConfigurator::SoftwareMirroringController> |
+ software_mirroring_controller_; |
+ |
DISALLOW_COPY_AND_ASSIGN(TestDisplayLayoutManager); |
}; |
@@ -371,5 +396,82 @@ TEST_F(UpdateDisplayConfigurationTaskTest, SingleChangePowerConfiguration) { |
log_.GetActionsAndClear()); |
} |
+TEST_F(UpdateDisplayConfigurationTaskTest, NoopSoftwareMirrorConfiguration) { |
+ layout_manager_.set_should_mirror(false); |
+ layout_manager_.set_software_mirroring_controller( |
+ make_scoped_ptr(new TestSoftwareMirroringController())); |
+ UpdateDisplays(2); |
+ |
+ { |
+ UpdateDisplayConfigurationTask task( |
+ &delegate_, &layout_manager_, MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, |
+ chromeos::DISPLAY_POWER_ALL_ON, 0, 0, false, |
+ base::Bind(&UpdateDisplayConfigurationTaskTest::ResponseCallback, |
+ base::Unretained(this))); |
+ task.Run(); |
+ } |
+ |
+ log_.GetActionsAndClear(); |
+ |
+ { |
+ UpdateDisplayConfigurationTask task( |
+ &delegate_, &layout_manager_, MULTIPLE_DISPLAY_STATE_DUAL_MIRROR, |
+ chromeos::DISPLAY_POWER_ALL_ON, 0, 0, false, |
+ base::Bind(&UpdateDisplayConfigurationTaskTest::ResponseCallback, |
+ base::Unretained(this))); |
+ task.Run(); |
+ } |
+ |
+ EXPECT_TRUE(configuration_status_); |
+ EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, display_state_); |
+ EXPECT_TRUE(layout_manager_.GetSoftwareMirroringController() |
+ ->SoftwareMirroringEnabled()); |
+ EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), log_.GetActionsAndClear()); |
+} |
+ |
+TEST_F(UpdateDisplayConfigurationTaskTest, |
+ ForceConfigurationWhileGoingToSoftwareMirror) { |
+ layout_manager_.set_should_mirror(false); |
+ layout_manager_.set_software_mirroring_controller( |
+ make_scoped_ptr(new TestSoftwareMirroringController())); |
+ UpdateDisplays(2); |
+ |
+ { |
+ UpdateDisplayConfigurationTask task( |
+ &delegate_, &layout_manager_, MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, |
+ chromeos::DISPLAY_POWER_ALL_ON, 0, 0, false, |
+ base::Bind(&UpdateDisplayConfigurationTaskTest::ResponseCallback, |
+ base::Unretained(this))); |
+ task.Run(); |
+ } |
+ |
+ log_.GetActionsAndClear(); |
+ |
+ { |
+ UpdateDisplayConfigurationTask task( |
+ &delegate_, &layout_manager_, MULTIPLE_DISPLAY_STATE_DUAL_MIRROR, |
+ chromeos::DISPLAY_POWER_ALL_ON, 0, 0, true /* force_configure */, |
+ base::Bind(&UpdateDisplayConfigurationTaskTest::ResponseCallback, |
+ base::Unretained(this))); |
+ task.Run(); |
+ } |
+ |
+ EXPECT_TRUE(configuration_status_); |
+ EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, display_state_); |
+ EXPECT_TRUE(layout_manager_.GetSoftwareMirroringController() |
+ ->SoftwareMirroringEnabled()); |
+ EXPECT_EQ( |
+ JoinActions( |
+ kGrab, GetFramebufferAction(gfx::Size(big_mode_.size().width(), |
+ small_mode_.size().height() + |
+ big_mode_.size().height()), |
+ &displays_[0], &displays_[1]).c_str(), |
+ GetCrtcAction(displays_[0], &small_mode_, gfx::Point()).c_str(), |
+ GetCrtcAction(displays_[1], &big_mode_, |
+ gfx::Point(0, small_mode_.size().height())).c_str(), |
+ kUngrab, NULL), |
+ log_.GetActionsAndClear()); |
+} |
+ |
} // namespace test |
} // namespace ui |