15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/blue_button.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/strings/string16.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/canvas.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/skia_util.h"
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/controls/button/label_button_border.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/test/views_test_base.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestBlueButton : public BlueButton {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestBlueButton() : BlueButton(NULL, base::ASCIIToUTF16("foo")) {}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TestBlueButton() {}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  using BlueButton::OnNativeThemeChanged;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestBlueButton);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ViewsTestBase BlueButtonTest;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BlueButtonTest, Border) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Compared to a normal LabelButton...
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LabelButton button(NULL, base::ASCIIToUTF16("foo"));
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  button.SetBoundsRect(gfx::Rect(gfx::Point(0, 0), button.GetPreferredSize()));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Canvas button_canvas(button.bounds().size(), 1.0, true);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  button.border()->Paint(button, &button_canvas);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ... a special blue border should be used.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestBlueButton blue_button;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blue_button.SetBoundsRect(gfx::Rect(gfx::Point(0, 0),
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            blue_button.GetPreferredSize()));
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Canvas canvas(blue_button.bounds().size(), 1.0, true);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blue_button.border()->Paint(blue_button, &canvas);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(button.GetText(), blue_button.GetText());
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(gfx::BitmapsAreEqual(button_canvas.ExtractImageRep().sk_bitmap(),
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    canvas.ExtractImageRep().sk_bitmap()));
49
50  // Make sure it's still used after the native theme "changes".
51  blue_button.OnNativeThemeChanged(NULL);
52  gfx::Canvas canvas2(blue_button.bounds().size(), 1.0, true);
53  blue_button.border()->Paint(blue_button, &canvas2);
54
55  EXPECT_TRUE(gfx::BitmapsAreEqual(canvas.ExtractImageRep().sk_bitmap(),
56                                   canvas2.ExtractImageRep().sk_bitmap()));
57}
58
59}  // namespace views
60