sequence control in tests using gmock

This commit is contained in:
ExMix 2013-11-15 16:54:25 +03:00 committed by Alex Zolotarev
parent b7b3163b92
commit b589672254
2 changed files with 111 additions and 94 deletions

View file

@ -11,95 +11,86 @@
using namespace emul;
using ::testing::_;
using ::testing::Return;
using ::testing::IgnoreResult;
using ::testing::InSequence;
UNIT_TEST(CreateDestroyDataBufferTest)
{
InSequence s;
EXPECTGL(glGenBuffer()).WillOnce(Return(1));
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer)).Times(1);
EXPECTGL(glBufferData(GLConst::GLArrayBuffer, 3 * 100 * sizeof(float), NULL, GLConst::GLStaticDraw)).Times(1);
EXPECTGL(glBindBuffer(0, GLConst::GLArrayBuffer)).Times(1);
GLBuffer * buffer = new DataBuffer(3 * sizeof(float), 100);
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer));
EXPECTGL(glBufferData(GLConst::GLArrayBuffer, 3 * 100 * sizeof(float), NULL, GLConst::GLStaticDraw));
EXPECTGL(glDeleteBuffer(1));
EXPECTGL(glBindBuffer(0, GLConst::GLArrayBuffer)).Times(1);
EXPECTGL(glDeleteBuffer(1)).Times(1);
GLBuffer * buffer = new DataBuffer(3 * sizeof(float), 100);
delete buffer;
}
UNIT_TEST(CreateDestroyIndexBufferTest)
{
InSequence s;
EXPECTGL(glGenBuffer()).WillOnce(Return(1));
EXPECTGL(glBindBuffer(1, GLConst::GLElementArrayBuffer)).Times(1);
EXPECTGL(glBufferData(GLConst::GLElementArrayBuffer, 100 * sizeof(uint16_t), NULL, GLConst::GLStaticDraw)).Times(1);
EXPECTGL(glBindBuffer(0, GLConst::GLElementArrayBuffer)).Times(1);
GLBuffer * buffer = new IndexBuffer(100);
EXPECTGL(glBindBuffer(1, GLConst::GLElementArrayBuffer));
EXPECTGL(glBufferData(GLConst::GLElementArrayBuffer, 100 * sizeof(uint16_t), NULL, GLConst::GLStaticDraw));
EXPECTGL(glDeleteBuffer(1));
EXPECTGL(glBindBuffer(0, GLConst::GLElementArrayBuffer)).Times(1);
EXPECTGL(glDeleteBuffer(1)).Times(1);
GLBuffer * buffer = new IndexBuffer(100);
delete buffer;
}
UNIT_TEST(UploadDataTest)
{
EXPECTGL(glGenBuffer()).WillOnce(Return(1));
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer)).Times(1);
EXPECTGL(glBufferData(GLConst::GLArrayBuffer, 3 * 100 * sizeof(float), NULL, GLConst::GLStaticDraw)).Times(1);
EXPECTGL(glBindBuffer(0, GLConst::GLArrayBuffer)).Times(1);
GLBuffer * buffer = new GLBuffer(GLBuffer::ElementBuffer, 3 * sizeof(float), 100);
float data[3 * 100];
for (int i = 0; i < 3 * 100; ++i)
data[i] = (float)i;
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer)).Times(1);
InSequence s;
EXPECTGL(glGenBuffer()).WillOnce(Return(1));
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer));
EXPECTGL(glBufferData(GLConst::GLArrayBuffer, 3 * 100 * sizeof(float), NULL, GLConst::GLStaticDraw));
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer));
EXPECTGL(glBufferSubData(GLConst::GLArrayBuffer, 3 * 100 * sizeof(float), data, 0));
EXPECTGL(glBindBuffer(0, GLConst::GLArrayBuffer)).Times(1);
buffer->UploadData(data, 100);
EXPECTGL(glDeleteBuffer(1));
EXPECTGL(glBindBuffer(0, GLConst::GLArrayBuffer)).Times(1);
EXPECTGL(glDeleteBuffer(1)).Times(1);
GLBuffer * buffer = new GLBuffer(GLBuffer::ElementBuffer, 3 * sizeof(float), 100);
buffer->UploadData(data, 100);
delete buffer;
}
UNIT_TEST(ParticalUploadDataTest)
{
EXPECTGL(glGenBuffer()).WillOnce(Return(1));
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer)).Times(1);
EXPECTGL(glBufferData(GLConst::GLArrayBuffer, 3 * 100 * sizeof(float), NULL, GLConst::GLStaticDraw)).Times(1);
EXPECTGL(glBindBuffer(0, GLConst::GLArrayBuffer)).Times(1);
GLBuffer * buffer = new GLBuffer(GLBuffer::ElementBuffer, 3 * sizeof(float), 100);
TEST_EQUAL(buffer->GetCapacity(), 100, ());
TEST_EQUAL(buffer->GetAvailableSize(), 100, ());
TEST_EQUAL(buffer->GetCurrentSize(), 0, ());
float part1Data[3 * 30];
for (int i = 0; i < 3 * 30; ++i)
part1Data[i] = (float)i;
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer)).Times(1);
EXPECTGL(glBufferSubData(GLConst::GLArrayBuffer, 3 * 30 * sizeof(float), part1Data, 0));
EXPECTGL(glBindBuffer(0, GLConst::GLArrayBuffer)).Times(1);
buffer->UploadData(part1Data, 30);
TEST_EQUAL(buffer->GetCapacity(), 100, ());
TEST_EQUAL(buffer->GetAvailableSize(), 70, ());
TEST_EQUAL(buffer->GetCurrentSize(), 30, ());
float part2Data[3 * 70];
for (int i = 0; i < 3 * 100; ++i)
part2Data[i] = (float)i;
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer)).Times(1);
InSequence s;
EXPECTGL(glGenBuffer()).WillOnce(Return(1));
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer));
EXPECTGL(glBufferData(GLConst::GLArrayBuffer, 3 * 100 * sizeof(float), NULL, GLConst::GLStaticDraw));
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer));
EXPECTGL(glBufferSubData(GLConst::GLArrayBuffer, 3 * 30 * sizeof(float), part1Data, 0));
EXPECTGL(glBindBuffer(1, GLConst::GLArrayBuffer));
EXPECTGL(glBufferSubData(GLConst::GLArrayBuffer, 3 * 70 * sizeof(float), part2Data, 3 * 30 * sizeof(float)));
EXPECTGL(glBindBuffer(0, GLConst::GLArrayBuffer)).Times(1);
buffer->UploadData(part2Data , 70);
EXPECTGL(glDeleteBuffer(1));
GLBuffer * buffer = new GLBuffer(GLBuffer::ElementBuffer, 3 * sizeof(float), 100);
TEST_EQUAL(buffer->GetCapacity(), 100, ());
TEST_EQUAL(buffer->GetAvailableSize(), 100, ());
TEST_EQUAL(buffer->GetCurrentSize(), 0, ());
buffer->UploadData(part1Data, 30);
TEST_EQUAL(buffer->GetCapacity(), 100, ());
TEST_EQUAL(buffer->GetAvailableSize(), 70, ());
TEST_EQUAL(buffer->GetCurrentSize(), 30, ());
buffer->UploadData(part2Data , 70);
TEST_EQUAL(buffer->GetCapacity(), 100, ());
TEST_EQUAL(buffer->GetAvailableSize(), 0, ());
TEST_EQUAL(buffer->GetCurrentSize(), 100, ());
EXPECTGL(glBindBuffer(0, GLConst::GLArrayBuffer)).Times(1);
EXPECTGL(glDeleteBuffer(1)).Times(1);
delete buffer;
}

View file

@ -12,6 +12,7 @@ using ::testing::Return;
using ::testing::AnyOf;
using ::testing::IgnoreResult;
using ::testing::Invoke;
using ::testing::InSequence;
namespace
{
@ -45,106 +46,131 @@ namespace
UNIT_TEST(UniformValueTest)
{
const uint32_t VertexShaderID = 1;
const uint32_t FragmentShaderID = 2;
const uint32_t ProgramID = 3;
const int32_t positionLoc = 10;
const int32_t modelViewLoc = 11;
ShaderReference vertexShader("", ShaderReference::VertexShader);
ShaderReference fragmentShader("", ShaderReference::FragmentShader);
// vertexShader->Ref()
EXPECTGL(glCreateShader(GLConst::GLVertexShader)).WillOnce(Return(1));
EXPECTGL(glShaderSource(1, "")).Times(1);
EXPECTGL(glCompileShader(1, _)).WillOnce(Return(true));
// fragmentShader->Ref()
EXPECTGL(glCreateShader(GLConst::GLFragmentShader)).WillOnce(Return(2));
EXPECTGL(glShaderSource(2, "")).Times(1);
EXPECTGL(glCompileShader(2, _)).WillOnce(Return(true));
float matrix[16] =
{
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
EXPECTGL(glCreateProgram()).WillOnce(Return(3));
EXPECTGL(glAttachShader(3, AnyOf(1, 2))).Times(2);
EXPECTGL(glLinkProgram(3, _)).WillOnce(Return(true));
EXPECTGL(glDetachShader(3, AnyOf(1, 2))).Times(2);
EXPECTGL(glDeleteShader(AnyOf(1, 2))).Times(2);
MemoryComparer<float> comparer(matrix, 16 * sizeof(float));
{
InSequence seq;
// vertexShader->Ref()
EXPECTGL(glCreateShader(GLConst::GLVertexShader)).WillOnce(Return(VertexShaderID));
EXPECTGL(glShaderSource(VertexShaderID, "")).Times(1);
EXPECTGL(glCompileShader(VertexShaderID, _)).WillOnce(Return(true));
// fragmentShader->Ref()
EXPECTGL(glCreateShader(GLConst::GLFragmentShader)).WillOnce(Return(FragmentShaderID));
EXPECTGL(glShaderSource(FragmentShaderID, "")).Times(1);
EXPECTGL(glCompileShader(FragmentShaderID, _)).WillOnce(Return(true));
EXPECTGL(glCreateProgram()).WillOnce(Return(ProgramID));
EXPECTGL(glAttachShader(ProgramID, VertexShaderID));
EXPECTGL(glAttachShader(ProgramID, FragmentShaderID));
EXPECTGL(glLinkProgram(ProgramID, _)).WillOnce(Return(true));
EXPECTGL(glDetachShader(ProgramID, VertexShaderID));
EXPECTGL(glDetachShader(ProgramID, FragmentShaderID));
EXPECTGL(glDeleteShader(VertexShaderID));
EXPECTGL(glDeleteShader(FragmentShaderID));
EXPECTGL(glUseProgram(ProgramID));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuei(positionLoc, 1));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuei(positionLoc, 1, 2));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuei(positionLoc, 1, 2, 3));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuei(positionLoc, 1, 2, 3, 4));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuef(positionLoc, 1.0f));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuef(positionLoc, 1.0f, 2.0f));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuef(positionLoc, 1.0f, 2.0f, 3.0f));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuef(positionLoc, 1.0f, 2.0f, 3.0f, 4.0f));
EXPECTGL(glGetUniformLocation(ProgramID, "viewModel")).WillOnce(Return(modelViewLoc));
EXPECTGL(glUniformMatrix4x4Value(modelViewLoc, _))
.WillOnce(Invoke(&comparer, &MemoryComparer<float>::Compare));
EXPECTGL(glUseProgram(0));
EXPECTGL(glDeleteProgram(ProgramID));
}
GpuProgram * program = new GpuProgram(ReferencePoiner<ShaderReference>(&vertexShader),
ReferencePoiner<ShaderReference>(&fragmentShader));
EXPECTGL(glUseProgram(3)).Times(1);
program->Bind();
{
EXPECTGL(glGetUniformLocation(3, "position")).WillOnce(Return(3));
EXPECTGL(glUniformValuei(3, 1)).Times(1);
UniformValue v("position", 1);
v.Apply(ReferencePoiner<GpuProgram>(program));
}
{
EXPECTGL(glGetUniformLocation(3, "position")).WillOnce(Return(3));
EXPECTGL(glUniformValuei(3, 1, 2)).Times(1);
UniformValue v("position", 1, 2);
v.Apply(ReferencePoiner<GpuProgram>(program));
}
{
EXPECTGL(glGetUniformLocation(3, "position")).WillOnce(Return(3));
EXPECTGL(glUniformValuei(3, 1, 2, 3)).Times(1);
UniformValue v("position", 1, 2, 3);
v.Apply(ReferencePoiner<GpuProgram>(program));
}
{
EXPECTGL(glGetUniformLocation(3, "position")).WillOnce(Return(3));
EXPECTGL(glUniformValuei(3, 1, 2, 3, 4)).Times(1);
UniformValue v("position", 1, 2, 3, 4);
v.Apply(ReferencePoiner<GpuProgram>(program));
}
{
EXPECTGL(glGetUniformLocation(3, "position")).WillOnce(Return(3));
EXPECTGL(glUniformValuef(3, 1.0f)).Times(1);
UniformValue v("position", 1.0f);
v.Apply(ReferencePoiner<GpuProgram>(program));
}
{
EXPECTGL(glGetUniformLocation(3, "position")).WillOnce(Return(3));
EXPECTGL(glUniformValuef(3, 1.0f, 2.0f)).Times(1);
UniformValue v("position", 1.0f, 2.0f);
v.Apply(ReferencePoiner<GpuProgram>(program));
}
{
EXPECTGL(glGetUniformLocation(3, "position")).WillOnce(Return(3));
EXPECTGL(glUniformValuef(3, 1.0f, 2.0f, 3.0f)).Times(1);
UniformValue v("position", 1.0f, 2.0f, 3.0f);
v.Apply(ReferencePoiner<GpuProgram>(program));
}
{
EXPECTGL(glGetUniformLocation(3, "position")).WillOnce(Return(3));
EXPECTGL(glUniformValuef(3, 1.0f, 2.0f, 3.0f, 4.0f)).Times(1);
UniformValue v("position", 1.0f, 2.0f, 3.0f, 4.0f);
v.Apply(ReferencePoiner<GpuProgram>(program));
}
{
float matrix[16] =
{
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
MemoryComparer<float> comparer(matrix, 16 * sizeof(float));
EXPECTGL(glGetUniformLocation(3, "viewModel")).WillOnce(Return(4));
EXPECTGL(glUniformMatrix4x4Value(4, _))
.WillOnce(Invoke(&comparer, &MemoryComparer<float>::Compare));
UniformValue v("viewModel", matrix);
v.Apply(ReferencePoiner<GpuProgram>(program));
}
EXPECTGL(glUseProgram(0)).Times(1);
EXPECTGL(glDeleteProgram(3)).Times(1);
delete program;
}