import pytest from unittest.mock import patch, MagicMock import OpenGL.GL as gl def test_shader_manager_fbo_initialization(): with patch("src.shader_manager.gl") as mock_gl: mock_gl.glGenFramebuffers.side_effect = [1, 2] mock_gl.glGenTextures.side_effect = [3, 4] mock_gl.glCheckFramebufferStatus.return_value = mock_gl.GL_FRAMEBUFFER_COMPLETE from src.shader_manager import ShaderManager manager = ShaderManager() manager.setup_capture_fbo(800, 600) assert manager.scene_fbo == 1 assert manager.blur_fbo == 2 assert manager.scene_tex == 3 assert manager.blur_tex == 4 assert mock_gl.glGenFramebuffers.call_count == 2 assert mock_gl.glGenTextures.call_count == 2 assert mock_gl.glCheckFramebufferStatus.call_count == 2 def test_shader_manager_capture_lifecycle(): with patch("src.shader_manager.gl") as mock_gl: mock_gl.glCheckFramebufferStatus.return_value = mock_gl.GL_FRAMEBUFFER_COMPLETE mock_gl.glGenFramebuffers.side_effect = [1, 2] mock_gl.glGenTextures.side_effect = [3, 4] from src.shader_manager import ShaderManager manager = ShaderManager() # Ensure setup is called on first capture manager.capture_begin(1024, 768) assert manager.fbo_width == 1024 assert manager.fbo_height == 768 # Should bind the blur FBO mock_gl.glBindFramebuffer.assert_any_call(mock_gl.GL_FRAMEBUFFER, manager.blur_fbo) mock_gl.glBindFramebuffer.reset_mock() manager.capture_end() # Verify unbind (glBindFramebuffer(..., 0)) mock_gl.glBindFramebuffer.assert_called_with(mock_gl.GL_FRAMEBUFFER, 0)