File: TestCameraTool.py

package info (click to toggle)
uranium 5.0.0-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,304 kB
  • sloc: python: 31,765; sh: 132; makefile: 12
file content (74 lines) | stat: -rw-r--r-- 2,902 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

from unittest.mock import patch, MagicMock
import sys
import os

from UM.Event import MouseEvent

sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))

# Workaround for a race condition on certain systems where there
# is a race condition between Arcus and PyQt. Importing Arcus
# first seems to prevent Sip from going into a state where it
# tries to create PyQt objects on a non-main thread.
import pyArcus as Arcus  # @UnusedImport

from UM.Math.Vector import Vector
import CameraTool
import pytest


mocked_scene = MagicMock()


def generateMouseEvent(left: bool, middle: bool, right: bool):
    event = MagicMock()
    event.buttons = []
    if left:
        event.buttons.append(MouseEvent.LeftButton)
    if middle:
        event.buttons.append(MouseEvent.MiddleButton)
    if right:
        event.buttons.append(MouseEvent.RightButton)
    return event


@pytest.fixture()
def camera_tool():
    application = MagicMock()
    controller = MagicMock()
    application.getController = MagicMock(return_value = controller)
    controller.getScene = MagicMock(return_value = mocked_scene)
    mocked_scene.reset_mock()
    with patch("UM.Application.Application.getInstance", MagicMock(return_value = application)):
        return CameraTool.CameraTool()


def test_setOrigin(camera_tool):
    # Isolation, we just want to know it gets called with the right data.
    camera_tool._rotateCamera = MagicMock()
    camera_tool.setOrigin(Vector(1, 2, 3))

    assert camera_tool.getOrigin() == Vector(1, 2, 3)
    camera_tool._rotateCamera.assert_called_with(0, 0)


@pytest.mark.parametrize("event, result", [(generateMouseEvent(True, False, False), False),
                                           (generateMouseEvent(False, True, False), True),
                                           (generateMouseEvent(False, False, True), False),
                                           (generateMouseEvent(True, False, True), False),
                                           (generateMouseEvent(False, False, False), False),
                                           ])
def test_moveEvent(camera_tool, event, result):
    assert camera_tool.moveEvent(event) == result


@pytest.mark.parametrize("event, result", [(generateMouseEvent(True, False, False), True),
                                           (generateMouseEvent(False, True, False), True),
                                           (generateMouseEvent(False, False, True), True),
                                           (generateMouseEvent(True, False, True), True),
                                           (generateMouseEvent(False, False, False), False),  # Only the no button pressed case should be false
                                           ])
def test_moveEventShiftActive(camera_tool, event, result):
    camera_tool._shift_is_active = True
    assert camera_tool.moveEvent(event) == result