forked from organicmaps/organicmaps-tmp
sequence control in tests using gmock
This commit is contained in:
parent
b7b3163b92
commit
b589672254
2 changed files with 111 additions and 94 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue