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/resources/prioritized_resource_manager.h"
8#include "cc/resources/resource_provider.h"
9#include "cc/resources/resource_update_queue.h"
10#include "cc/resources/scoped_ui_resource.h"
11#include "cc/test/fake_layer_tree_host.h"
12#include "cc/test/fake_layer_tree_host_client.h"
13#include "cc/test/fake_output_surface.h"
14#include "cc/test/fake_output_surface_client.h"
15#include "cc/test/geometry_test_utils.h"
16#include "cc/test/test_shared_bitmap_manager.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 NinePatchLayerTest : public testing::Test {
33 public:
34  NinePatchLayerTest() : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {}
35
36 protected:
37  virtual void SetUp() {
38    layer_tree_host_ = FakeLayerTreeHost::Create(&fake_client_);
39  }
40
41  virtual void TearDown() {
42    Mock::VerifyAndClearExpectations(layer_tree_host_.get());
43  }
44
45  FakeLayerTreeHostClient fake_client_;
46  scoped_ptr<FakeLayerTreeHost> layer_tree_host_;
47};
48
49TEST_F(NinePatchLayerTest, SetLayerProperties) {
50  scoped_refptr<NinePatchLayer> test_layer = NinePatchLayer::Create();
51  ASSERT_TRUE(test_layer.get());
52  test_layer->SetIsDrawable(true);
53  test_layer->SetBounds(gfx::Size(100, 100));
54
55  layer_tree_host_->SetRootLayer(test_layer);
56  Mock::VerifyAndClearExpectations(layer_tree_host_.get());
57  EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get());
58
59  ResourceUpdateQueue queue;
60  gfx::Rect screen_space_clip_rect;
61  OcclusionTracker<Layer> occlusion_tracker(screen_space_clip_rect);
62  test_layer->SavePaintProperties();
63  test_layer->Update(&queue, &occlusion_tracker);
64
65  EXPECT_FALSE(test_layer->DrawsContent());
66
67  bool is_opaque = false;
68  scoped_ptr<ScopedUIResource> resource = ScopedUIResource::Create(
69      layer_tree_host_.get(), UIResourceBitmap(gfx::Size(10, 10), is_opaque));
70  gfx::Rect aperture(5, 5, 1, 1);
71  bool fill_center = true;
72  test_layer->SetAperture(aperture);
73  test_layer->SetUIResourceId(resource->id());
74  test_layer->SetFillCenter(fill_center);
75  test_layer->Update(&queue, &occlusion_tracker);
76
77  EXPECT_TRUE(test_layer->DrawsContent());
78}
79
80}  // namespace
81}  // namespace cc
82