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

Side by Side Diff: ui/views/border_unittest.cc

Issue 2694933002: Fix appearance of task manager border at fractional scale factors. (Closed)
Patch Set: more self documenting? Created 3 years, 10 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
« no previous file with comments | « ui/views/border.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "ui/views/border.h" 5 #include "ui/views/border.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 return std::vector<DrawRectCall>(draw_rect_calls_.begin(), 65 return std::vector<DrawRectCall>(draw_rect_calls_.begin(),
66 draw_rect_calls_.end()); 66 draw_rect_calls_.end());
67 } 67 }
68 68
69 // Return calls in sorted order. 69 // Return calls in sorted order.
70 std::vector<DrawRRectCall> draw_rrect_calls() { 70 std::vector<DrawRRectCall> draw_rrect_calls() {
71 return std::vector<DrawRRectCall>(draw_rrect_calls_.begin(), 71 return std::vector<DrawRRectCall>(draw_rrect_calls_.begin(),
72 draw_rrect_calls_.end()); 72 draw_rrect_calls_.end());
73 } 73 }
74 74
75 int draw_paint_call_count() const { return draw_paint_call_count_; }
76
77 const SkRect& last_clip_bounds() const { return last_clip_bounds_; }
78
75 // SkCanvas overrides: 79 // SkCanvas overrides:
76 void onDrawRect(const SkRect& rect, const SkPaint& paint) override { 80 void onDrawRect(const SkRect& rect, const SkPaint& paint) override {
77 draw_rect_calls_.insert(DrawRectCall(rect, paint)); 81 draw_rect_calls_.insert(DrawRectCall(rect, paint));
78 } 82 }
79 83
80 void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override { 84 void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override {
81 draw_rrect_calls_.insert(DrawRRectCall(rrect, paint)); 85 draw_rrect_calls_.insert(DrawRRectCall(rrect, paint));
82 } 86 }
83 87
88 void onDrawPaint(const SkPaint& paint) override { ++draw_paint_call_count_; }
Matt Giuca 2017/02/21 23:18:51 Can we record the SkPaint object into a set like d
Evan Stade 2017/02/22 01:34:55 done
89
90 void onClipRect(const SkRect& rect,
91 SkClipOp op,
92 ClipEdgeStyle edge_style) override {
93 last_clip_bounds_ = rect;
94 }
95
84 private: 96 private:
85 // Stores all the calls for querying by the test, in sorted order. 97 // Stores all the calls for querying by the test, in sorted order.
86 std::set<DrawRectCall> draw_rect_calls_; 98 std::set<DrawRectCall> draw_rect_calls_;
87 std::set<DrawRRectCall> draw_rrect_calls_; 99 std::set<DrawRRectCall> draw_rrect_calls_;
100 int draw_paint_call_count_ = 0;
101 SkRect last_clip_bounds_;
88 102
89 DISALLOW_COPY_AND_ASSIGN(MockCanvas); 103 DISALLOW_COPY_AND_ASSIGN(MockCanvas);
90 }; 104 };
91 105
92 // Simple Painter that will be used to test BorderPainter. 106 // Simple Painter that will be used to test BorderPainter.
93 class MockPainter : public views::Painter { 107 class MockPainter : public views::Painter {
94 public: 108 public:
95 MockPainter() {} 109 MockPainter() {}
96 110
97 // Gets the canvas given to the last call to Paint(). 111 // Gets the canvas given to the last call to Paint().
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 std::unique_ptr<Border> border(NullBorder()); 167 std::unique_ptr<Border> border(NullBorder());
154 EXPECT_FALSE(border); 168 EXPECT_FALSE(border);
155 } 169 }
156 170
157 TEST_F(BorderTest, SolidBorder) { 171 TEST_F(BorderTest, SolidBorder) {
158 std::unique_ptr<Border> border(CreateSolidBorder(3, SK_ColorBLUE)); 172 std::unique_ptr<Border> border(CreateSolidBorder(3, SK_ColorBLUE));
159 EXPECT_EQ(gfx::Size(6, 6), border->GetMinimumSize()); 173 EXPECT_EQ(gfx::Size(6, 6), border->GetMinimumSize());
160 EXPECT_EQ(gfx::Insets(3, 3, 3, 3), border->GetInsets()); 174 EXPECT_EQ(gfx::Insets(3, 3, 3, 3), border->GetInsets());
161 border->Paint(*view_, canvas_.get()); 175 border->Paint(*view_, canvas_.get());
162 176
163 std::vector<MockCanvas::DrawRectCall> draw_rect_calls = 177 gfx::Rect bounds = view_->GetLocalBounds();
164 sk_canvas_->draw_rect_calls(); 178 bounds.Inset(border->GetInsets());
165 ASSERT_EQ(4u, draw_rect_calls.size());
166 EXPECT_EQ(SkRect::MakeLTRB(0, 0, 100, 3), draw_rect_calls[0].rect);
167 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[0].paint.getColor());
168 EXPECT_EQ(SkRect::MakeLTRB(0, 3, 3, 47), draw_rect_calls[1].rect);
169 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[1].paint.getColor());
170 EXPECT_EQ(SkRect::MakeLTRB(0, 47, 100, 50), draw_rect_calls[2].rect);
171 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[2].paint.getColor());
172 EXPECT_EQ(SkRect::MakeLTRB(97, 3, 100, 47), draw_rect_calls[3].rect);
173 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[3].paint.getColor());
174 179
175 EXPECT_TRUE(sk_canvas_->draw_rrect_calls().empty()); 180 EXPECT_EQ(1, sk_canvas_->draw_paint_call_count());
Matt Giuca 2017/02/21 23:18:51 Expect that the size of the draw_paint_calls set i
Evan Stade 2017/02/22 01:34:55 Done.
181 EXPECT_EQ(gfx::RectF(bounds),
182 gfx::SkRectToRectF(sk_canvas_->last_clip_bounds()));
176 } 183 }
177 184
178 TEST_F(BorderTest, RoundedRectBorder) { 185 TEST_F(BorderTest, RoundedRectBorder) {
179 std::unique_ptr<Border> border(CreateRoundedRectBorder(3, 4, SK_ColorBLUE)); 186 std::unique_ptr<Border> border(CreateRoundedRectBorder(3, 4, SK_ColorBLUE));
180 EXPECT_EQ(gfx::Size(6, 6), border->GetMinimumSize()); 187 EXPECT_EQ(gfx::Size(6, 6), border->GetMinimumSize());
181 EXPECT_EQ(gfx::Insets(3, 3, 3, 3), border->GetInsets()); 188 EXPECT_EQ(gfx::Insets(3, 3, 3, 3), border->GetInsets());
182 border->Paint(*view_, canvas_.get()); 189 border->Paint(*view_, canvas_.get());
183 190
184 SkRRect expected_rrect; 191 SkRRect expected_rrect;
185 expected_rrect.setRectXY(SkRect::MakeLTRB(1.5, 1.5, 98.5, 48.5), 4, 4); 192 expected_rrect.setRectXY(SkRect::MakeLTRB(1.5, 1.5, 98.5, 48.5), 4, 4);
(...skipping 26 matching lines...) Expand all
212 TEST_F(BorderTest, SolidSidedBorder) { 219 TEST_F(BorderTest, SolidSidedBorder) {
213 const gfx::Insets kInsets(1, 2, 3, 4); 220 const gfx::Insets kInsets(1, 2, 3, 4);
214 221
215 std::unique_ptr<Border> border( 222 std::unique_ptr<Border> border(
216 CreateSolidSidedBorder(kInsets.top(), kInsets.left(), kInsets.bottom(), 223 CreateSolidSidedBorder(kInsets.top(), kInsets.left(), kInsets.bottom(),
217 kInsets.right(), SK_ColorBLUE)); 224 kInsets.right(), SK_ColorBLUE));
218 EXPECT_EQ(gfx::Size(6, 4), border->GetMinimumSize()); 225 EXPECT_EQ(gfx::Size(6, 4), border->GetMinimumSize());
219 EXPECT_EQ(kInsets, border->GetInsets()); 226 EXPECT_EQ(kInsets, border->GetInsets());
220 border->Paint(*view_, canvas_.get()); 227 border->Paint(*view_, canvas_.get());
221 228
222 std::vector<MockCanvas::DrawRectCall> draw_rect_calls = 229 gfx::Rect bounds = view_->GetLocalBounds();
223 sk_canvas_->draw_rect_calls(); 230 bounds.Inset(border->GetInsets());
224 ASSERT_EQ(4u, draw_rect_calls.size());
225 EXPECT_EQ(SkRect::MakeLTRB(0, 0, 100, 1), draw_rect_calls[0].rect);
226 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[0].paint.getColor());
227 EXPECT_EQ(SkRect::MakeLTRB(0, 1, 2, 47), draw_rect_calls[1].rect);
228 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[1].paint.getColor());
229 EXPECT_EQ(SkRect::MakeLTRB(0, 47, 100, 50), draw_rect_calls[2].rect);
230 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[2].paint.getColor());
231 EXPECT_EQ(SkRect::MakeLTRB(96, 1, 100, 47), draw_rect_calls[3].rect);
232 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[3].paint.getColor());
233 231
234 EXPECT_TRUE(sk_canvas_->draw_rrect_calls().empty()); 232 EXPECT_EQ(1, sk_canvas_->draw_paint_call_count());
233 EXPECT_EQ(gfx::RectF(bounds),
234 gfx::SkRectToRectF(sk_canvas_->last_clip_bounds()));
235 } 235 }
236 236
237 TEST_F(BorderTest, BorderPainter) { 237 TEST_F(BorderTest, BorderPainter) {
238 const gfx::Insets kInsets(1, 2, 3, 4); 238 const gfx::Insets kInsets(1, 2, 3, 4);
239 239
240 std::unique_ptr<MockPainter> painter(new MockPainter()); 240 std::unique_ptr<MockPainter> painter(new MockPainter());
241 MockPainter* painter_ptr = painter.get(); 241 MockPainter* painter_ptr = painter.get();
242 std::unique_ptr<Border> border( 242 std::unique_ptr<Border> border(
243 CreateBorderPainter(std::move(painter), kInsets)); 243 CreateBorderPainter(std::move(painter), kInsets));
244 EXPECT_EQ(gfx::Size(60, 40), border->GetMinimumSize()); 244 EXPECT_EQ(gfx::Size(60, 40), border->GetMinimumSize());
245 EXPECT_EQ(kInsets, border->GetInsets()); 245 EXPECT_EQ(kInsets, border->GetInsets());
246 246
247 border->Paint(*view_, canvas_.get()); 247 border->Paint(*view_, canvas_.get());
248 248
249 // Expect that the Painter was called with our canvas and the view's size. 249 // Expect that the Painter was called with our canvas and the view's size.
250 EXPECT_EQ(canvas_.get(), painter_ptr->given_canvas()); 250 EXPECT_EQ(canvas_.get(), painter_ptr->given_canvas());
251 EXPECT_EQ(view_->size(), painter_ptr->given_size()); 251 EXPECT_EQ(view_->size(), painter_ptr->given_size());
252 } 252 }
253 253
254 } // namespace views 254 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/border.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698