blue_button_unittest.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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