diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 95758fd826..355013a25b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -90,6 +90,9 @@ endif(BUILD_MESH) if(BUILD_PART) list (APPEND TestExecutables Part_tests_run) endif(BUILD_PART) +if(BUILD_PART_DESIGN) + list (APPEND TestExecutables PartDesign_tests_run) +endif(BUILD_PART_DESIGN) if(BUILD_POINTS) list (APPEND TestExecutables Points_tests_run) endif(BUILD_POINTS) diff --git a/tests/src/Mod/CMakeLists.txt b/tests/src/Mod/CMakeLists.txt index 05c9bbe6e2..cbf44c16e9 100644 --- a/tests/src/Mod/CMakeLists.txt +++ b/tests/src/Mod/CMakeLists.txt @@ -10,6 +10,9 @@ endif(BUILD_MESH) if(BUILD_PART) add_subdirectory(Part) endif(BUILD_PART) +if(BUILD_PART_DESIGN) + add_subdirectory(PartDesign) +endif(BUILD_PART_DESIGN) if(BUILD_POINTS) add_subdirectory(Points) endif(BUILD_POINTS) diff --git a/tests/src/Mod/PartDesign/App/CMakeLists.txt b/tests/src/Mod/PartDesign/App/CMakeLists.txt new file mode 100644 index 0000000000..27e741395c --- /dev/null +++ b/tests/src/Mod/PartDesign/App/CMakeLists.txt @@ -0,0 +1,6 @@ + +target_sources( + PartDesign_tests_run + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/ShapeBinder.cpp +) diff --git a/tests/src/Mod/PartDesign/App/ShapeBinder.cpp b/tests/src/Mod/PartDesign/App/ShapeBinder.cpp new file mode 100644 index 0000000000..5d3a60a738 --- /dev/null +++ b/tests/src/Mod/PartDesign/App/ShapeBinder.cpp @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "gtest/gtest.h" +#include "src/App/InitApplication.h" + +#include +#include +#include "Mod/Part/App/FeaturePartBox.h" +#include "Mod/PartDesign/App/Body.h" +#include "Mod/PartDesign/App/ShapeBinder.h" + +// NOLINTBEGIN(readability-magic-numbers,cppcoreguidelines-avoid-magic-numbers) + +class ShapeBinderTest: public ::testing::Test +{ +protected: + static void SetUpTestSuite() + { + tests::initApplication(); + } + + void SetUp() override + { + _docName = App::GetApplication().getUniqueDocumentName("test"); + _doc = App::GetApplication().newDocument(_docName.c_str(), "testUser"); + _body = dynamic_cast(_doc->addObject("PartDesign::Body")); // NOLINT + _box = dynamic_cast(_doc->addObject("Part::Box")); // NOLINT + _box->Length.setValue(1); + _box->Width.setValue(2); + _box->Height.setValue(3); + _box->Placement.setValue( + Base::Placement(Base::Vector3d(), Base::Rotation(), Base::Vector3d())); // NOLINT + // _body->addObject(_box); // Invalid, Part::Features can't go in a PartDesign::Body, + // but we can bind them. + _binder = dynamic_cast( + _doc->addObject("PartDesign::ShapeBinder", "ShapeBinderFoo")); // NOLINT + _subbinder = dynamic_cast( + _doc->addObject("PartDesign::SubShapeBinder", "SubShapeBinderBar")); // NOLINT + _binder->Shape.setValue(_box->Shape.getShape()); + _subbinder->setLinks({{_box, {"Face1", "Face2"}}}, false); + _body->addObject(_binder); + _body->addObject(_subbinder); + } + + void TearDown() override + { + App::GetApplication().closeDocument(_docName.c_str()); + } + + // NOLINTBEGIN(cppcoreguidelines-non-private-member-variables-in-classes) + + App::Document* _doc = nullptr; + std::string _docName = ""; + Part::Box* _box = nullptr; + PartDesign::Body* _body = nullptr; + PartDesign::ShapeBinder* _binder = nullptr; + PartDesign::SubShapeBinder* _subbinder = nullptr; + + // NOLINTEND(cppcoreguidelines-non-private-member-variables-in-classes) +}; + +TEST_F(ShapeBinderTest, shapeBinderExists) +{ + // Arrange + // Act + auto binder = _doc->getObject("ShapeBinderFoo"); + // Assert the object is correct + EXPECT_NE(binder, nullptr); + // Assert the elementMap is correct +} + +TEST_F(ShapeBinderTest, subShapeBinderExists) +{ + // Arrange + // Act + auto subbinder = _doc->getObject("SubShapeBinderBar"); + // Assert the object is correct + EXPECT_NE(subbinder, nullptr); + // Assert the elementMap is correct +} + +// NOLINTEND(readability-magic-numbers,cppcoreguidelines-avoid-magic-numbers) diff --git a/tests/src/Mod/PartDesign/CMakeLists.txt b/tests/src/Mod/PartDesign/CMakeLists.txt new file mode 100644 index 0000000000..d6cb13c3d3 --- /dev/null +++ b/tests/src/Mod/PartDesign/CMakeLists.txt @@ -0,0 +1,15 @@ + +target_include_directories(PartDesign_tests_run PUBLIC + ${EIGEN3_INCLUDE_DIR} + ${OCC_INCLUDE_DIR} + ${Python3_INCLUDE_DIRS} + ${XercesC_INCLUDE_DIRS} +) + +target_link_libraries(PartDesign_tests_run + gtest_main + ${Google_Tests_LIBS} + PartDesign +) + +add_subdirectory(App)