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