| Index: gpu/command_buffer/client/gles2_implementation_unittest.cc
 | 
| ===================================================================
 | 
| --- gpu/command_buffer/client/gles2_implementation_unittest.cc	(revision 52147)
 | 
| +++ gpu/command_buffer/client/gles2_implementation_unittest.cc	(working copy)
 | 
| @@ -6,6 +6,7 @@
 | 
|  
 | 
|  #include "gpu/command_buffer/client/gles2_implementation.h"
 | 
|  #include "gpu/command_buffer/common/command_buffer.h"
 | 
| +#include "gpu/GLES2/gles2_command_buffer.h"
 | 
|  #include "testing/gtest/include/gtest/gtest.h"
 | 
|  #include "testing/gmock/include/gmock/gmock.h"
 | 
|  
 | 
| @@ -636,7 +637,7 @@
 | 
|    Cmds expected;
 | 
|    expected.get.Init(kTransferBufferId, 0);
 | 
|  
 | 
| -  // One call to flush to way for GetError
 | 
| +  // One call to flush to wait for GetError
 | 
|    EXPECT_CALL(*command_buffer_, OnFlush(_))
 | 
|        .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
|        .RetiresOnSaturation();
 | 
| @@ -689,6 +690,190 @@
 | 
|    EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
|  }
 | 
|  
 | 
| +TEST_F(GLES2ImplementationTest, MapUnMapBufferSubData) {
 | 
| +  struct Cmds {
 | 
| +    BufferSubData buf;
 | 
| +    cmd::SetToken set_token;
 | 
| +  };
 | 
| +  const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
 | 
| +  const GLintptr kOffset = 15;
 | 
| +  const GLsizeiptr kSize = 16;
 | 
| +
 | 
| +  int32 token = 1;
 | 
| +  uint32 offset = 0;
 | 
| +  Cmds expected;
 | 
| +  expected.buf.Init(
 | 
| +    kTarget, kOffset, kSize, kTransferBufferId, offset);
 | 
| +  expected.set_token.Init(token++);
 | 
| +
 | 
| +  void* mem = gl_->MapBufferSubData(kTarget, kOffset, kSize, GL_WRITE_ONLY);
 | 
| +  ASSERT_TRUE(mem != NULL);
 | 
| +  gl_->UnmapBufferSubData(mem);
 | 
| +  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
| +}
 | 
| +
 | 
| +TEST_F(GLES2ImplementationTest, MapUnMapBufferSubDataBadArgs) {
 | 
| +  const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER;
 | 
| +  const GLintptr kOffset = 15;
 | 
| +  const GLsizeiptr kSize = 16;
 | 
| +
 | 
| +  // Calls to flush to wait for GetError
 | 
| +  EXPECT_CALL(*command_buffer_, OnFlush(_))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .RetiresOnSaturation();
 | 
| +
 | 
| +  void* mem;
 | 
| +  mem = gl_->MapBufferSubData(kTarget, -1, kSize, GL_WRITE_ONLY);
 | 
| +  ASSERT_TRUE(mem == NULL);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
 | 
| +  mem = gl_->MapBufferSubData(kTarget, kOffset, -1, GL_WRITE_ONLY);
 | 
| +  ASSERT_TRUE(mem == NULL);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
 | 
| +  mem = gl_->MapBufferSubData(kTarget, kOffset, kSize, GL_READ_ONLY);
 | 
| +  ASSERT_TRUE(mem == NULL);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), gl_->GetError());
 | 
| +  const char* kPtr = "something";
 | 
| +  gl_->UnmapBufferSubData(kPtr);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
 | 
| +}
 | 
| +
 | 
| +TEST_F(GLES2ImplementationTest, MapUnMapTexSubImage2D) {
 | 
| +  struct Cmds {
 | 
| +    TexSubImage2D tex;
 | 
| +    cmd::SetToken set_token;
 | 
| +  };
 | 
| +  const GLint kLevel = 1;
 | 
| +  const GLint kXOffset = 2;
 | 
| +  const GLint kYOffset = 3;
 | 
| +  const GLint kWidth = 4;
 | 
| +  const GLint kHeight = 5;
 | 
| +  const GLenum kFormat = GL_RGBA;
 | 
| +  const GLenum kType = GL_UNSIGNED_BYTE;
 | 
| +
 | 
| +  int32 token = 1;
 | 
| +  uint32 offset = 0;
 | 
| +  Cmds expected;
 | 
| +  expected.tex.Init(
 | 
| +      GL_TEXTURE_2D, kLevel, kXOffset, kYOffset, kWidth, kHeight, kFormat,
 | 
| +      kType, kTransferBufferId, offset);
 | 
| +  expected.set_token.Init(token++);
 | 
| +
 | 
| +  void* mem = gl_->MapTexSubImage2D(
 | 
| +      GL_TEXTURE_2D,
 | 
| +      kLevel,
 | 
| +      kXOffset,
 | 
| +      kYOffset,
 | 
| +      kWidth,
 | 
| +      kHeight,
 | 
| +      kFormat,
 | 
| +      kType,
 | 
| +      GL_WRITE_ONLY);
 | 
| +  ASSERT_TRUE(mem != NULL);
 | 
| +  gl_->UnmapTexSubImage2D(mem);
 | 
| +  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 | 
| +}
 | 
| +
 | 
| +TEST_F(GLES2ImplementationTest, MapUnMapTexSubImage2DBadArgs) {
 | 
| +  const GLint kLevel = 1;
 | 
| +  const GLint kXOffset = 2;
 | 
| +  const GLint kYOffset = 3;
 | 
| +  const GLint kWidth = 4;
 | 
| +  const GLint kHeight = 5;
 | 
| +  const GLenum kFormat = GL_RGBA;
 | 
| +  const GLenum kType = GL_UNSIGNED_BYTE;
 | 
| +
 | 
| +  // Calls to flush to wait for GetError
 | 
| +  EXPECT_CALL(*command_buffer_, OnFlush(_))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .WillOnce(SetMemory(GLuint(GL_NO_ERROR)))
 | 
| +      .RetiresOnSaturation();
 | 
| +
 | 
| +  void* mem;
 | 
| +  mem = gl_->MapTexSubImage2D(
 | 
| +    GL_TEXTURE_2D,
 | 
| +    -1,
 | 
| +    kXOffset,
 | 
| +    kYOffset,
 | 
| +    kWidth,
 | 
| +    kHeight,
 | 
| +    kFormat,
 | 
| +    kType,
 | 
| +    GL_WRITE_ONLY);
 | 
| +  EXPECT_TRUE(mem == NULL);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
 | 
| +  mem = gl_->MapTexSubImage2D(
 | 
| +    GL_TEXTURE_2D,
 | 
| +    kLevel,
 | 
| +    -1,
 | 
| +    kYOffset,
 | 
| +    kWidth,
 | 
| +    kHeight,
 | 
| +    kFormat,
 | 
| +    kType,
 | 
| +    GL_WRITE_ONLY);
 | 
| +  EXPECT_TRUE(mem == NULL);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
 | 
| +  mem = gl_->MapTexSubImage2D(
 | 
| +    GL_TEXTURE_2D,
 | 
| +    kLevel,
 | 
| +    kXOffset,
 | 
| +    -1,
 | 
| +    kWidth,
 | 
| +    kHeight,
 | 
| +    kFormat,
 | 
| +    kType,
 | 
| +    GL_WRITE_ONLY);
 | 
| +  EXPECT_TRUE(mem == NULL);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
 | 
| +  mem = gl_->MapTexSubImage2D(
 | 
| +    GL_TEXTURE_2D,
 | 
| +    kLevel,
 | 
| +    kXOffset,
 | 
| +    kYOffset,
 | 
| +    -1,
 | 
| +    kHeight,
 | 
| +    kFormat,
 | 
| +    kType,
 | 
| +    GL_WRITE_ONLY);
 | 
| +  EXPECT_TRUE(mem == NULL);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
 | 
| +  mem = gl_->MapTexSubImage2D(
 | 
| +    GL_TEXTURE_2D,
 | 
| +    kLevel,
 | 
| +    kXOffset,
 | 
| +    kYOffset,
 | 
| +    kWidth,
 | 
| +    -1,
 | 
| +    kFormat,
 | 
| +    kType,
 | 
| +    GL_WRITE_ONLY);
 | 
| +  EXPECT_TRUE(mem == NULL);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
 | 
| +  mem = gl_->MapTexSubImage2D(
 | 
| +    GL_TEXTURE_2D,
 | 
| +    kLevel,
 | 
| +    kXOffset,
 | 
| +    kYOffset,
 | 
| +    kWidth,
 | 
| +    kHeight,
 | 
| +    kFormat,
 | 
| +    kType,
 | 
| +    GL_READ_ONLY);
 | 
| +  EXPECT_TRUE(mem == NULL);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), gl_->GetError());
 | 
| +  const char* kPtr = "something";
 | 
| +  gl_->UnmapTexSubImage2D(kPtr);
 | 
| +  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
 | 
| +}
 | 
| +
 | 
|  }  // namespace gles2
 | 
|  }  // namespace gpu
 | 
|  
 | 
| 
 |