2 // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
7 #include "gmock/gmock.h"
8 #include "gtest/gtest.h"
9 #include "libGLESv2/TransformFeedback.h"
10 #include "libGLESv2/renderer/TransformFeedbackImpl.h"
14 class MockTransformFeedbackImpl : public rx::TransformFeedbackImpl
17 virtual ~MockTransformFeedbackImpl() { destroy(); }
19 MOCK_METHOD1(begin, void(GLenum primitiveMode));
20 MOCK_METHOD0(end, void());
21 MOCK_METHOD0(pause, void());
22 MOCK_METHOD0(resume, void());
24 MOCK_METHOD0(destroy, void());
27 class TransformFeedbackTest : public testing::Test
32 mImpl = new MockTransformFeedbackImpl;
33 EXPECT_CALL(*mImpl, destroy());
34 mFeedback = new gl::TransformFeedback(mImpl, 1);
38 virtual void TearDown()
43 MockTransformFeedbackImpl* mImpl;
44 gl::TransformFeedback* mFeedback;
47 TEST_F(TransformFeedbackTest, DestructionDeletesImpl)
49 MockTransformFeedbackImpl* impl = new MockTransformFeedbackImpl;
50 EXPECT_CALL(*impl, destroy()).Times(1).RetiresOnSaturation();
52 gl::TransformFeedback* feedback = new gl::TransformFeedback(impl, 1);
56 // Only needed because the mock is leaked if bugs are present,
57 // which logs an error, but does not cause the test to fail.
58 // Ordinarily mocks are verified when destroyed.
59 testing::Mock::VerifyAndClear(impl);
62 TEST_F(TransformFeedbackTest, SideEffectsOfStartAndStop)
64 testing::InSequence seq;
66 EXPECT_EQ(GL_FALSE, mFeedback->isStarted());
67 EXPECT_CALL(*mImpl, begin(GL_TRIANGLES));
68 mFeedback->start(GL_TRIANGLES);
69 EXPECT_EQ(GL_TRUE, mFeedback->isStarted());
70 EXPECT_EQ(GL_TRIANGLES, mFeedback->getDrawMode());
71 EXPECT_CALL(*mImpl, end());
73 EXPECT_EQ(GL_FALSE, mFeedback->isStarted());
76 TEST_F(TransformFeedbackTest, SideEffectsOfPauseAndResume)
78 testing::InSequence seq;
80 EXPECT_FALSE(mFeedback->isStarted());
81 EXPECT_CALL(*mImpl, begin(GL_TRIANGLES));
82 mFeedback->start(GL_TRIANGLES);
83 EXPECT_EQ(GL_FALSE, mFeedback->isPaused());
84 EXPECT_CALL(*mImpl, pause());
86 EXPECT_EQ(GL_TRUE, mFeedback->isPaused());
87 EXPECT_CALL(*mImpl, resume());
89 EXPECT_EQ(GL_FALSE, mFeedback->isPaused());
90 EXPECT_CALL(*mImpl, end());