1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/controls/button/blue_button.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/string16.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/canvas.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/skia_util.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/controls/button/label_button_border.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/test/views_test_base.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace views { 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TestBlueButton : public BlueButton { 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestBlueButton() : BlueButton(NULL, base::ASCIIToUTF16("foo")) {} 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~TestBlueButton() {} 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) using BlueButton::OnNativeThemeChanged; 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestBlueButton); 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)typedef ViewsTestBase BlueButtonTest; 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(BlueButtonTest, Border) { 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Compared to a normal LabelButton... 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LabelButton button(NULL, base::ASCIIToUTF16("foo")); 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) button.SetBoundsRect(gfx::Rect(gfx::Point(0, 0), button.GetPreferredSize())); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Canvas button_canvas(button.bounds().size(), 1.0, true); 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) button.border()->Paint(button, &button_canvas); 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // ... a special blue border should be used. 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestBlueButton blue_button; 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blue_button.SetBoundsRect(gfx::Rect(gfx::Point(0, 0), 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blue_button.GetPreferredSize())); 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Canvas canvas(blue_button.bounds().size(), 1.0, true); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blue_button.border()->Paint(blue_button, &canvas); 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(button.GetText(), blue_button.GetText()); 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(gfx::BitmapsAreEqual(button_canvas.ExtractImageRep().sk_bitmap(), 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) canvas.ExtractImageRep().sk_bitmap())); 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Make sure it's still used after the native theme "changes". 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blue_button.OnNativeThemeChanged(NULL); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Canvas canvas2(blue_button.bounds().size(), 1.0, true); 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blue_button.border()->Paint(blue_button, &canvas2); 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(gfx::BitmapsAreEqual(canvas.ExtractImageRep().sk_bitmap(), 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) canvas2.ExtractImageRep().sk_bitmap())); 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace views 60