FreeCAD

Форк
0
/
regression_tests.py 
130 строк · 4.5 Кб
1
from FreeCAD import Vector, Base, newDocument, closeDocument
2
import Part
3
import Sketcher
4

5
import unittest
6

7
class RegressionTests(unittest.TestCase):
8

9
    # pylint: disable=attribute-defined-outside-init
10

11
    def setUp(self):
12
        """Create a document for each test in the test suite"""
13
        self.Doc = newDocument("PartRegressionTest." + self._testMethodName)
14
        self.KeepTestDoc = False
15

16
    def test_issue_4456(self):
17
        """
18
        0004456: Regression : Part.Plane.Intersect does not accept plane as argument
19
        """
20
        p1 = Part.Plane()
21
        p2 = Part.Plane(Vector(0, 0, 0), Vector(1, 0, 0))
22

23
        result = p1.intersect(p2)
24
        line = result.pop()
25
        self.assertEqual(line.Location, Vector(0, 0, 0))
26
        self.assertEqual(line.Direction, Vector(0, 1, 0))
27
        # We should now have empty list...
28
        with self.assertRaises(IndexError):
29
            result.pop()
30

31
    def test_issue_15735(self):
32
        """
33
        15735: Point in sketch as loft profile won't work in dev, but works in stable
34
        The following test is a simplified version of the issue, but the outcome is the same
35
        """
36

37
        # Arrange
38
        ArcSketch = self.Doc.addObject("Sketcher::SketchObject", "ArcSketch")
39
        ArcSketch.Placement = Base.Placement(
40
            Base.Vector(0.000000, 0.000000, 0.000000),
41
            Base.Rotation(0.500000, 0.500000, 0.500000, 0.500000),
42
        )
43
        ArcSketch.MapMode = "Deactivated"
44

45
        geoList = []
46
        geoList.append(
47
            Part.ArcOfCircle(
48
                Part.Circle(
49
                    Base.Vector(0.000000, 0.000000, 0.000000),
50
                    Base.Vector(0.000000, 0.000000, 1.000000),
51
                    10.000000,
52
                ),
53
                3.141593,
54
                6.283185,
55
            )
56
        )
57
        ArcSketch.addGeometry(geoList, False)
58
        del geoList
59

60
        constraintList = []
61
        ArcSketch.addConstraint(Sketcher.Constraint("Radius", 0, 10.000000))
62
        constraintList.append(Sketcher.Constraint("Coincident", 0, 3, -1, 1))
63
        constraintList.append(Sketcher.Constraint("PointOnObject", 0, 2, -1))
64
        constraintList.append(Sketcher.Constraint("PointOnObject", 0, 1, -1))
65
        ArcSketch.addConstraint(constraintList)
66
        del constraintList
67

68
        self.Doc.recompute()
69

70
        PointSketch = self.Doc.addObject("Sketcher::SketchObject", "PointSketch")
71
        PointSketch.Placement = Base.Placement(
72
            Base.Vector(-10.000000, 0.000000, 0.000000),
73
            Base.Rotation(0.500000, 0.500000, 0.500000, 0.500000),
74
        )
75
        PointSketch.MapMode = "Deactivated"
76

77
        PointSketch.addGeometry(Part.Point(Base.Vector(0.000000, 0.000000, 0)))
78

79
        PointSketch.addConstraint(Sketcher.Constraint("Coincident", 0, 1, -1, 1))
80

81
        self.Doc.recompute()
82

83
        Loft = self.Doc.addObject("Part::Loft", "Loft")
84
        Loft.Sections = [
85
            ArcSketch,
86
            PointSketch,
87
        ]
88
        Loft.Solid = False
89
        Loft.Ruled = False
90
        Loft.Closed = False
91

92
        # Act
93
        self.Doc.recompute()
94

95
        # Assert
96
        self.assertTrue(Loft.isValid())
97
        self.KeepTestDoc = not Loft.isValid()
98

99
    def test_OptimalBox(self):
100
        box = Part.makeBox(1, 1, 1)
101
        self.assertTrue(box.optimalBoundingBox(True, False).isValid())
102

103
    def test_CircularReference(self):
104

105
        cube = self.Doc.addObject("Part::Box","Cube")
106
        cube.setExpression('Length', 'Width + 10mm')
107
        with self.assertRaises(RuntimeError) as context:
108
            cube.setExpression('Width', 'Length + 10mm')
109
        assert "Width reference creates a cyclic dependency." in str(context.exception)
110

111
        cube.setExpression('.Placement.Base.x', '.Placement.Base.y + 10mm')
112
        with self.assertRaises(RuntimeError) as context:
113
            cube.setExpression('.Placement.Base.y', '.Placement.Base.x + 10mm')
114
        assert ".Placement.Base.y reference creates a cyclic dependency." in str(context.exception)
115

116
        cube.recompute()
117
        v1 = cube.Placement.Base
118
        cube.recompute()
119
        assert cube.Placement.Base.isEqual(v1,1e-6)
120

121
    def tearDown(self):
122
        """Clean up our test, optionally preserving the test document"""
123
        # This flag allows doing something like this:
124
        #   self.KeepTestDoc = True
125
        #   import TestApp
126
        #   TestApp.Test("TestPartApp.RegressionTests.test_issue_15735")
127
        # to leave the test document(s) around for further examination in an interactive setting.
128
        if hasattr(self, "KeepTestDoc") and self.KeepTestDoc:
129
            return
130
        closeDocument(self.Doc.Name)
131

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.