nine_patch_layer_unittest.cc revision 58537e28ecd584eab876aee8be7156509866d23a
1// Copyright 2012 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 "cc/layers/nine_patch_layer.h"
6
7#include "cc/debug/overdraw_metrics.h"
8#include "cc/resources/prioritized_resource_manager.h"
9#include "cc/resources/resource_provider.h"
10#include "cc/resources/resource_update_queue.h"
11#include "cc/resources/scoped_ui_resource.h"
12#include "cc/scheduler/texture_uploader.h"
13#include "cc/test/fake_layer_tree_host_client.h"
14#include "cc/test/fake_output_surface.h"
15#include "cc/test/fake_output_surface_client.h"
16#include "cc/test/geometry_test_utils.h"
17#include "cc/trees/layer_tree_host.h"
18#include "cc/trees/occlusion_tracker.h"
19#include "cc/trees/single_thread_proxy.h"
20#include "testing/gmock/include/gmock/gmock.h"
21#include "testing/gtest/include/gtest/gtest.h"
22#include "third_party/skia/include/core/SkBitmap.h"
23
24using ::testing::Mock;
25using ::testing::_;
26using ::testing::AtLeast;
27using ::testing::AnyNumber;
28
29namespace cc {
30namespace {
31
32class MockLayerTreeHost : public LayerTreeHost {
33 public:
34  explicit MockLayerTreeHost(LayerTreeHostClient* client)
35      : LayerTreeHost(client, LayerTreeSettings()) {
36    Initialize(NULL);
37  }
38};
39
40class NinePatchLayerTest : public testing::Test {
41 public:
42  NinePatchLayerTest() : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {}
43
44  cc::Proxy* Proxy() const { return layer_tree_host_->proxy(); }
45
46 protected:
47  virtual void SetUp() {
48    layer_tree_host_.reset(new MockLayerTreeHost(&fake_client_));
49  }
50
51  virtual void TearDown() {
52    Mock::VerifyAndClearExpectations(layer_tree_host_.get());
53  }
54
55  scoped_ptr<MockLayerTreeHost> layer_tree_host_;
56  FakeLayerTreeHostClient fake_client_;
57};
58
59TEST_F(NinePatchLayerTest, SetBitmap) {
60  scoped_refptr<NinePatchLayer> test_layer = NinePatchLayer::Create();
61  ASSERT_TRUE(test_layer.get());
62  test_layer->SetIsDrawable(true);
63  test_layer->SetBounds(gfx::Size(100, 100));
64
65  layer_tree_host_->SetRootLayer(test_layer);
66  Mock::VerifyAndClearExpectations(layer_tree_host_.get());
67  EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get());
68
69  layer_tree_host_->InitializeOutputSurfaceIfNeeded();
70
71  ResourceUpdateQueue queue;
72  OcclusionTracker occlusion_tracker(gfx::Rect(), false);
73  test_layer->SavePaintProperties();
74  test_layer->Update(&queue, &occlusion_tracker);
75
76  EXPECT_FALSE(test_layer->DrawsContent());
77
78  SkBitmap bitmap;
79  bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
80  bitmap.allocPixels();
81  bitmap.setImmutable();
82
83  gfx::Rect aperture(5, 5, 1, 1);
84  bool fill_center = false;
85  test_layer->SetBitmap(bitmap, aperture);
86  test_layer->SetFillCenter(fill_center);
87  test_layer->Update(&queue, &occlusion_tracker);
88
89  EXPECT_TRUE(test_layer->DrawsContent());
90}
91
92TEST_F(NinePatchLayerTest, SetSharedBitmap) {
93  scoped_refptr<NinePatchLayer> test_layer = NinePatchLayer::Create();
94  ASSERT_TRUE(test_layer.get());
95  test_layer->SetIsDrawable(true);
96  test_layer->SetBounds(gfx::Size(100, 100));
97
98  layer_tree_host_->SetRootLayer(test_layer);
99  Mock::VerifyAndClearExpectations(layer_tree_host_.get());
100  EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get());
101
102  layer_tree_host_->InitializeOutputSurfaceIfNeeded();
103
104  ResourceUpdateQueue queue;
105  OcclusionTracker occlusion_tracker(gfx::Rect(), false);
106  test_layer->SavePaintProperties();
107  test_layer->Update(&queue, &occlusion_tracker);
108
109  EXPECT_FALSE(test_layer->DrawsContent());
110
111  SkBitmap bitmap;
112  bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
113  bitmap.allocPixels();
114  bitmap.setImmutable();
115
116  scoped_ptr<ScopedUIResource> resource = ScopedUIResource::Create(
117      layer_tree_host_.get(), UIResourceBitmap(bitmap));
118  gfx::Rect aperture(5, 5, 1, 1);
119  bool fill_center = true;
120  test_layer->SetUIResourceId(resource->id(), aperture);
121  test_layer->SetFillCenter(fill_center);
122  test_layer->Update(&queue, &occlusion_tracker);
123
124  EXPECT_TRUE(test_layer->DrawsContent());
125}
126
127}  // namespace
128}  // namespace cc
129