OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromeos/display/output_configurator.h" | 5 #include "chromeos/display/output_configurator.h" |
6 | 6 |
7 #include <cstdarg> | 7 #include <cstdarg> |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 }; | 201 }; |
202 | 202 |
203 class TestStateController : public OutputConfigurator::StateController { | 203 class TestStateController : public OutputConfigurator::StateController { |
204 public: | 204 public: |
205 TestStateController() : state_(STATE_DUAL_EXTENDED) {} | 205 TestStateController() : state_(STATE_DUAL_EXTENDED) {} |
206 virtual ~TestStateController() {} | 206 virtual ~TestStateController() {} |
207 | 207 |
208 void set_state(OutputState state) { state_ = state; } | 208 void set_state(OutputState state) { state_ = state; } |
209 | 209 |
210 // OutputConfigurator::StateController overrides: | 210 // OutputConfigurator::StateController overrides: |
211 virtual OutputState GetStateForOutputs( | 211 virtual OutputState GetStateForDisplayIds( |
212 const OutputSnapshotList& outputs) const OVERRIDE { return state_; } | 212 const std::vector<int64>& outputs) const OVERRIDE { return state_; } |
213 | 213 |
214 private: | 214 private: |
215 OutputState state_; | 215 OutputState state_; |
216 | 216 |
217 DISALLOW_COPY_AND_ASSIGN(TestStateController); | 217 DISALLOW_COPY_AND_ASSIGN(TestStateController); |
218 }; | 218 }; |
219 | 219 |
220 class OutputConfiguratorTest : public testing::Test { | 220 class OutputConfiguratorTest : public testing::Test { |
221 public: | 221 public: |
222 OutputConfiguratorTest() | 222 OutputConfiguratorTest() |
(...skipping 10 matching lines...) Expand all Loading... |
233 o->output = 1; | 233 o->output = 1; |
234 o->crtc = 10; | 234 o->crtc = 10; |
235 o->current_mode = kSmallModeId; | 235 o->current_mode = kSmallModeId; |
236 o->native_mode = kSmallModeId; | 236 o->native_mode = kSmallModeId; |
237 o->mirror_mode = kSmallModeId; | 237 o->mirror_mode = kSmallModeId; |
238 o->y = 0; | 238 o->y = 0; |
239 o->height = kSmallModeHeight; | 239 o->height = kSmallModeHeight; |
240 o->is_internal = true; | 240 o->is_internal = true; |
241 o->is_aspect_preserving_scaling = true; | 241 o->is_aspect_preserving_scaling = true; |
242 o->touch_device_id = 0; | 242 o->touch_device_id = 0; |
| 243 o->has_display_id = true; |
243 | 244 |
244 o = &outputs_[1]; | 245 o = &outputs_[1]; |
245 o->output = 2; | 246 o->output = 2; |
246 o->crtc = 11; | 247 o->crtc = 11; |
247 o->current_mode = kBigModeId; | 248 o->current_mode = kBigModeId; |
248 o->native_mode = kBigModeId; | 249 o->native_mode = kBigModeId; |
249 o->mirror_mode = kSmallModeId; | 250 o->mirror_mode = kSmallModeId; |
250 o->y = 0; | 251 o->y = 0; |
251 o->height = kBigModeHeight; | 252 o->height = kBigModeHeight; |
252 o->is_internal = false; | 253 o->is_internal = false; |
253 o->is_aspect_preserving_scaling = true; | 254 o->is_aspect_preserving_scaling = true; |
254 o->touch_device_id = 0; | 255 o->touch_device_id = 0; |
| 256 o->has_display_id = true; |
255 | 257 |
256 UpdateOutputs(2); | 258 UpdateOutputs(2); |
257 delegate_->AddMode(kSmallModeId, kSmallModeWidth, kSmallModeHeight, false); | 259 delegate_->AddMode(kSmallModeId, kSmallModeWidth, kSmallModeHeight, false); |
258 delegate_->AddMode(kBigModeId, kBigModeWidth, kBigModeHeight, false); | 260 delegate_->AddMode(kBigModeId, kBigModeWidth, kBigModeHeight, false); |
259 } | 261 } |
260 | 262 |
261 protected: | 263 protected: |
262 // Predefined modes that can be used by outputs. | 264 // Predefined modes that can be used by outputs. |
263 static const int kSmallModeId = 20; | 265 static const int kSmallModeId = 20; |
264 static const int kSmallModeWidth = 1366; | 266 static const int kSmallModeWidth = 1366; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 OutputConfigurator::TestApi test_api_; | 304 OutputConfigurator::TestApi test_api_; |
303 | 305 |
304 OutputConfigurator::OutputSnapshot outputs_[2]; | 306 OutputConfigurator::OutputSnapshot outputs_[2]; |
305 | 307 |
306 private: | 308 private: |
307 DISALLOW_COPY_AND_ASSIGN(OutputConfiguratorTest); | 309 DISALLOW_COPY_AND_ASSIGN(OutputConfiguratorTest); |
308 }; | 310 }; |
309 | 311 |
310 } // namespace | 312 } // namespace |
311 | 313 |
312 TEST_F(OutputConfiguratorTest, IsInternalOutputName) { | |
313 EXPECT_TRUE(OutputConfigurator::IsInternalOutputName("LVDS")); | |
314 EXPECT_TRUE(OutputConfigurator::IsInternalOutputName("eDP")); | |
315 EXPECT_TRUE(OutputConfigurator::IsInternalOutputName("LVDSxx")); | |
316 EXPECT_TRUE(OutputConfigurator::IsInternalOutputName("eDPzz")); | |
317 | |
318 EXPECT_FALSE(OutputConfigurator::IsInternalOutputName("xyz")); | |
319 EXPECT_FALSE(OutputConfigurator::IsInternalOutputName("abcLVDS")); | |
320 EXPECT_FALSE(OutputConfigurator::IsInternalOutputName("cdeeDP")); | |
321 EXPECT_FALSE(OutputConfigurator::IsInternalOutputName("LVD")); | |
322 EXPECT_FALSE(OutputConfigurator::IsInternalOutputName("eD")); | |
323 } | |
324 | |
325 TEST_F(OutputConfiguratorTest, ConnectSecondOutput) { | 314 TEST_F(OutputConfiguratorTest, ConnectSecondOutput) { |
326 InitWithSingleOutput(); | 315 InitWithSingleOutput(); |
327 | 316 |
328 // Connect a second output and check that the configurator enters | 317 // Connect a second output and check that the configurator enters |
329 // extended mode. | 318 // extended mode. |
330 UpdateOutputs(2); | 319 UpdateOutputs(2); |
331 const int kDualHeight = | 320 const int kDualHeight = |
332 kSmallModeHeight + OutputConfigurator::kVerticalGap + kBigModeHeight; | 321 kSmallModeHeight + OutputConfigurator::kVerticalGap + kBigModeHeight; |
333 state_controller_.set_state(STATE_DUAL_EXTENDED); | 322 state_controller_.set_state(STATE_DUAL_EXTENDED); |
334 EXPECT_TRUE(test_api_.SendOutputChangeEvents(true)); | 323 EXPECT_TRUE(test_api_.SendOutputChangeEvents(true)); |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
587 | 576 |
588 UpdateOutputs(2); | 577 UpdateOutputs(2); |
589 state_controller_.set_state(STATE_DUAL_EXTENDED); | 578 state_controller_.set_state(STATE_DUAL_EXTENDED); |
590 EXPECT_TRUE(test_api_.SendOutputChangeEvents(true)); | 579 EXPECT_TRUE(test_api_.SendOutputChangeEvents(true)); |
591 EXPECT_FALSE(configurator_.SetDisplayMode(STATE_HEADLESS)); | 580 EXPECT_FALSE(configurator_.SetDisplayMode(STATE_HEADLESS)); |
592 EXPECT_FALSE(configurator_.SetDisplayMode(STATE_SINGLE)); | 581 EXPECT_FALSE(configurator_.SetDisplayMode(STATE_SINGLE)); |
593 EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_MIRROR)); | 582 EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_MIRROR)); |
594 EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_EXTENDED)); | 583 EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_EXTENDED)); |
595 } | 584 } |
596 | 585 |
| 586 TEST_F(OutputConfiguratorTest, GetOutputStateForDisplays) { |
| 587 outputs_[0].has_display_id = false; |
| 588 UpdateOutputs(2); |
| 589 |
| 590 configurator_.Init(false, 0); |
| 591 configurator_.Start(); |
| 592 |
| 593 state_controller_.set_state(STATE_DUAL_MIRROR); |
| 594 test_api_.SendOutputChangeEvents(true); |
| 595 EXPECT_EQ(STATE_DUAL_EXTENDED, configurator_.output_state()); |
| 596 |
| 597 outputs_[0].has_display_id = true; |
| 598 UpdateOutputs(2); |
| 599 test_api_.SendOutputChangeEvents(true); |
| 600 EXPECT_EQ(STATE_DUAL_MIRROR, configurator_.output_state()); |
| 601 } |
| 602 |
597 } // namespace chromeos | 603 } // namespace chromeos |
OLD | NEW |