Salome HOME
Adjust test cases according to redesigned Arc and Circle features
[modules/shaper.git] / src / ParametersPlugin / Test / TestParameterRename.py
1 """
2     TestParameterCreation.py
3     
4     class ParametersPlugin_Parameter
5     static const std::string MY_PARAMETER_ID("Parameter");
6     static const std::string MY_VARIABLE_ID("variable");
7     static const std::string MY_EXPRESSION_ID("expression");
8     
9     data()->addAttribute(ParametersPlugin_Parameter::VARIABLE_ID(),
10                          ModelAPI_AttributeString::typeId());
11     data()->addAttribute(ParametersPlugin_Parameter::EXPRESSION_ID(),
12                          ModelAPI_AttributeString::typeId());
13                          
14     class ModelAPI_ResultParameter
15     static const std::string MY_VALUE_ID("Value");
16     static const std::string MY_VALUE_ID("State");
17 """
18
19 #=========================================================================
20 # Initialization of the test
21 #=========================================================================
22 from GeomDataAPI import *
23 from ModelAPI import *
24 import math
25 import unittest
26 from salome.shaper import model
27
28 __updated__ = "2015-04-27"
29
30 #=========================================================================
31 # Create several parameters and a feature.
32 # 1. Basic parameter definition:
33 #    x1 = 150.0, y1 = 200.0
34 # 2. Referencing between parameters:
35 #    x2 = x1 + y1 + 100.0
36 # 3. Referencing in feature SketchCircle
37 #    CircleCenter = (x1 + 10.0, x1 + 20.0), CircleRadius = x1
38 # 3. Check renaming
39 #    x1 -> a1
40 # 4. Check renaming to not unique name
41 #    x1 -> y1
42 #=========================================================================
43 class TestParameterRename(unittest.TestCase):
44     def setUp(self):
45         self.aSession = ModelAPI_Session.get()
46         self.aDocument = self.aSession.moduleDocument()
47         self.createParameters()
48         self.createFeature()
49
50     def tearDown(self):
51         #assert(model.checkPythonDump())
52         #self.aSession.closeAll()
53         pass
54
55     def createParameters(self):
56         ltNames = ["x1", "y1", "x2"]
57         ltExpressions = ["150.", "200.", "x1 + y1 + 100.0"]
58         self.dtParams = {}
59         for name, expr in zip(ltNames, ltExpressions):
60             self.aSession.startOperation()
61             aParam = self.aDocument.addFeature("Parameter")
62             aParamName = aParam.string("variable")
63             aParamName.setValue(name)
64             aParamExpr = aParam.string("expression")
65             aParamExpr.setValue(expr)
66             self.dtParams[name] = aParam
67             self.aSession.finishOperation()
68         self.assertEqual(len(self.dtParams), len(ltNames))
69
70         aParam = self.dtParams["x2"]
71         aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
72         self.assertEqual(aResultAttr.data().real("Value").value(), 450.)
73
74     def createFeature(self):
75         self.aSession.startOperation()
76         aSketchCommonFeature = self.aDocument.addFeature("Sketch")
77         aSketchFeature = featureToCompositeFeature(aSketchCommonFeature)
78         origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
79         origin.setValue(0, 0, 0)
80         dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
81         dirx.setValue(1, 0, 0)
82         norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
83         norm.setValue(0, 0, 1)
84         aSketchCircle = aSketchFeature.addFeature("SketchCircle")
85         anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
86         aRadiusAttr = aSketchCircle.real("circle_radius")
87         anCircleCentr.setValue(10., 20.)
88         aRadiusAttr.setValue(10.)
89         self.aSession.finishOperation()
90
91         self.anCircleCentr = anCircleCentr
92         self.aRadiusAttr = aRadiusAttr
93
94         # constraints to fix circle position and radius
95         self.aSession.startOperation()
96         # fix X coordinate
97         aDistanceConstraint1 = aSketchFeature.addFeature("SketchConstraintDistance")
98         refattrA = aDistanceConstraint1.refattr("ConstraintEntityA")
99         refattrA.setAttr(anCircleCentr)
100         refattrB = aDistanceConstraint1.refattr("ConstraintEntityB")
101         anOY = aSketchFeature.addFeature("SketchLine")
102         aStartPoint = geomDataAPI_Point2D(anOY.attribute("StartPoint"))
103         anEndPoint = geomDataAPI_Point2D(anOY.attribute("EndPoint"))
104         aStartPoint.setValue(0., 0.)
105         anEndPoint.setValue(0., 100.)
106         anOYRes = modelAPI_Result(self.aDocument.objectByName("Construction", "OY"))
107         anOY.selection("External").setValue(anOYRes, anOYRes.shape())
108         anOY.execute()
109         refattrB.setObject(modelAPI_ResultConstruction(anOY.firstResult()))
110         valueX = aDistanceConstraint1.real("ConstraintValue")
111         valueX.setText("x1 + 10.0")
112         aDistanceConstraint1.execute();
113         # fix Y coordinate
114         aDistanceConstraint2 = aSketchFeature.addFeature("SketchConstraintDistance")
115         refattrA = aDistanceConstraint2.refattr("ConstraintEntityA")
116         refattrA.setAttr(anCircleCentr)
117         refattrB = aDistanceConstraint2.refattr("ConstraintEntityB")
118         anOX = aSketchFeature.addFeature("SketchLine")
119         aStartPoint = geomDataAPI_Point2D(anOX.attribute("StartPoint"))
120         anEndPoint = geomDataAPI_Point2D(anOX.attribute("EndPoint"))
121         aStartPoint.setValue(0., 0.)
122         anEndPoint.setValue(100., 0.)
123         anOXRes = modelAPI_Result(self.aDocument.objectByName("Construction", "OX"))
124         anOX.selection("External").setValue(anOXRes, anOXRes.shape())
125         anOX.execute()
126         refattrB.setObject(modelAPI_ResultConstruction(anOX.firstResult()))
127         valueY = aDistanceConstraint2.real("ConstraintValue")
128         valueY.setText("x1 + 20.0")
129         aDistanceConstraint2.execute();
130         # fix radius
131         aRadiusConstraint = aSketchFeature.addFeature("SketchConstraintRadius")
132         refattrA = aRadiusConstraint.refattr("ConstraintEntityA")
133         refattrA.setObject(modelAPI_ResultConstruction(aSketchCircle.lastResult()))
134         aRadiusConstrAttr = aRadiusConstraint.real("ConstraintValue")
135         aRadiusConstrAttr.setText("x1")
136         aRadiusConstraint.execute()
137         self.aSession.finishOperation()
138
139         self.aCircleCenterX = valueX
140         self.aCircleCenterY = valueY
141         self.aCircleRadius = aRadiusConstrAttr
142
143         self.assertEqual(self.anCircleCentr.x(), 160.)
144         self.assertEqual(self.anCircleCentr.y(), 170.)
145         self.assertEqual(aRadiusAttr.value(), 150.)
146
147     def test_rename(self):
148         # Rename
149         aParam = self.dtParams["x1"]
150         aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
151         self.aSession.startOperation()
152         aResultAttr.data().setName("a1")
153         self.aSession.finishOperation()
154
155         # Check rename in the parameter 
156         self.assertEqual(aParam.name(), "a1")
157         self.assertEqual(aParam.string("variable").value(), "a1")
158         self.assertEqual(aResultAttr.data().name(), "a1")
159         # Check rename in references
160         aParam = self.dtParams["x2"]
161         self.assertEqual(aParam.string("expression").value(), "a1 + y1 + 100.0")
162         # Check rename in the feature
163         self.assertEqual(self.aCircleCenterX.text(), "a1 + 10.0")
164         self.assertEqual(self.aCircleCenterY.text(), "a1 + 20.0")
165         self.assertEqual(self.aCircleRadius.text(), "a1")
166         # Check values
167         self.assertEqual(self.anCircleCentr.x(), 160.)
168         self.assertEqual(self.anCircleCentr.y(), 170.)
169         self.assertEqual(self.aRadiusAttr.value(), 150.)
170
171     def test_rename_not_unique(self):
172         # Rename to not unique name
173         aParam = self.dtParams["x1"]
174         aParamX1 = aParam
175         aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
176         self.aSession.startOperation() # don't finish operation until feature is valid (real case)
177         aResultAttr.data().setName("y1")
178         # Check rename in the parameter (Expected: renamed, but invalid)
179         self.assertEqual(aParam.name(), "y1")
180         validators = ModelAPI_Session.get().validators()
181         self.assertEqual(validators.validate(aParamX1), False)
182         # Check rename in references (Expected: not renamed)
183         aParam = self.dtParams["x2"]
184         self.assertEqual(aParam.string("expression").value(), "x1 + y1 + 100.0")
185         # Check rename in the feature (Expected: not renamed)
186         self.assertEqual(self.aCircleCenterX.text(), "x1 + 10.0")
187         self.assertEqual(self.aCircleCenterY.text(), "x1 + 20.0")
188         self.assertEqual(self.aCircleRadius.text(), "x1")
189         # Check values
190         self.assertEqual(self.anCircleCentr.x(), 160.)
191         self.assertEqual(self.anCircleCentr.y(), 170.)
192         self.assertEqual(self.aRadiusAttr.value(), 150.)
193
194         # rename to the correct one, but new
195         aResultAttr.data().setName("xx1")
196         self.aSession.finishOperation() # feature becomes valid
197         # Check rename in the parameter (Expected: renamed)
198         self.assertEqual(validators.validate(aParamX1), True)
199         self.assertEqual(aParamX1.name(), "xx1")
200         self.assertEqual(aParamX1.error(), "")
201         # Check rename in references (Expected: renamed)
202         aParam = self.dtParams["x2"]
203         self.assertEqual(aParam.string("expression").value(), "xx1 + y1 + 100.0")
204         # Check rename in the feature (Expected: renamed)
205         self.assertEqual(self.aCircleCenterX.text(), "xx1 + 10.0")
206         self.assertEqual(self.aCircleCenterY.text(), "xx1 + 20.0")
207         self.assertEqual(self.aCircleRadius.text(), "xx1")
208         # Check values
209         self.assertEqual(self.anCircleCentr.x(), 160.)
210         self.assertEqual(self.anCircleCentr.y(), 170.)
211         self.assertEqual(self.aRadiusAttr.value(), 150.)
212
213 if __name__ == '__main__':
214     unittest.main(exit=False)
215 #=========================================================================
216 # End of test
217 #=========================================================================