1
2import pytest
3from unittest.mock import patch, mock_open, MagicMock
4
5from UM.View.GL.OpenGLContext import OpenGLContext
6
7context_without_extensions = MagicMock()
8context_without_extensions.hasExtension = MagicMock(return_value = False)
9
10context_with_extensions = MagicMock()
11context_with_extensions.hasExtension = MagicMock(return_value = True)
12
13
14def test_setContext():
15    surface_format = MagicMock()
16    opengl_context = MagicMock()
17    opengl_context.create = MagicMock(return_value = True)
18    with patch("UM.View.GL.OpenGLContext.QSurfaceFormat", MagicMock(return_value = surface_format)):
19        with patch("UM.View.GL.OpenGLContext.QOpenGLContext", MagicMock(return_value=opengl_context)):
20            assert OpenGLContext.setContext(1,2) == opengl_context
21            opengl_context.setFormat.assert_called_once_with(surface_format)
22
23
24def test_setContext_failed():
25    surface_format = MagicMock()
26    opengl_context = MagicMock()
27    opengl_context.create = MagicMock(return_value=False)
28    with patch("UM.View.GL.OpenGLContext.QSurfaceFormat", MagicMock(return_value=surface_format)):
29        with patch("UM.View.GL.OpenGLContext.QOpenGLContext", MagicMock(return_value=opengl_context)):
30            assert OpenGLContext.setContext(1, 2) is None
31
32
33@pytest.mark.parametrize("context, major_version, minor_version, result", [(context_with_extensions, 4, 1, True),
34                                                                           (context_with_extensions, 5, 0, True),
35                                                                           (context_with_extensions, 3, 0, True),
36                                                                           (context_without_extensions, 3, 0, False),
37                                                                           (context_without_extensions, 4, 1, True)])
38def test_supportsVertexArrayObjects(context, major_version, minor_version, result):
39    OpenGLContext.major_version = major_version
40    OpenGLContext.minor_version = major_version
41    assert OpenGLContext.supportsVertexArrayObjects(context) == result
42
43
44@pytest.mark.parametrize("major_version, minor_version, result", [(3, 9009, True),
45                                                                  (4, 0, True),
46                                                                  (4, 1, False),
47                                                                  (5, 2, False)])
48def test_isLegacyOpenGl(major_version, minor_version, result):
49    OpenGLContext.major_version = major_version
50    OpenGLContext.minor_version = minor_version
51    assert OpenGLContext.isLegacyOpenGL() == result
52