diff --git a/engine/src/flutter/impeller/renderer/backend/gles/test/mock_gles.cc b/engine/src/flutter/impeller/renderer/backend/gles/test/mock_gles.cc index c62ff4fe71..71133e6f2f 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/test/mock_gles.cc +++ b/engine/src/flutter/impeller/renderer/backend/gles/test/mock_gles.cc @@ -39,13 +39,23 @@ auto const kExtensions = std::vector{ }; namespace { + +template +struct function_traits; + +template +struct function_traits { + using return_type = Ret; +}; + template -void CallMockMethod(Func func, Args&&... args) { +auto CallMockMethod(Func func, Args&&... args) { if (auto mock_gles = g_mock_gles.lock()) { if (mock_gles->GetImpl()) { - (mock_gles->GetImpl()->*func)(std::forward(args)...); + return (mock_gles->GetImpl()->*func)(std::forward(args)...); } } + return typename function_traits::return_type(); } } // namespace @@ -194,6 +204,13 @@ void mockObjectLabelKHR(GLenum identifier, static_assert(CheckSameSignature::value); +GLboolean mockIsTexture(GLuint texture) { + return CallMockMethod(&IMockGLESImpl::IsTexture, texture); +} + +static_assert(CheckSameSignature::value); + // static std::shared_ptr MockGLES::Init( std::unique_ptr impl, @@ -257,6 +274,8 @@ const ProcTableGLES::Resolver kMockResolverGLES = [](const char* name) { return reinterpret_cast(mockObjectLabelKHR); } else if (strcmp(name, "glGenBuffers") == 0) { return reinterpret_cast(mockGenBuffers); + } else if (strcmp(name, "glIsTexture") == 0) { + return reinterpret_cast(mockIsTexture); } else { return reinterpret_cast(&doNothing); } diff --git a/engine/src/flutter/impeller/renderer/backend/gles/test/mock_gles.h b/engine/src/flutter/impeller/renderer/backend/gles/test/mock_gles.h index 681b894ac4..d7d424e6e7 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/test/mock_gles.h +++ b/engine/src/flutter/impeller/renderer/backend/gles/test/mock_gles.h @@ -36,6 +36,7 @@ class IMockGLESImpl { GLuint64* result) {} virtual void DeleteQueriesEXT(GLsizei size, const GLuint* queries) {} virtual void GenBuffers(GLsizei n, GLuint* buffers) {} + virtual GLboolean IsTexture(GLuint texture) { return true; } }; class MockGLESImpl : public IMockGLESImpl { @@ -70,6 +71,7 @@ class MockGLESImpl : public IMockGLESImpl { (GLsizei size, const GLuint* queries), (override)); MOCK_METHOD(void, GenBuffers, (GLsizei n, GLuint* buffers), (override)); + MOCK_METHOD(GLboolean, IsTexture, (GLuint texture), (override)); }; /// @brief Provides a mocked version of the |ProcTableGLES| class. diff --git a/engine/src/flutter/impeller/renderer/backend/gles/test/reactor_unittests.cc b/engine/src/flutter/impeller/renderer/backend/gles/test/reactor_unittests.cc index da8c419083..86323b268f 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/test/reactor_unittests.cc +++ b/engine/src/flutter/impeller/renderer/backend/gles/test/reactor_unittests.cc @@ -17,6 +17,7 @@ namespace impeller { namespace testing { using ::testing::_; +using ::testing::NiceMock; class TestWorker : public ReactorGLES::Worker { public: @@ -96,13 +97,14 @@ TEST(ReactorGLES, UntrackedHandle) { } TEST(ReactorGLES, NameUntrackedHandle) { - auto mock_gles_impl = std::make_unique(); + auto mock_gles_impl = std::make_unique>(); EXPECT_CALL(*mock_gles_impl, GenTextures(1, _)) .WillOnce([](GLsizei size, GLuint* queries) { queries[0] = 1234; }); EXPECT_CALL(*mock_gles_impl, ObjectLabelKHR(_, 1234, _, ::testing::StrEq("hello, joe!"))) .Times(1); + ON_CALL(*mock_gles_impl, IsTexture).WillByDefault(::testing::Return(GL_TRUE)); std::shared_ptr mock_gles = MockGLES::Init(std::move(mock_gles_impl));