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

Side by Side Diff: resolution_selector_test.cc

Issue 6854002: Merge monitor_reconfigure into powerd. (Closed) Base URL: ssh://gitrw.chromium.org:9222/power_manager.git@master
Patch Set: Second version with nits. Created 9 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
Daniel Erat 2011/04/13 23:33:26 nit: 2011
marcheu 2011/04/14 02:23:55 Done.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <vector>
6
7 #include <gflags/gflags.h>
8 #include <gtest/gtest.h>
9
10 #include "base/command_line.h"
11 #include "base/logging.h"
12 #include "base/string_util.h"
13 #include "monitor_reconfig/resolution_selector.h"
14
15 DEFINE_bool(logtostderr, false,
16 "Print debugging messages to stderr (suppressed otherwise)");
17
18 namespace monitor_reconfig {
19
20 using std::string;
21 using std::vector;
22
23 class ResolutionSelectorTest : public ::testing::Test {
24 protected:
25 virtual void SetUp() {
26 lcd_resolution_ = new ResolutionSelector::Mode;
27 external_resolution_ = new ResolutionSelector::Mode;
28 screen_resolution_ = new ResolutionSelector::Mode;
29 }
30
31 // Add a mode to |lcd_modes_|.
32 void AddLcdMode(int width, int height, int id) {
33 lcd_modes_.push_back(
34 ResolutionSelector::Mode(
35 width, height, StringPrintf("%dx%d", width, height), id));
36 }
37
38 // Add a mode to |external_modes_|.
39 void AddExternalMode(int width, int height, int id) {
40 external_modes_.push_back(
41 ResolutionSelector::Mode(
42 width, height, StringPrintf("%dx%d", width, height), id));
43 }
44
45 // Ask |selector_| for the best resolutions and store them in
46 // |lcd_resolution_|, |external_resolution_|, and |screen_resolution_|.
47 // The return value from |FindBestResolutions()| is returned.
48 bool GetResolutions() {
49 return selector_.FindBestResolutions(lcd_modes_,
50 external_modes_,
51 lcd_resolution_,
52 external_resolution_,
53 screen_resolution_);
54 }
55
56 ResolutionSelector selector_;
57
58 vector<ResolutionSelector::Mode> lcd_modes_;
59 vector<ResolutionSelector::Mode> external_modes_;
60
61 ResolutionSelector::Mode* lcd_resolution_;
62 ResolutionSelector::Mode* external_resolution_;
63 ResolutionSelector::Mode* screen_resolution_;
64 };
65
66 // We should use the LCD's max resolution when there's no external output
67 // connected.
68 TEST_F(ResolutionSelectorTest, NoExternalOutput) {
69 AddLcdMode(1024, 768, 50);
70 AddLcdMode(800, 600, 51);
71 ASSERT_TRUE(GetResolutions());
72 EXPECT_EQ("1024x768", lcd_resolution_->name);
73 EXPECT_EQ("", external_resolution_->name);
74 EXPECT_EQ("1024x768", screen_resolution_->name);
75 }
76
77 // When both outputs have the same max resolution, we should use it.
78 TEST_F(ResolutionSelectorTest, MatchingTopResolutions) {
79 AddLcdMode(1024, 768, 50);
80 AddLcdMode(800, 600, 51);
81 AddExternalMode(1024, 768, 60);
82 AddExternalMode(800, 600, 61);
83 ASSERT_TRUE(GetResolutions());
84 EXPECT_EQ("1024x768", lcd_resolution_->name);
85 EXPECT_EQ("1024x768", external_resolution_->name);
86 EXPECT_EQ("1024x768", screen_resolution_->name);
87 }
88
89 // We should use the highest shared resolution when the LCD has the higher
90 // max resolution.
91 TEST_F(ResolutionSelectorTest, LcdHasHigherResolution) {
92 AddLcdMode(1024, 768, 50);
93 AddLcdMode(800, 600, 51);
94 AddLcdMode(640, 480, 52);
95 AddExternalMode(800, 600, 60);
96 AddExternalMode(640, 480, 61);
97 ASSERT_TRUE(GetResolutions());
98 EXPECT_EQ("800x600", lcd_resolution_->name);
99 EXPECT_EQ("800x600", external_resolution_->name);
100 EXPECT_EQ("800x600", screen_resolution_->name);
101 }
102
103 // We should use the highest shared resolution when the external output has
104 // the higher max resolution.
105 TEST_F(ResolutionSelectorTest, ExternalHasHigherResolution) {
106 AddLcdMode(800, 600, 50);
107 AddLcdMode(640, 480, 51);
108 AddExternalMode(1024, 768, 60);
109 AddExternalMode(800, 600, 61);
110 AddExternalMode(640, 480, 62);
111 ASSERT_TRUE(GetResolutions());
112 EXPECT_EQ("800x600", lcd_resolution_->name);
113 EXPECT_EQ("800x600", external_resolution_->name);
114 EXPECT_EQ("800x600", screen_resolution_->name);
115 }
116
117 // When the maximum resolution offered by the two outputs is different, we
118 // should use the max resolution from the lower-res output.
119 TEST_F(ResolutionSelectorTest, MismatchedMaxResolution) {
120 AddLcdMode(1024, 600, 50);
121 AddLcdMode(800, 600, 51);
122 AddExternalMode(1280, 720, 60);
123 AddExternalMode(1024, 768, 61);
124 AddExternalMode(800, 600, 62);
125 ASSERT_TRUE(GetResolutions());
126 EXPECT_EQ("1024x600", lcd_resolution_->name);
127 EXPECT_EQ("1024x768", external_resolution_->name);
128 EXPECT_EQ("1024x600", screen_resolution_->name);
129 }
130
131 // When the external output is large enough that we think it's a monitor,
132 // we should just use its maximum resolution instead of trying to find a
133 // size that'll also work for the LCD output.
134 TEST_F(ResolutionSelectorTest, ExternalOutputIsMonitor) {
135 AddLcdMode(1024, 768, 50);
136 AddLcdMode(800, 600, 51);
137 AddExternalMode(1600, 1200, 60);
138 AddExternalMode(1280, 960, 61);
139 AddExternalMode(1024, 768, 62);
140 ASSERT_GE(external_modes_[0].width * external_modes_[0].height,
141 ResolutionSelector::kMaxProjectorPixels);
142 ASSERT_TRUE(GetResolutions());
143 EXPECT_EQ("", lcd_resolution_->name);
144 EXPECT_EQ("1600x1200", external_resolution_->name);
145 EXPECT_EQ("1600x1200", screen_resolution_->name);
146 }
147
148 // We should just fail if there's no common resolution between the two
149 // outputs.
150 TEST_F(ResolutionSelectorTest, FailIfNoCommonResolution) {
151 AddLcdMode(1024, 768, 50);
152 AddExternalMode(1280, 600, 60);
153 EXPECT_FALSE(GetResolutions());
154 }
155
156 } // namespace monitor_reconfig
157
158 int main(int argc, char** argv) {
159 google::ParseCommandLineFlags(&argc, &argv, true);
160 CommandLine::Init(argc, argv);
161 logging::InitLogging(NULL,
162 FLAGS_logtostderr ?
163 logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG :
164 logging::LOG_NONE,
165 logging::DONT_LOCK_LOG_FILE,
166 logging::APPEND_TO_OLD_LOG_FILE);
167 ::testing::InitGoogleTest(&argc, argv);
168 return RUN_ALL_TESTS();
169 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698