Source code for picogl.tests.test_shader_context

"""Tests for shader gl context guards."""

import unittest
from unittest.mock import patch

from picogl.backend.modern.core.shader.program import ShaderProgram
from picogl.shaders.manager import ShaderManager


[docs] class TestShaderContext(unittest.TestCase): @patch( "picogl.backend.modern.core.shader.context.gl_context_available", return_value=False, )
[docs] def test_shader_program_bind_requires_context(self, _avail): program = ShaderProgram(shader_name="test") program.program = 1 with self.assertRaises(RuntimeError): program.bind()
@patch( "picogl.backend.modern.core.shader.context.gl_context_available", return_value=True, ) @patch( "picogl.backend.modern.core.shader.context.program_is_valid", return_value=False, )
[docs] def test_shader_program_bind_rejects_invalid_program(self, _valid, _avail): program = ShaderProgram(shader_name="test") program.program = 99 with self.assertRaises(RuntimeError): program.bind()
@patch( "picogl.shaders.manager.gl_context_available", return_value=False, )
[docs] def test_initialize_shaders_defers_without_context(self, _avail): manager = ShaderManager() manager.initialize_shaders(shader_dir="/tmp") self.assertFalse(manager._initialized) self.assertEqual(len(manager.shaders), 0)
@patch( "picogl.backend.modern.core.shader.context.gl_context_available", return_value=False, )
[docs] def test_use_shader_type_returns_false_without_context(self, _avail): manager = ShaderManager() from picogl.shaders.type import ShaderType result = manager.use_shader_type(ShaderType.DEFAULT) self.assertFalse(result)
@patch("picogl.shaders.manager.gl_context_available", return_value=True)
[docs] def test_initialize_shaders_does_not_recurse_when_bind_fails(self, _avail): manager = ShaderManager() def _fake_load(shader_type, shader_number): manager.shaders[shader_type] = ShaderProgram(shader_name=shader_type.value) with patch.object(manager, "load_shader", side_effect=_fake_load): with patch.object( ShaderProgram, "bind", side_effect=RuntimeError("bind failed"), ): manager.initialize_shaders(shader_dir="/tmp") self.assertFalse(manager._initialized) self.assertFalse(manager._initializing)
if __name__ == "__main__": unittest.main()