1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
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 "chrome/browser/ui/toolbar/wrench_icon_painter.h"
6
7#include "base/message_loop/message_loop.h"
8#include "chrome/browser/themes/theme_service.h"
9#include "chrome/browser/themes/theme_service_factory.h"
10#include "chrome/test/base/testing_profile.h"
11#include "grit/theme_resources.h"
12#include "testing/gtest/include/gtest/gtest.h"
13#include "ui/gfx/canvas.h"
14#include "ui/gfx/rect.h"
15
16class WrenchIconPainterTest : public testing::Test,
17    public WrenchIconPainter::Delegate {
18 public:
19  WrenchIconPainterTest() : schedule_paint_count_(0), painter_(this) {
20    theme_provider_ = ThemeServiceFactory::GetForProfile(&profile_);
21  }
22
23  virtual void ScheduleWrenchIconPaint() OVERRIDE { ++schedule_paint_count_; }
24
25 protected:
26  base::MessageLoopForUI message_loop_;  // Needed for gfx::Animation.
27  TestingProfile profile_;
28  int schedule_paint_count_;
29  ui::ThemeProvider* theme_provider_;
30  WrenchIconPainter painter_;
31
32 private:
33  DISALLOW_COPY_AND_ASSIGN(WrenchIconPainterTest);
34};
35
36// Nothing to test here. Just exercise the paint code to verify that nothing
37// leaks or crashes.
38TEST_F(WrenchIconPainterTest, Paint) {
39  gfx::Rect rect(0, 0, 29, 29);
40  gfx::Canvas canvas(rect.size(), 1.0f, true);
41
42  painter_.Paint(&canvas, theme_provider_, rect, WrenchIconPainter::BEZEL_NONE);
43  painter_.Paint(
44      &canvas, theme_provider_, rect, WrenchIconPainter::BEZEL_HOVER);
45  painter_.Paint(
46      &canvas, theme_provider_, rect, WrenchIconPainter::BEZEL_PRESSED);
47
48  painter_.SetSeverity(WrenchIconPainter::SEVERITY_LOW, true);
49  painter_.Paint(
50      &canvas, theme_provider_, rect, WrenchIconPainter::BEZEL_PRESSED);
51  painter_.SetSeverity(WrenchIconPainter::SEVERITY_MEDIUM, true);
52  painter_.Paint(
53      &canvas, theme_provider_, rect, WrenchIconPainter::BEZEL_PRESSED);
54  painter_.SetSeverity(WrenchIconPainter::SEVERITY_HIGH, true);
55  painter_.Paint(
56      &canvas, theme_provider_, rect, WrenchIconPainter::BEZEL_PRESSED);
57
58  painter_.set_badge(*theme_provider_->GetImageSkiaNamed(IDR_PRODUCT_LOGO_16));
59  painter_.Paint(
60      &canvas, theme_provider_, rect, WrenchIconPainter::BEZEL_PRESSED);
61}
62
63TEST_F(WrenchIconPainterTest, PaintCallback) {
64  painter_.SetSeverity(WrenchIconPainter::SEVERITY_LOW, true);
65  schedule_paint_count_ = 0;
66  painter_.AnimationProgressed(NULL);
67  EXPECT_EQ(1, schedule_paint_count_);
68}
69