Index: gpu/command_buffer/service/program_manager_unittest.cc |
diff --git a/gpu/command_buffer/service/program_manager_unittest.cc b/gpu/command_buffer/service/program_manager_unittest.cc |
index 41d15ef9c7334eded14b6b5ed71a0f79f442d022..c0fad679a4a97da74c57c38beba93a50372670a4 100644 |
--- a/gpu/command_buffer/service/program_manager_unittest.cc |
+++ b/gpu/command_buffer/service/program_manager_unittest.cc |
@@ -13,6 +13,7 @@ |
#include "gpu/command_buffer/common/gles2_cmd_format.h" |
#include "gpu/command_buffer/service/common_decoder.h" |
#include "gpu/command_buffer/service/mocks.h" |
+#include "gpu/command_buffer/service/test_helper.h" |
#include "testing/gtest/include/gtest/gtest.h" |
using ::gfx::MockGLInterface; |
@@ -198,21 +199,8 @@ class ProgramManagerWithShaderTest : public testing::Test { |
static const size_t kNumUniforms; |
protected: |
- struct AttribInfo { |
- const char* name; |
- GLint size; |
- GLenum type; |
- GLint location; |
- }; |
- |
- struct UniformInfo { |
- const char* name; |
- const char* good_name; |
- GLint size; |
- GLenum type; |
- GLint fake_location; |
- GLint real_location; |
- }; |
+ typedef TestHelper::AttribInfo AttribInfo; |
+ typedef TestHelper::UniformInfo UniformInfo; |
virtual void SetUp() { |
gl_.reset(new StrictMock<gfx::MockGLInterface>()); |
@@ -243,99 +231,8 @@ class ProgramManagerWithShaderTest : public testing::Test { |
void SetupShader(AttribInfo* attribs, size_t num_attribs, |
UniformInfo* uniforms, size_t num_uniforms, |
GLuint service_id) { |
- InSequence s; |
- |
- EXPECT_CALL(*gl_, |
- LinkProgram(service_id)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- EXPECT_CALL(*gl_, |
- GetProgramiv(service_id, GL_LINK_STATUS, _)) |
- .WillOnce(SetArgumentPointee<2>(1)) |
- .RetiresOnSaturation(); |
- EXPECT_CALL(*gl_, |
- GetProgramiv(service_id, GL_INFO_LOG_LENGTH, _)) |
- .WillOnce(SetArgumentPointee<2>(0)) |
- .RetiresOnSaturation(); |
- EXPECT_CALL(*gl_, |
- GetProgramiv(service_id, GL_ACTIVE_ATTRIBUTES, _)) |
- .WillOnce(SetArgumentPointee<2>(num_attribs)) |
- .RetiresOnSaturation(); |
- size_t max_attrib_len = 0; |
- for (size_t ii = 0; ii < num_attribs; ++ii) { |
- size_t len = strlen(attribs[ii].name) + 1; |
- max_attrib_len = std::max(max_attrib_len, len); |
- } |
- EXPECT_CALL(*gl_, |
- GetProgramiv(service_id, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, _)) |
- .WillOnce(SetArgumentPointee<2>(max_attrib_len)) |
- .RetiresOnSaturation(); |
- for (size_t ii = 0; ii < num_attribs; ++ii) { |
- const AttribInfo& info = attribs[ii]; |
- EXPECT_CALL(*gl_, |
- GetActiveAttrib(service_id, ii, |
- max_attrib_len, _, _, _, _)) |
- .WillOnce(DoAll( |
- SetArgumentPointee<3>(strlen(info.name)), |
- SetArgumentPointee<4>(info.size), |
- SetArgumentPointee<5>(info.type), |
- SetArrayArgument<6>(info.name, |
- info.name + strlen(info.name) + 1))) |
- .RetiresOnSaturation(); |
- if (!ProgramManager::IsInvalidPrefix(info.name, strlen(info.name))) { |
- EXPECT_CALL(*gl_, GetAttribLocation(service_id, |
- StrEq(info.name))) |
- .WillOnce(Return(info.location)) |
- .RetiresOnSaturation(); |
- } |
- } |
- EXPECT_CALL(*gl_, |
- GetProgramiv(service_id, GL_ACTIVE_UNIFORMS, _)) |
- .WillOnce(SetArgumentPointee<2>(num_uniforms)) |
- .RetiresOnSaturation(); |
- size_t max_uniform_len = 0; |
- for (size_t ii = 0; ii < num_uniforms; ++ii) { |
- size_t len = strlen(uniforms[ii].name) + 1; |
- max_uniform_len = std::max(max_uniform_len, len); |
- } |
- EXPECT_CALL(*gl_, |
- GetProgramiv(service_id, GL_ACTIVE_UNIFORM_MAX_LENGTH, _)) |
- .WillOnce(SetArgumentPointee<2>(max_uniform_len)) |
- .RetiresOnSaturation(); |
- for (size_t ii = 0; ii < num_uniforms; ++ii) { |
- const UniformInfo& info = uniforms[ii]; |
- EXPECT_CALL(*gl_, |
- GetActiveUniform(service_id, ii, |
- max_uniform_len, _, _, _, _)) |
- .WillOnce(DoAll( |
- SetArgumentPointee<3>(strlen(info.name)), |
- SetArgumentPointee<4>(info.size), |
- SetArgumentPointee<5>(info.type), |
- SetArrayArgument<6>(info.name, |
- info.name + strlen(info.name) + 1))) |
- .RetiresOnSaturation(); |
- if (!ProgramManager::IsInvalidPrefix(info.name, strlen(info.name))) { |
- EXPECT_CALL(*gl_, GetUniformLocation(service_id, |
- StrEq(info.name))) |
- .WillOnce(Return(info.real_location)) |
- .RetiresOnSaturation(); |
- if (info.size > 1) { |
- std::string base_name = info.name; |
- size_t array_pos = base_name.rfind("[0]"); |
- if (base_name.size() > 3 && array_pos == base_name.size() - 3) { |
- base_name = base_name.substr(0, base_name.size() - 3); |
- } |
- for (GLsizei jj = 1; jj < info.size; ++jj) { |
- std::string element_name( |
- std::string(base_name) + "[" + base::IntToString(jj) + "]"); |
- EXPECT_CALL(*gl_, GetUniformLocation(service_id, |
- StrEq(element_name))) |
- .WillOnce(Return(info.real_location + jj * 2)) |
- .RetiresOnSaturation(); |
- } |
- } |
- } |
- } |
+ TestHelper::SetupShader( |
+ gl_.get(), attribs, num_attribs, uniforms, num_uniforms, service_id); |
} |
void SetupDefaultShaderExpectations() { |
@@ -345,81 +242,8 @@ class ProgramManagerWithShaderTest : public testing::Test { |
void SetupExpectationsForClearingUniforms( |
UniformInfo* uniforms, size_t num_uniforms) { |
- for (size_t ii = 0; ii < num_uniforms; ++ii) { |
- const UniformInfo& info = uniforms[ii]; |
- switch (info.type) { |
- case GL_FLOAT: |
- EXPECT_CALL(*gl_, Uniform1fv(info.real_location, info.size, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_FLOAT_VEC2: |
- EXPECT_CALL(*gl_, Uniform2fv(info.real_location, info.size, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_FLOAT_VEC3: |
- EXPECT_CALL(*gl_, Uniform3fv(info.real_location, info.size, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_FLOAT_VEC4: |
- EXPECT_CALL(*gl_, Uniform4fv(info.real_location, info.size, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_INT: |
- case GL_BOOL: |
- case GL_SAMPLER_2D: |
- case GL_SAMPLER_CUBE: |
- case GL_SAMPLER_EXTERNAL_OES: |
- case GL_SAMPLER_3D_OES: |
- case GL_SAMPLER_2D_RECT_ARB: |
- EXPECT_CALL(*gl_, Uniform1iv(info.real_location, info.size, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_INT_VEC2: |
- case GL_BOOL_VEC2: |
- EXPECT_CALL(*gl_, Uniform2iv(info.real_location, info.size, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_INT_VEC3: |
- case GL_BOOL_VEC3: |
- EXPECT_CALL(*gl_, Uniform3iv(info.real_location, info.size, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_INT_VEC4: |
- case GL_BOOL_VEC4: |
- EXPECT_CALL(*gl_, Uniform4iv(info.real_location, info.size, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_FLOAT_MAT2: |
- EXPECT_CALL(*gl_, UniformMatrix2fv( |
- info.real_location, info.size, false, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_FLOAT_MAT3: |
- EXPECT_CALL(*gl_, UniformMatrix3fv( |
- info.real_location, info.size, false, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- case GL_FLOAT_MAT4: |
- EXPECT_CALL(*gl_, UniformMatrix4fv( |
- info.real_location, info.size, false, _)) |
- .Times(1) |
- .RetiresOnSaturation(); |
- break; |
- default: |
- NOTREACHED(); |
- break; |
- } |
- } |
+ TestHelper::SetupExpectationsForClearingUniforms( |
+ gl_.get(), uniforms, num_uniforms); |
} |
virtual void TearDown() { |
@@ -499,25 +323,25 @@ const size_t ProgramManagerWithShaderTest::kNumAttribs = |
ProgramManagerWithShaderTest::UniformInfo |
ProgramManagerWithShaderTest::kUniforms[] = { |
{ kUniform1Name, |
- kUniform1Name, |
kUniform1Size, |
kUniform1Type, |
kUniform1FakeLocation, |
kUniform1RealLocation, |
+ kUniform1Name, |
}, |
{ kUniform2Name, |
- kUniform2Name, |
kUniform2Size, |
kUniform2Type, |
kUniform2FakeLocation, |
kUniform2RealLocation, |
+ kUniform2Name, |
}, |
{ kUniform3BadName, |
- kUniform3GoodName, |
kUniform3Size, |
kUniform3Type, |
kUniform3FakeLocation, |
kUniform3RealLocation, |
+ kUniform3GoodName, |
}, |
}; |
@@ -718,25 +542,25 @@ TEST_F(ProgramManagerWithShaderTest, GLDriverReturnsGLUnderscoreUniform) { |
static const char* kUniform2Name = "gl_longNameWeCanCheckFor"; |
static ProgramManagerWithShaderTest::UniformInfo kUniforms[] = { |
{ kUniform1Name, |
- kUniform1Name, |
kUniform1Size, |
kUniform1Type, |
kUniform1FakeLocation, |
kUniform1RealLocation, |
+ kUniform1Name, |
}, |
{ kUniform2Name, |
- kUniform2Name, |
kUniform2Size, |
kUniform2Type, |
kUniform2FakeLocation, |
kUniform2RealLocation, |
+ kUniform2Name, |
}, |
{ kUniform3BadName, |
- kUniform3GoodName, |
kUniform3Size, |
kUniform3Type, |
kUniform3FakeLocation, |
kUniform3RealLocation, |
+ kUniform3GoodName, |
}, |
}; |
const size_t kNumUniforms = arraysize(kUniforms); |
@@ -820,25 +644,25 @@ TEST_F(ProgramManagerWithShaderTest, GLDriverReturnsWrongTypeInfo) { |
}; |
static ProgramManagerWithShaderTest::UniformInfo kUniforms[] = { |
{ kUniform1Name, |
- kUniform1Name, |
kUniform1Size, |
kUniform1Type, |
kUniform1FakeLocation, |
kUniform1RealLocation, |
+ kUniform1Name, |
}, |
{ kUniform2Name, |
- kUniform2Name, |
kUniform2Size, |
kUniform2BadType, |
kUniform2FakeLocation, |
kUniform2RealLocation, |
+ kUniform2Name, |
}, |
{ kUniform3BadName, |
- kUniform3GoodName, |
kUniform3Size, |
kUniform3Type, |
kUniform3FakeLocation, |
kUniform3RealLocation, |
+ kUniform3GoodName, |
}, |
}; |
const size_t kNumAttribs= arraysize(kAttribs); |
@@ -1144,25 +968,25 @@ TEST_F(ProgramManagerWithShaderTest, ClearWithSamplerTypes) { |
}; |
ProgramManagerWithShaderTest::UniformInfo kUniforms[] = { |
{ kUniform1Name, |
- kUniform1Name, |
kUniform1Size, |
kUniform1Type, |
kUniform1FakeLocation, |
kUniform1RealLocation, |
+ kUniform1Name, |
}, |
{ kUniform2Name, |
- kUniform2Name, |
kUniform2Size, |
kSamplerTypes[ii], |
kUniform2FakeLocation, |
kUniform2RealLocation, |
+ kUniform2Name, |
}, |
{ kUniform3BadName, |
- kUniform3GoodName, |
kUniform3Size, |
kUniform3Type, |
kUniform3FakeLocation, |
kUniform3RealLocation, |
+ kUniform3GoodName, |
}, |
}; |
const size_t kNumAttribs = arraysize(kAttribs); |