Index: o3d/gpu_plugin/command_buffer_unittest.cc |
=================================================================== |
--- o3d/gpu_plugin/command_buffer_unittest.cc (revision 26762) |
+++ o3d/gpu_plugin/command_buffer_unittest.cc (working copy) |
@@ -2,6 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include "base/thread.h" |
#include "o3d/gpu_plugin/command_buffer.h" |
#include "o3d/gpu_plugin/np_utils/dynamic_np_object.h" |
#include "o3d/gpu_plugin/np_utils/np_browser_mock.h" |
@@ -158,5 +159,82 @@ |
EXPECT_EQ(-1, command_buffer_->SyncOffsets(1024)); |
} |
+TEST_F(CommandBufferTest, ZeroHandleMapsToNull) { |
+ EXPECT_TRUE(NULL == command_buffer_->GetRegisteredObject(0).Get()); |
+} |
+ |
+TEST_F(CommandBufferTest, RegisteringNullObjectReturnsZero) { |
+ EXPECT_EQ(0, command_buffer_->RegisterObject(NPObjectPointer<NPObject>())); |
+} |
+ |
+TEST_F(CommandBufferTest, RegistersDistinctNonZeroHandlesForObject) { |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+ EXPECT_EQ(2, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(2)); |
+} |
+ |
+TEST_F(CommandBufferTest, RegisterObjectReusesUnregisteredHandles) { |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+ EXPECT_EQ(2, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(2)); |
+ command_buffer_->UnregisterObject(window_object_, 1); |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+ EXPECT_EQ(3, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(3)); |
+} |
+ |
+TEST_F(CommandBufferTest, CannotUnregisterHandleZero) { |
+ command_buffer_->UnregisterObject(window_object_, 0); |
+ EXPECT_TRUE(NULL == command_buffer_->GetRegisteredObject(0).Get()); |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+} |
+ |
+TEST_F(CommandBufferTest, CannotUnregisterNegativeHandles) { |
+ command_buffer_->UnregisterObject(window_object_, -1); |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+} |
+ |
+TEST_F(CommandBufferTest, CannotUnregisterUnregisteredHandles) { |
+ command_buffer_->UnregisterObject(window_object_, 1); |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+} |
+ |
+TEST_F(CommandBufferTest, |
+ CannotUnregisterHandleWithoutDemonstratingAccessToObject) { |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ command_buffer_->UnregisterObject(chromium_object_, 1); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+ EXPECT_EQ(2, command_buffer_->RegisterObject(window_object_)); |
+} |
+ |
+// Testing this case specifically because there is an optimization that takes |
+// a different code path in this case. |
+TEST_F(CommandBufferTest, UnregistersLastRegisteredHandle) { |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+ command_buffer_->UnregisterObject(window_object_, 1); |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+} |
+ |
+// Testing this case specifically because there is an optimization that takes |
+// a different code path in this case. |
+TEST_F(CommandBufferTest, UnregistersTwoLastRegisteredHandles) { |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+ EXPECT_EQ(2, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(2)); |
+ command_buffer_->UnregisterObject(window_object_, 2); |
+ command_buffer_->UnregisterObject(window_object_, 1); |
+ EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
+ EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
+} |
+ |
} // namespace gpu_plugin |
} // namespace o3d |