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

Side by Side Diff: chrome/browser/browser_theme_provider_unittest.cc

Issue 499004: Try 2: Completely redo how themes are stored on disk and processed at install time. (Closed)
Patch Set: Created 11 years 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "chrome/browser/browser_theme_provider.h" 5 #include "chrome/browser/browser_theme_provider.h"
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 10
11 class BrowserThemeProviderTest : public ::testing::Test { 11 TEST(BrowserThemeProviderTest, AlignmentConversion) {
12 public:
13 // Transformation for link underline colors.
14 SkColor BuildThirdOpacity(SkColor color_link) {
15 return SkColorSetA(color_link, SkColorGetA(color_link) / 3);
16 }
17
18 // Returns a mapping from each COLOR_* constant to the default value for this
19 // constant. Callers get this map, and then modify expected values and then
20 // run the resulting thing through VerifyColorMap().
21 std::map<int, SkColor> GetDefaultColorMap() {
22 std::map<int, SkColor> colors;
23 colors[BrowserThemeProvider::COLOR_FRAME] =
24 BrowserThemeProvider::kDefaultColorFrame;
25 colors[BrowserThemeProvider::COLOR_FRAME_INACTIVE] =
26 BrowserThemeProvider::kDefaultColorFrameInactive;
27 colors[BrowserThemeProvider::COLOR_FRAME_INCOGNITO] =
28 BrowserThemeProvider::kDefaultColorFrameIncognito;
29 colors[BrowserThemeProvider::COLOR_FRAME_INCOGNITO_INACTIVE] =
30 BrowserThemeProvider::kDefaultColorFrameIncognitoInactive;
31 colors[BrowserThemeProvider::COLOR_TOOLBAR] =
32 BrowserThemeProvider::kDefaultColorToolbar;
33 colors[BrowserThemeProvider::COLOR_TAB_TEXT] =
34 BrowserThemeProvider::kDefaultColorTabText;
35 colors[BrowserThemeProvider::COLOR_BACKGROUND_TAB_TEXT] =
36 BrowserThemeProvider::kDefaultColorBackgroundTabText;
37 colors[BrowserThemeProvider::COLOR_BOOKMARK_TEXT] =
38 BrowserThemeProvider::kDefaultColorBookmarkText;
39 colors[BrowserThemeProvider::COLOR_NTP_BACKGROUND] =
40 BrowserThemeProvider::kDefaultColorNTPBackground;
41 colors[BrowserThemeProvider::COLOR_NTP_TEXT] =
42 BrowserThemeProvider::kDefaultColorNTPText;
43 colors[BrowserThemeProvider::COLOR_NTP_LINK] =
44 BrowserThemeProvider::kDefaultColorNTPLink;
45 colors[BrowserThemeProvider::COLOR_NTP_LINK_UNDERLINE] =
46 BuildThirdOpacity(BrowserThemeProvider::kDefaultColorNTPLink);
47 colors[BrowserThemeProvider::COLOR_NTP_HEADER] =
48 BrowserThemeProvider::kDefaultColorNTPHeader;
49 colors[BrowserThemeProvider::COLOR_NTP_SECTION] =
50 BrowserThemeProvider::kDefaultColorNTPSection;
51 colors[BrowserThemeProvider::COLOR_NTP_SECTION_TEXT] =
52 BrowserThemeProvider::kDefaultColorNTPSectionText;
53 colors[BrowserThemeProvider::COLOR_NTP_SECTION_LINK] =
54 BrowserThemeProvider::kDefaultColorNTPSectionLink;
55 colors[BrowserThemeProvider::COLOR_NTP_SECTION_LINK_UNDERLINE] =
56 BuildThirdOpacity(BrowserThemeProvider::kDefaultColorNTPSectionLink);
57 colors[BrowserThemeProvider::COLOR_CONTROL_BACKGROUND] =
58 BrowserThemeProvider::kDefaultColorControlBackground;
59 colors[BrowserThemeProvider::COLOR_BUTTON_BACKGROUND] =
60 BrowserThemeProvider::kDefaultColorButtonBackground;
61
62 return colors;
63 }
64
65 void VerifyColorMap(const std::map<int, SkColor>& color_map) {
66 for (std::map<int, SkColor>::const_iterator it = color_map.begin();
67 it != color_map.end(); ++it) {
68 EXPECT_EQ(it->second, provider_.GetColor(it->first));
69 }
70 }
71
72 void LoadColorJSON(const std::string& json) {
73 scoped_ptr<Value> value(base::JSONReader::Read(json, false));
74 ASSERT_TRUE(value->IsType(Value::TYPE_DICTIONARY));
75 provider_.SetColorData(static_cast<DictionaryValue*>(value.get()));
76 }
77
78 void LoadTintJSON(const std::string& json) {
79 scoped_ptr<Value> value(base::JSONReader::Read(json, false));
80 ASSERT_TRUE(value->IsType(Value::TYPE_DICTIONARY));
81 provider_.SetTintData(static_cast<DictionaryValue*>(value.get()));
82 }
83
84 void GenerateFrameColors() {
85 provider_.GenerateFrameColors();
86 }
87
88 BrowserThemeProvider provider_;
89 };
90
91 TEST_F(BrowserThemeProviderTest, AlignmentConversion) {
92 // Verify that we get out what we put in. 12 // Verify that we get out what we put in.
93 std::string top_left = "top left"; 13 std::string top_left = "top left";
94 int alignment = BrowserThemeProvider::StringToAlignment(top_left); 14 int alignment = BrowserThemeProvider::StringToAlignment(top_left);
95 EXPECT_EQ(BrowserThemeProvider::ALIGN_TOP | BrowserThemeProvider::ALIGN_LEFT, 15 EXPECT_EQ(BrowserThemeProvider::ALIGN_TOP | BrowserThemeProvider::ALIGN_LEFT,
96 alignment); 16 alignment);
97 EXPECT_EQ(top_left, BrowserThemeProvider::AlignmentToString(alignment)); 17 EXPECT_EQ(top_left, BrowserThemeProvider::AlignmentToString(alignment));
98 18
99 alignment = BrowserThemeProvider::StringToAlignment("top"); 19 alignment = BrowserThemeProvider::StringToAlignment("top");
100 EXPECT_EQ(BrowserThemeProvider::ALIGN_TOP, alignment); 20 EXPECT_EQ(BrowserThemeProvider::ALIGN_TOP, alignment);
101 EXPECT_EQ("top", BrowserThemeProvider::AlignmentToString(alignment)); 21 EXPECT_EQ("top", BrowserThemeProvider::AlignmentToString(alignment));
102 22
103 alignment = BrowserThemeProvider::StringToAlignment("left"); 23 alignment = BrowserThemeProvider::StringToAlignment("left");
104 EXPECT_EQ(BrowserThemeProvider::ALIGN_LEFT, alignment); 24 EXPECT_EQ(BrowserThemeProvider::ALIGN_LEFT, alignment);
105 EXPECT_EQ("left", BrowserThemeProvider::AlignmentToString(alignment)); 25 EXPECT_EQ("left", BrowserThemeProvider::AlignmentToString(alignment));
106 26
107 alignment = BrowserThemeProvider::StringToAlignment("right"); 27 alignment = BrowserThemeProvider::StringToAlignment("right");
108 EXPECT_EQ(BrowserThemeProvider::ALIGN_RIGHT, alignment); 28 EXPECT_EQ(BrowserThemeProvider::ALIGN_RIGHT, alignment);
109 EXPECT_EQ("right", BrowserThemeProvider::AlignmentToString(alignment)); 29 EXPECT_EQ("right", BrowserThemeProvider::AlignmentToString(alignment));
110 30
111 alignment = BrowserThemeProvider::StringToAlignment("righttopbottom"); 31 alignment = BrowserThemeProvider::StringToAlignment("righttopbottom");
112 EXPECT_EQ(BrowserThemeProvider::ALIGN_CENTER, alignment); 32 EXPECT_EQ(BrowserThemeProvider::ALIGN_CENTER, alignment);
113 EXPECT_EQ("", BrowserThemeProvider::AlignmentToString(alignment)); 33 EXPECT_EQ("", BrowserThemeProvider::AlignmentToString(alignment));
114 } 34 }
115 35
116 TEST_F(BrowserThemeProviderTest, AlignmentConversionInput) { 36 TEST(BrowserThemeProviderTest, AlignmentConversionInput) {
117 // Verify that we output in an expected format. 37 // Verify that we output in an expected format.
118 int alignment = BrowserThemeProvider::StringToAlignment("right bottom"); 38 int alignment = BrowserThemeProvider::StringToAlignment("right bottom");
119 EXPECT_EQ("bottom right", BrowserThemeProvider::AlignmentToString(alignment)); 39 EXPECT_EQ("bottom right", BrowserThemeProvider::AlignmentToString(alignment));
120 40
121 // Verify that bad strings don't cause explosions. 41 // Verify that bad strings don't cause explosions.
122 alignment = BrowserThemeProvider::StringToAlignment("new zealand"); 42 alignment = BrowserThemeProvider::StringToAlignment("new zealand");
123 EXPECT_EQ("", BrowserThemeProvider::AlignmentToString(alignment)); 43 EXPECT_EQ("", BrowserThemeProvider::AlignmentToString(alignment));
124 44
125 // Verify that bad strings don't cause explosions. 45 // Verify that bad strings don't cause explosions.
126 alignment = BrowserThemeProvider::StringToAlignment("new zealand top"); 46 alignment = BrowserThemeProvider::StringToAlignment("new zealand top");
127 EXPECT_EQ("top", BrowserThemeProvider::AlignmentToString(alignment)); 47 EXPECT_EQ("top", BrowserThemeProvider::AlignmentToString(alignment));
128 48
129 // Verify that bad strings don't cause explosions. 49 // Verify that bad strings don't cause explosions.
130 alignment = BrowserThemeProvider::StringToAlignment("new zealandtop"); 50 alignment = BrowserThemeProvider::StringToAlignment("new zealandtop");
131 EXPECT_EQ("", BrowserThemeProvider::AlignmentToString(alignment)); 51 EXPECT_EQ("", BrowserThemeProvider::AlignmentToString(alignment));
132 } 52 }
133
134 TEST_F(BrowserThemeProviderTest, ColorSanityCheck) {
135 // Make sure that BrowserThemeProvider returns all the default colors if it
136 // isn't provided any color overrides.
137 std::map<int, SkColor> colors = GetDefaultColorMap();
138 VerifyColorMap(colors);
139 }
140
141 TEST_F(BrowserThemeProviderTest, DeriveUnderlineLinkColor) {
142 // If we specify a link color, but don't specify the underline color, the
143 // theme provider should create one.
144 std::string color_json = "{ \"ntp_link\": [128, 128, 128, 1],"
145 " \"ntp_section_link\": [128, 128, 128, 1] }";
146 LoadColorJSON(color_json);
147
148 std::map<int, SkColor> colors = GetDefaultColorMap();
149 SkColor link_color = SkColorSetARGB(255, 128, 128, 128);
150 colors[BrowserThemeProvider::COLOR_NTP_LINK] = link_color;
151 colors[BrowserThemeProvider::COLOR_NTP_LINK_UNDERLINE] =
152 BuildThirdOpacity(link_color);
153 colors[BrowserThemeProvider::COLOR_NTP_SECTION_LINK] = link_color;
154 colors[BrowserThemeProvider::COLOR_NTP_SECTION_LINK_UNDERLINE] =
155 BuildThirdOpacity(link_color);
156
157 VerifyColorMap(colors);
158 }
159
160 TEST_F(BrowserThemeProviderTest, ProvideUnderlineLinkColor) {
161 // If we specify the underline color, it shouldn't try to generate one.x
162 std::string color_json = "{ \"ntp_link\": [128, 128, 128],"
163 " \"ntp_link_underline\": [255, 255, 255],"
164 " \"ntp_section_link\": [128, 128, 128],"
165 " \"ntp_section_link_underline\": [255, 255, 255]"
166 "}";
167 LoadColorJSON(color_json);
168
169 std::map<int, SkColor> colors = GetDefaultColorMap();
170 SkColor link_color = SkColorSetRGB(128, 128, 128);
171 SkColor underline_color = SkColorSetRGB(255, 255, 255);
172 colors[BrowserThemeProvider::COLOR_NTP_LINK] = link_color;
173 colors[BrowserThemeProvider::COLOR_NTP_LINK_UNDERLINE] = underline_color;
174 colors[BrowserThemeProvider::COLOR_NTP_SECTION_LINK] = link_color;
175 colors[BrowserThemeProvider::COLOR_NTP_SECTION_LINK_UNDERLINE] =
176 underline_color;
177
178 VerifyColorMap(colors);
179 }
180
181 TEST_F(BrowserThemeProviderTest, UseSectionColorAsNTPHeader) {
182 std::string color_json = "{ \"ntp_section\": [190, 190, 190] }";
183 LoadColorJSON(color_json);
184
185 std::map<int, SkColor> colors = GetDefaultColorMap();
186 SkColor ntp_color = SkColorSetRGB(190, 190, 190);
187 colors[BrowserThemeProvider::COLOR_NTP_HEADER] = ntp_color;
188 colors[BrowserThemeProvider::COLOR_NTP_SECTION] = ntp_color;
189 VerifyColorMap(colors);
190 }
191
192 TEST_F(BrowserThemeProviderTest, ProvideNtpHeaderColor) {
193 std::string color_json = "{ \"ntp_header\": [120, 120, 120], "
194 " \"ntp_section\": [190, 190, 190] }";
195 LoadColorJSON(color_json);
196
197 std::map<int, SkColor> colors = GetDefaultColorMap();
198 SkColor ntp_header = SkColorSetRGB(120, 120, 120);
199 SkColor ntp_section = SkColorSetRGB(190, 190, 190);
200 colors[BrowserThemeProvider::COLOR_NTP_HEADER] = ntp_header;
201 colors[BrowserThemeProvider::COLOR_NTP_SECTION] = ntp_section;
202 VerifyColorMap(colors);
203 }
204
205 TEST_F(BrowserThemeProviderTest, DefaultTintingDefaultColors) {
206 // Default tints for buttons and frames...are no tints! So make sure that
207 // when we try to generate frame colors, we end up with the same.
208 GenerateFrameColors();
209
210 std::map<int, SkColor> colors = GetDefaultColorMap();
211 colors[BrowserThemeProvider::COLOR_FRAME] =
212 HSLShift(BrowserThemeProvider::kDefaultColorFrame,
213 BrowserThemeProvider::kDefaultTintFrame);
214 colors[BrowserThemeProvider::COLOR_FRAME_INACTIVE] =
215 HSLShift(BrowserThemeProvider::kDefaultColorFrame,
216 BrowserThemeProvider::kDefaultTintFrameInactive);
217 colors[BrowserThemeProvider::COLOR_FRAME_INCOGNITO] =
218 HSLShift(BrowserThemeProvider::kDefaultColorFrame,
219 BrowserThemeProvider::kDefaultTintFrameIncognito);
220 colors[BrowserThemeProvider::COLOR_FRAME_INCOGNITO_INACTIVE] =
221 HSLShift(BrowserThemeProvider::kDefaultColorFrame,
222 BrowserThemeProvider::kDefaultTintFrameIncognitoInactive);
223 VerifyColorMap(colors);
224 }
225
226 // TODO(erg): Test more tinting combinations. For example, with non-default
227 // colors or when providing tints.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698