From d31c0424cd423f61c6bfe795fa5e0fdc24453ca6 Mon Sep 17 00:00:00 2001 From: azv Date: Tue, 11 Dec 2018 12:37:04 +0300 Subject: [PATCH] Code coverage GeomValidators]: Improve coverage of Face and BodyShapes validators --- src/ConstructionPlugin/CMakeLists.txt | 1 + .../Test/TestPlane_FaceValidator.py | 38 +++++++++++++++++++ src/FeaturesPlugin/CMakeLists.txt | 1 + .../Test/TestPlacement_BodyShapesValidator.py | 38 +++++++++++++++++++ src/GeomValidators/GeomValidators_Face.cpp | 31 ++++++--------- 5 files changed, 90 insertions(+), 19 deletions(-) create mode 100644 src/ConstructionPlugin/Test/TestPlane_FaceValidator.py create mode 100644 src/FeaturesPlugin/Test/TestPlacement_BodyShapesValidator.py diff --git a/src/ConstructionPlugin/CMakeLists.txt b/src/ConstructionPlugin/CMakeLists.txt index f9d11bee9..9ddd0a2e3 100644 --- a/src/ConstructionPlugin/CMakeLists.txt +++ b/src/ConstructionPlugin/CMakeLists.txt @@ -95,4 +95,5 @@ ADD_UNIT_TESTS(TestAxisCreation.py TestPoint_FiniteValidator.py TestPlane.py TestPlane_ErrorMsg.py + TestPlane_FaceValidator.py ) diff --git a/src/ConstructionPlugin/Test/TestPlane_FaceValidator.py b/src/ConstructionPlugin/Test/TestPlane_FaceValidator.py new file mode 100644 index 000000000..d2890a423 --- /dev/null +++ b/src/ConstructionPlugin/Test/TestPlane_FaceValidator.py @@ -0,0 +1,38 @@ +## Copyright (C) 2018-20xx 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 salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +Sphere_1 = model.addSphere(Part_1_doc, model.selection("VERTEX", "PartSet/Origin"), 10) +Compound_1 = model.addCompound(Part_1_doc, [model.selection("FACE", "Sphere_1_1/Face_1")]) + +Plane_1 = model.addPlane(Part_1_doc, model.selection("COMPOUND", (0, 0, 0)), 10, False) +assert(Plane_1.feature().error() != "") +Part_1_doc.removeFeature(Plane_1.feature()) + +Plane_1 = model.addPlane(Part_1_doc, model.selection("EDGE", "[Compound_1_1_1/Compound_1_1_1&Sphere_1_1/Face_1][weak_name_3]"), 10, False) +assert(Plane_1.feature().error() != "") +Part_1_doc.removeFeature(Plane_1.feature()) + +model.end() diff --git a/src/FeaturesPlugin/CMakeLists.txt b/src/FeaturesPlugin/CMakeLists.txt index 3ea424612..1f3b8934d 100644 --- a/src/FeaturesPlugin/CMakeLists.txt +++ b/src/FeaturesPlugin/CMakeLists.txt @@ -187,6 +187,7 @@ ADD_UNIT_TESTS(TestExtrusion.py TestPlacement_Face_Face.py TestPlacement_Part_Part.py TestPlacement_ErrorMsg.py + TestPlacement_BodyShapesValidator.py TestTranslation.py TestTranslation_Part.py TestRotation.py diff --git a/src/FeaturesPlugin/Test/TestPlacement_BodyShapesValidator.py b/src/FeaturesPlugin/Test/TestPlacement_BodyShapesValidator.py new file mode 100644 index 000000000..dc3e58cba --- /dev/null +++ b/src/FeaturesPlugin/Test/TestPlacement_BodyShapesValidator.py @@ -0,0 +1,38 @@ +## Copyright (C) 2018-20xx 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 salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +model.do() + +Part_2 = model.addPart(partSet) +Part_2_doc = Part_2.document() +Box_1 = model.addBox(Part_2_doc, 10, 10, 10) +model.do() + +Placement_1 = model.addPlacement(partSet, [model.selection("COMPOUND", "Part_2/")], model.selection("COMPOUND", "all-in-Part_1"), model.selection("FACE", "Part_2/Box_1_1/Top"), False, False) +assert(Placement_1.feature().error() != "") +Part_1_doc.removeFeature(Placement_1.feature()) + +model.end() diff --git a/src/GeomValidators/GeomValidators_Face.cpp b/src/GeomValidators/GeomValidators_Face.cpp index a5f9d588c..18cc1b1e6 100644 --- a/src/GeomValidators/GeomValidators_Face.cpp +++ b/src/GeomValidators/GeomValidators_Face.cpp @@ -108,28 +108,21 @@ bool GeomValidators_Face::isValid(const AttributePtr& theAttribute, // it is necessary to check whether the shape is face in order to set in selection a value // with any type and check the type in this validator // It is realized to select any object in OB and filter it in this validator (sketch plane) - if (!aGeomShape->isFace()) { - aValid = false; - theError = "The shape is not a face."; + GeomAbs_SurfaceType aFaceType = GeomAbs_Plane; + if (theArguments.size() == 1) + aFaceType = faceType(theArguments.front()); + if (aGeomShape->isFace()) { + aValid = isValidFace(aGeomShape, aFaceType, theError); } - else { - GeomAbs_SurfaceType aFaceType = GeomAbs_Plane; - if (theArguments.size() == 1) aFaceType = faceType(theArguments.front()); - if (aGeomShape->isFace()) { - isValidFace(aGeomShape, aFaceType, theError); - } - else if (aSelectionAttr->isGeometricalSelection() && aGeomShape->isCompound()) { - for (GeomAPI_ShapeIterator anIt(aGeomShape); anIt.more(); anIt.next()) { - if (!isValidFace(anIt.current(), aFaceType, theError)) { - break; - } - } - } - else { - aValid = false; - theError = "The shape is not a face."; + else if (aSelectionAttr->isGeometricalSelection() && aGeomShape->isCompound()) { + for (GeomAPI_ShapeIterator anIt(aGeomShape); anIt.more() && aValid; anIt.next()) { + aValid = isValidFace(anIt.current(), aFaceType, theError); } } + else { + aValid = false; + theError = "The shape is not a face."; + } } return aValid; } -- 2.39.2