Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / gpu / command_buffer / service / vertex_array_manager_unittest.cc
1 // Copyright (c) 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 "gpu/command_buffer/service/vertex_array_manager.h"
6 #include "gpu/command_buffer/service/vertex_attrib_manager.h"
7
8 #include "base/memory/scoped_ptr.h"
9 #include "gpu/command_buffer/service/feature_info.h"
10 #include "gpu/command_buffer/service/test_helper.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/gl/gl_mock.h"
13
14 using ::testing::Pointee;
15 using ::testing::_;
16
17 namespace gpu {
18 namespace gles2 {
19
20 class VertexArrayManagerTest : public testing::Test {
21  public:
22   static const uint32 kNumVertexAttribs = 8;
23
24   VertexArrayManagerTest() {
25   }
26
27   virtual ~VertexArrayManagerTest() {
28   }
29
30  protected:
31   virtual void SetUp() {
32     gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
33     ::gfx::MockGLInterface::SetGLInterface(gl_.get());
34
35     manager_ = new VertexArrayManager();
36   }
37
38   virtual void TearDown() {
39     delete manager_;
40     ::gfx::MockGLInterface::SetGLInterface(NULL);
41     gl_.reset();
42   }
43
44   // Use StrictMock to make 100% sure we know how GL will be called.
45   scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
46   VertexArrayManager* manager_;
47 };
48
49 // GCC requires these declarations, but MSVC requires they not be present
50 #ifndef COMPILER_MSVC
51 const uint32 VertexArrayManagerTest::kNumVertexAttribs;
52 #endif
53
54 TEST_F(VertexArrayManagerTest, Basic) {
55   const GLuint kClient1Id = 1;
56   const GLuint kService1Id = 11;
57   const GLuint kClient2Id = 2;
58
59   // Check we can create
60   manager_->CreateVertexAttribManager(
61       kClient1Id, kService1Id, kNumVertexAttribs, true);
62   // Check creation success
63   VertexAttribManager* info1 = manager_->GetVertexAttribManager(kClient1Id);
64   ASSERT_TRUE(info1 != NULL);
65   EXPECT_EQ(kService1Id, info1->service_id());
66   GLuint client_id = 0;
67   EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id));
68   EXPECT_EQ(kClient1Id, client_id);
69   // Check we get nothing for a non-existent name.
70   EXPECT_TRUE(manager_->GetVertexAttribManager(kClient2Id) == NULL);
71   // Check trying to a remove non-existent name does not crash.
72   manager_->RemoveVertexAttribManager(kClient2Id);
73   // Check that it gets deleted when the last reference is released.
74   EXPECT_CALL(*gl_, DeleteVertexArraysOES(1, ::testing::Pointee(kService1Id)))
75       .Times(1)
76       .RetiresOnSaturation();
77   // Check we can't get the texture after we remove it.
78   manager_->RemoveVertexAttribManager(kClient1Id);
79   EXPECT_TRUE(manager_->GetVertexAttribManager(kClient1Id) == NULL);
80 }
81
82 TEST_F(VertexArrayManagerTest, Destroy) {
83   const GLuint kClient1Id = 1;
84   const GLuint kService1Id = 11;
85   VertexArrayManager manager;
86   // Check we can create
87   manager.CreateVertexAttribManager(
88       kClient1Id, kService1Id, kNumVertexAttribs, true);
89   // Check creation success
90   VertexAttribManager* info1 = manager.GetVertexAttribManager(kClient1Id);
91   ASSERT_TRUE(info1 != NULL);
92   EXPECT_CALL(*gl_, DeleteVertexArraysOES(1, ::testing::Pointee(kService1Id)))
93       .Times(1)
94       .RetiresOnSaturation();
95   manager.Destroy(true);
96   // Check that resources got freed.
97   info1 = manager.GetVertexAttribManager(kClient1Id);
98   ASSERT_TRUE(info1 == NULL);
99 }
100
101 }  // namespace gles2
102 }  // namespace gpu
103
104