File: TestPointingRectangle.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 (77 lines) | stat: -rw-r--r-- 3,150 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
75
76
77
from PyQt6.QtCore import QPoint

from UM.Qt.Bindings.PointingRectangle import PointingRectangle
import pytest
from unittest.mock import MagicMock


test_validate_data_get_set = [
    {"attribute": "arrowSize", "value": "YAY"},
    {"attribute": "color", "value": "zomg"},
    {"attribute": "borderWidth", "value": 12},
    {"attribute": "borderColor", "value": "zomg!"},
    {"attribute": "target", "value": "Yourself"}
]

@pytest.mark.parametrize("data", test_validate_data_get_set)
def test_getAndSet(data):
    model = PointingRectangle()

    # Convert the first letter into a capital
    attribute = list(data["attribute"])
    attribute[0] = attribute[0].capitalize()
    attribute = "".join(attribute)

    # mock the correct emit
    setattr(model, data["attribute"] + "Changed", MagicMock())

    # Attempt to set the value
    getattr(model, "set" + attribute)(data["value"])

    # Check if signal fired.
    signal = getattr(model, data["attribute"] + "Changed")
    assert signal.emit.call_count == 1

    # Ensure that the value got set
    assert getattr(model, data["attribute"]) == data["value"]

    # Attempt to set the value again
    getattr(model, "set" + attribute)(data["value"])
    # The signal should not fire again
    assert signal.emit.call_count == 1


@pytest.mark.parametrize("width,height,target,result_points", [(0, 0, None, [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]),
                                                               (100, 20, None, [(0, 0), (0, 20), (100, 20), (100, 0), (0, 0), (0, 0), (0, 0)]),
                                                               (100, 20, QPoint(300, 10), [(0, 0), (0, 20), (100, 20), (100, 0), (100, 0), (110, 10), (100, 20)]), # Arrow on the right
                                                                (100, 20, QPoint(100, 100), [(0, 0), (0, 20), (100, 20), (100, 0), (80, 20), (90, 30), (100, 20)]),  # Arrow on bottom
                                                                (100, 20, QPoint(100, -2), [(0, 0), (0, 20), (100, 20), (100, 0), (80, 0), (90, -10), (100, 0)]), # Arrow on top
                                                                (100, 20, QPoint(-1, 0), [(0, 0), (0, 20), (100, 20), (100, 0), (0, 0), (-10, 10), (0, 20)])  # Arrow on left
                                                               ])
def test_updatePaintNode(width, height, target, result_points):
    item = PointingRectangle()

    item.setWidth(width)
    item.setHeight(height)
    if target is not None:
        item.setTarget(target)
        item.setArrowSize(10)
    mocked_node = MagicMock()
    mocked_update_data = MagicMock()

    item.updatePaintNode(mocked_node, mocked_update_data)

    assert mocked_node.removeAllChildNodes.call_count == 1
    assert mocked_node.setGeometry.call_count == 1

    geometry = mocked_node.setGeometry.call_args_list[0][0][0]
    assert len(geometry.vertexDataAsPoint2D()) == 7

    for idx, point in enumerate(result_points):
        assert comparePoint2D(geometry.vertexDataAsPoint2D()[idx], point[0], point[1])


def comparePoint2D(point, x, y):
    return point.x == x and point.y == y