X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPythonAPI%2Fmodel%2Ftests%2Ftests.py;h=0a99e7c48cd65b9b897f94dd3abc75f82178712e;hb=c4eab94a20a0d93100549a210582d46409fec1cc;hp=89a120d10c05823bf2b0c41461610e8f6e0484e0;hpb=e65bf14e2ff3cf853884bf8998fadcece6e3b34c;p=modules%2Fshaper.git diff --git a/src/PythonAPI/model/tests/tests.py b/src/PythonAPI/model/tests/tests.py index 89a120d10..0a99e7c48 100644 --- a/src/PythonAPI/model/tests/tests.py +++ b/src/PythonAPI/model/tests/tests.py @@ -1,22 +1,21 @@ -## Copyright (C) 2014-2017 CEA/DEN, EDF R&D -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or (at your option) any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -## -## See http:##www.salome-platform.org/ or -## email : webmaster.salome@opencascade.com -## +# Copyright (C) 2014-2019 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# from GeomAlgoAPI import * from GeomAPI import * @@ -42,14 +41,14 @@ def generateTests(theFeature, theFeatureName, theTestsList = []): """ if "testNbResults" in theTestsList or len(theTestsList) == 0: aNbResults = len(theFeature.results()) - print "model.testNbResults({}, {})".format(theFeatureName, aNbResults) + print("model.testNbResults({}, {})".format(theFeatureName, aNbResults)) if "testNbSubResults" in theTestsList or len(theTestsList) == 0: aNbResults = len(theFeature.results()) aNbSubResults = [] for anIndex in range(0, aNbResults): aNbSubResults.append(theFeature.results()[anIndex].numberOfSubs()) - print "model.testNbSubResults({}, {})".format(theFeatureName, aNbSubResults) + print("model.testNbSubResults({}, {})".format(theFeatureName, aNbSubResults)) if "testNbSubShapes" in theTestsList or len(theTestsList) == 0: aNbResults = len(theFeature.results()) @@ -61,16 +60,16 @@ def generateTests(theFeature, theFeatureName, theTestsList = []): aShapeExplorer = GeomAPI_ShapeExplorer(aShape, aShapeType) while aShapeExplorer.more(): aNbResultSubShapes += 1 - aShapeExplorer.next(); + aShapeExplorer.next() aNbSubShapes.append(aNbResultSubShapes) - print "model.testNbSubShapes({}, {}, {})".format(theFeatureName, aShapeTypes[aShapeType], aNbSubShapes) + print("model.testNbSubShapes({}, {}, {})".format(theFeatureName, aShapeTypes[aShapeType], aNbSubShapes)) if "testResultsVolumes" in theTestsList or len(theTestsList) == 0: aNbResults = len(theFeature.results()) aResultsVolumes = [] for anIndex in range(0, aNbResults): aResultsVolumes.append(GeomAlgoAPI_ShapeTools_volume(theFeature.results()[anIndex].resultSubShapePair()[0].shape())) - print "model.testResultsVolumes({}, [{}])".format(theFeatureName, ", ".join("{:0.27f}".format(i) for i in aResultsVolumes)) + print("model.testResultsVolumes({}, [{}])".format(theFeatureName, ", ".join("{:0.27f}".format(i) for i in aResultsVolumes))) def testNbResults(theFeature, theExpectedNbResults): @@ -112,7 +111,7 @@ def testNbSubShapes(theFeature, theShapeType, theExpectedNbSubShapes): aShapeExplorer = GeomAPI_ShapeExplorer(aShape, theShapeType) while aShapeExplorer.more(): aNbResultSubShapes += 1 - aShapeExplorer.next(); + aShapeExplorer.next() assert (aNbResultSubShapes == anExpectedNbSubShapes), "Number of sub-shapes of type {} for result[{}]: {}. Expected: {}.".format(aShapeTypes[theShapeType], anIndex, aNbResultSubShapes, anExpectedNbSubShapes) @@ -130,7 +129,7 @@ def testResultsVolumes(theFeature, theExpectedResultsVolumes, theNbSignificantDi aResultVolumeStr = "{:0.27f}".format(aResultVolume).lstrip("0").lstrip(".").lstrip("0") anExpectedResultVolume = theExpectedResultsVolumes[anIndex] anExpectedResultVolumeStr = "{:0.27f}".format(anExpectedResultVolume).lstrip("0").lstrip(".").lstrip("0") - assert math.fabs(aResultVolume - anExpectedResultVolume) < aTolerance * anExpectedResultVolume, "Volume of result[{}]: {:0.27f}. Expected: {:0.27f}. The first {} significant digits not equal.".format(anIndex, aResultVolume, anExpectedResultVolume, theNbSignificantDigits) + assert math.fabs(aResultVolume - anExpectedResultVolume) < aTolerance * math.fabs(anExpectedResultVolume), "Volume of result[{}]: {:0.27f}. Expected: {:0.27f}. The first {} significant digits not equal.".format(anIndex, aResultVolume, anExpectedResultVolume, theNbSignificantDigits) def testHaveNamingFaces(theFeature, theModel, thePartDoc) : """ Tests if all faces of result have a name @@ -198,28 +197,33 @@ def testHaveNamingEdges(theFeature, theModel, thePartDoc) : assert(shape.isEdge()) assert(name != ""), "String empty" +def lowerLevelSubResults(theResult, theList): + """ Collects in a list all lover level sub-results (without children). + Auxiliary method for context correct definition. + """ + nbSubs = theResult.numberOfSubs() + if nbSubs == 0: + theList.append(theResult) + else: + for sub in range(0, nbSubs): + lowerLevelSubResults(theResult.subResult(sub), theList) + def testHaveNamingByType(theFeature, theModel, thePartDoc, theSubshapeType) : """ Tests if all sub-shapes of result have a unique name :param theFeature: feature to test. :param theSubshapeType: type of sub-shape """ + if not theFeature.results(): + return aFirstRes = theFeature.results()[0] - # Get number of sub-results - hasSubs = True - nbSubs = aFirstRes.numberOfSubs() - if nbSubs == 0: - # no sub-results => treat current result as a sub - hasSubs = False - nbSubs = 1 + aResList = [] + lowerLevelSubResults(aFirstRes, aResList) selectionList = [] shapesList = [] # to append only unique shapes (not isSame) - for sub in range(0, nbSubs): + for aR in aResList: # Get feature result/sub-result - if hasSubs: - aResult = aFirstRes.subResult(sub).resultSubShapePair()[0] - else: - aResult = aFirstRes.resultSubShapePair()[0] + aResult = aR.resultSubShapePair()[0] # Get result/sub-result shape shape = aResult.shape() # Create shape explorer with desired shape type @@ -258,6 +262,7 @@ def testHaveNamingSubshapes(theFeature, theModel, thePartDoc) : """ Tests if all vertices/edges/faces of result have a unique name :param theFeature: feature to test. """ + assert(len(theFeature.results()) > 0) testHaveNamingByType(theFeature, theModel, thePartDoc, GeomAPI_Shape.VERTEX) testHaveNamingByType(theFeature, theModel, thePartDoc, GeomAPI_Shape.EDGE) testHaveNamingByType(theFeature, theModel, thePartDoc, GeomAPI_Shape.FACE) @@ -287,8 +292,8 @@ def assertSketchArc(theArcFeature): assert math.fabs(aDistCS - aDistCE) < TOLERANCE, "Wrong arc: center-start distance {}, center-end distance {}".format(aDistCS, aDistCE) assert math.fabs(aRadius.value() -aDistCS) < TOLERANCE, "Wrong arc: radius is {0}, expected {1}".format(aRadius.value(), aDistCS) -def checkBooleansResult(theFeature,theModel,NbRes,NbSubRes,NbSolid,NbFace,NbEdge,NbVertex): - """ Tests numbers of sub-shapes in results (used in Boolean operations tests) +def checkResult(theFeature,theModel,NbRes,NbSubRes,NbSolid,NbFace,NbEdge,NbVertex): + """ Tests numbers of sub-shapes in results """ theModel.testNbResults(theFeature, NbRes) theModel.testNbSubResults(theFeature, NbSubRes) @@ -297,15 +302,6 @@ def checkBooleansResult(theFeature,theModel,NbRes,NbSubRes,NbSolid,NbFace,NbEdge theModel.testNbSubShapes(theFeature, GeomAPI_Shape.EDGE, NbEdge) theModel.testNbSubShapes(theFeature, GeomAPI_Shape.VERTEX, NbVertex) -def checkSketch(theSketch, theDOF = -1): - """ Tests the sketch is valid and DoF is equal to the given - """ - assert(theSketch.feature().error() == ""), "Sketch failed: {}".format(theSketch.feature().error()) - assert(theSketch.solverError().value() == ""), "Sketch solver failed: {}".format(theSketch.solverError().value()) - if theDOF != -1: - aDOF = sketcher.tools.dof(theSketch) - assert(aDOF == theDOF), "Sketch DoF {} is wrong. Expected {}".format(aDOF, theDOF) - def checkGroup(theGroup, theShapeType): """ Check that all selected shapes in group have correct shape type and unique name """