1 // 2 // Copyright 2015 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. 5 // 6 // angle_unittests_utils.h: 7 // Helpers for mocking and unit testing. 8 9 #ifndef TESTS_ANGLE_UNITTESTS_UTILS_H_ 10 #define TESTS_ANGLE_UNITTESTS_UTILS_H_ 11 12 #include "libANGLE/Surface.h" 13 #include "libANGLE/renderer/ContextImpl.h" 14 #include "libANGLE/renderer/EGLImplFactory.h" 15 #include "libANGLE/renderer/GLImplFactory.h" 16 17 namespace rx 18 { 19 20 // Useful when mocking a part of the GLImplFactory class 21 class NullFactory : public GLImplFactory 22 { 23 public: NullFactory()24 NullFactory() {} 25 26 // Shader creation createCompiler()27 CompilerImpl *createCompiler() override { return nullptr; } createShader(const gl::ShaderState & data)28 ShaderImpl *createShader(const gl::ShaderState &data) override { return nullptr; } createProgram(const gl::ProgramState & data)29 ProgramImpl *createProgram(const gl::ProgramState &data) override { return nullptr; } createProgramExecutable(const gl::ProgramExecutable * executable)30 ProgramExecutableImpl *createProgramExecutable(const gl::ProgramExecutable *executable) override 31 { 32 return nullptr; 33 } 34 35 // Framebuffer creation createFramebuffer(const gl::FramebufferState & data)36 FramebufferImpl *createFramebuffer(const gl::FramebufferState &data) override 37 { 38 return nullptr; 39 } 40 41 // Texture creation createTexture(const gl::TextureState & data)42 TextureImpl *createTexture(const gl::TextureState &data) override { return nullptr; } 43 44 // Renderbuffer creation createRenderbuffer(const gl::RenderbufferState & state)45 RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) override 46 { 47 return nullptr; 48 } 49 50 // Buffer creation createBuffer(const gl::BufferState & state)51 BufferImpl *createBuffer(const gl::BufferState &state) override { return nullptr; } 52 53 // Vertex Array creation createVertexArray(const gl::VertexArrayState & data)54 VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override 55 { 56 return nullptr; 57 } 58 59 // Query and Fence creation createQuery(gl::QueryType type)60 QueryImpl *createQuery(gl::QueryType type) override { return nullptr; } createFenceNV()61 FenceNVImpl *createFenceNV() override { return nullptr; } createSync()62 SyncImpl *createSync() override { return nullptr; } 63 64 // Transform Feedback creation createTransformFeedback(const gl::TransformFeedbackState & state)65 TransformFeedbackImpl *createTransformFeedback(const gl::TransformFeedbackState &state) override 66 { 67 return nullptr; 68 } 69 70 // Sampler object creation createSampler(const gl::SamplerState & state)71 SamplerImpl *createSampler(const gl::SamplerState &state) override { return nullptr; } 72 73 // Program Pipeline creation createProgramPipeline(const gl::ProgramPipelineState & data)74 ProgramPipelineImpl *createProgramPipeline(const gl::ProgramPipelineState &data) override 75 { 76 return nullptr; 77 } 78 createSemaphore()79 SemaphoreImpl *createSemaphore() override { return nullptr; } 80 createOverlay(const gl::OverlayState & state)81 OverlayImpl *createOverlay(const gl::OverlayState &state) override { return nullptr; } 82 }; 83 84 // A class with all the factory methods mocked. 85 class MockGLFactory : public GLImplFactory 86 { 87 public: 88 MOCK_METHOD1(createContext, ContextImpl *(const gl::State &)); 89 MOCK_METHOD0(createCompiler, CompilerImpl *()); 90 MOCK_METHOD1(createShader, ShaderImpl *(const gl::ShaderState &)); 91 MOCK_METHOD1(createProgram, ProgramImpl *(const gl::ProgramState &)); 92 MOCK_METHOD1(createProgramExecutable, ProgramExecutableImpl *(const gl::ProgramExecutable *)); 93 MOCK_METHOD1(createProgramPipeline, ProgramPipelineImpl *(const gl::ProgramPipelineState &)); 94 MOCK_METHOD1(createFramebuffer, FramebufferImpl *(const gl::FramebufferState &)); 95 MOCK_METHOD0(createMemoryObject, MemoryObjectImpl *()); 96 MOCK_METHOD1(createTexture, TextureImpl *(const gl::TextureState &)); 97 MOCK_METHOD1(createRenderbuffer, RenderbufferImpl *(const gl::RenderbufferState &)); 98 MOCK_METHOD1(createBuffer, BufferImpl *(const gl::BufferState &)); 99 MOCK_METHOD1(createVertexArray, VertexArrayImpl *(const gl::VertexArrayState &)); 100 MOCK_METHOD1(createQuery, QueryImpl *(gl::QueryType type)); 101 MOCK_METHOD0(createFenceNV, FenceNVImpl *()); 102 MOCK_METHOD0(createSync, SyncImpl *()); 103 MOCK_METHOD1(createTransformFeedback, 104 TransformFeedbackImpl *(const gl::TransformFeedbackState &)); 105 MOCK_METHOD1(createSampler, SamplerImpl *(const gl::SamplerState &)); 106 MOCK_METHOD0(createSemaphore, SemaphoreImpl *()); 107 MOCK_METHOD1(createOverlay, OverlayImpl *(const gl::OverlayState &)); 108 }; 109 110 class MockEGLFactory : public EGLImplFactory 111 { 112 public: 113 MOCK_METHOD3(createWindowSurface, 114 SurfaceImpl *(const egl::SurfaceState &, 115 EGLNativeWindowType, 116 const egl::AttributeMap &)); 117 MOCK_METHOD2(createPbufferSurface, 118 SurfaceImpl *(const egl::SurfaceState &, const egl::AttributeMap &)); 119 MOCK_METHOD4(createPbufferFromClientBuffer, 120 SurfaceImpl *(const egl::SurfaceState &, 121 EGLenum, 122 EGLClientBuffer, 123 const egl::AttributeMap &)); 124 MOCK_METHOD3(createPixmapSurface, 125 SurfaceImpl *(const egl::SurfaceState &, 126 NativePixmapType, 127 const egl::AttributeMap &)); 128 MOCK_METHOD4(createImage, 129 ImageImpl *(const egl::ImageState &, 130 const gl::Context *, 131 EGLenum, 132 const egl::AttributeMap &)); 133 MOCK_METHOD5(createContext, 134 ContextImpl *(const gl::State &, 135 gl::ErrorSet *, 136 const egl::Config *, 137 const gl::Context *, 138 const egl::AttributeMap &)); 139 MOCK_METHOD2(createStreamProducerD3DTexture, 140 StreamProducerImpl *(egl::Stream::ConsumerType, const egl::AttributeMap &)); 141 MOCK_METHOD1(createShareGroup, ShareGroupImpl *(const egl::ShareGroupState &)); 142 }; 143 144 } // namespace rx 145 146 #endif // TESTS_ANGLE_UNITTESTS_UTILS_H_ 147