From cc08b827ebded258a3958967ee0a9583f84ec2e2 Mon Sep 17 00:00:00 2001 From: bgbsww Date: Fri, 22 Dec 2023 16:16:20 -0500 Subject: [PATCH] Use inheritance and namespaces to keep tests DRY --- tests/src/Mod/Part/App/CMakeLists.txt | 4 +- tests/src/Mod/Part/App/FeaturePartCommon.cpp | 92 ++++----------- tests/src/Mod/Part/App/FeaturePartCut.cpp | 115 +++--------------- tests/src/Mod/Part/App/FeaturePartFuse.cpp | 117 +++---------------- tests/src/Mod/Part/App/PartTestHelpers.cpp | 46 ++++++++ tests/src/Mod/Part/App/PartTestHelpers.h | 22 ++++ 6 files changed, 122 insertions(+), 274 deletions(-) create mode 100644 tests/src/Mod/Part/App/PartTestHelpers.cpp create mode 100644 tests/src/Mod/Part/App/PartTestHelpers.h diff --git a/tests/src/Mod/Part/App/CMakeLists.txt b/tests/src/Mod/Part/App/CMakeLists.txt index 1530cd4bb2..6b1d9a429a 100644 --- a/tests/src/Mod/Part/App/CMakeLists.txt +++ b/tests/src/Mod/Part/App/CMakeLists.txt @@ -6,4 +6,6 @@ target_sources( ${CMAKE_CURRENT_SOURCE_DIR}/FeaturePartCommon.cpp ${CMAKE_CURRENT_SOURCE_DIR}/FeaturePartCut.cpp ${CMAKE_CURRENT_SOURCE_DIR}/FeaturePartFuse.cpp - ) + # ${CMAKE_CURRENT_SOURCE_DIR}/FeatureFillet.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/PartTestHelpers.cpp +) diff --git a/tests/src/Mod/Part/App/FeaturePartCommon.cpp b/tests/src/Mod/Part/App/FeaturePartCommon.cpp index 82a0d0ec77..839c0dc45c 100644 --- a/tests/src/Mod/Part/App/FeaturePartCommon.cpp +++ b/tests/src/Mod/Part/App/FeaturePartCommon.cpp @@ -2,19 +2,12 @@ #include "gtest/gtest.h" -#include -#include -#include -#include -#include -#include -#include "Mod/Part/App/FeaturePartBox.h" #include "Mod/Part/App/FeaturePartCommon.h" #include -// Should some of this go into a FeaturePartBoolean.cpp test suite? +#include "PartTestHelpers.h" -class FeaturePartCommonTest: public ::testing::Test +class FeaturePartCommonTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass { protected: static void SetUpTestSuite() @@ -25,61 +18,14 @@ protected: void SetUp() override { - _docName = App::GetApplication().getUniqueDocumentName("test"); - _doc = App::GetApplication().newDocument(_docName.c_str(), "testUser"); - _box1obj = static_cast(_doc->addObject("Part::Box")); - _box2obj = static_cast(_doc->addObject("Part::Box")); - _box3obj = static_cast(_doc->addObject("Part::Box")); - _box4obj = static_cast(_doc->addObject("Part::Box")); - _box5obj = static_cast(_doc->addObject("Part::Box")); - _box6obj = static_cast(_doc->addObject("Part::Box")); - _box1obj->Length.setValue(1); - _box1obj->Width.setValue(2); - _box1obj->Height.setValue(3); - _box1obj->Placement.setValue( - Base::Placement(Base::Vector3d(), Base::Rotation(), Base::Vector3d())); - _box2obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 1, 0), Base::Rotation(), Base::Vector3d())); - _box2obj->Length.setValue(1); - _box2obj->Width.setValue(2); - _box2obj->Height.setValue(3); - _box3obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 3, 0), Base::Rotation(), Base::Vector3d())); - _box3obj->Length.setValue(1); - _box3obj->Width.setValue(2); - _box3obj->Height.setValue(3); - _box4obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 2, 0), Base::Rotation(), Base::Vector3d())); - _box4obj->Length.setValue(1); - _box4obj->Width.setValue(2); - _box4obj->Height.setValue(3); - _box5obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 2 + Base::Precision::Confusion(), 0), - Base::Rotation(), - Base::Vector3d())); - _box5obj->Length.setValue(1); - _box5obj->Width.setValue(2); - _box5obj->Height.setValue(3); - _box6obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 2 - Base::Precision::Confusion() * 1000, 0), - Base::Rotation(), - Base::Vector3d())); - _box6obj->Length.setValue(1); - _box6obj->Width.setValue(2); - _box6obj->Height.setValue(3); + createTestFile(); _common = static_cast(_doc->addObject("Part::Common")); } void TearDown() override {} - - Part::Box *_box1obj, *_box2obj, *_box3obj, *_box4obj, *_box5obj, *_box6obj; Part::Common* _common; - App::Document* _doc; - -private: - std::string _docName; }; TEST_F(FeaturePartCommonTest, testIntersecting) @@ -91,15 +37,18 @@ TEST_F(FeaturePartCommonTest, testIntersecting) // Act _common->execute(); Part::TopoShape ts = _common->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); + // Base::BoundBox3d bb = ts.getBoundBox(); // Assert - EXPECT_EQ(bb.MinX, 0); - EXPECT_EQ(bb.MinY, 1); - EXPECT_EQ(bb.MinZ, 0); - EXPECT_EQ(bb.MaxX, 1); - EXPECT_EQ(bb.MaxY, 2); - EXPECT_EQ(bb.MaxZ, 3); + // If we wanted to be excessive, we could check the bounds: + // EXPECT_EQ(bb.MinX, 0); + // EXPECT_EQ(bb.MinY, 1); + // EXPECT_EQ(bb.MinZ, 0); + // EXPECT_EQ(bb.MaxX, 1); + // EXPECT_EQ(bb.MaxY, 2); + // EXPECT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,3.0); } TEST_F(FeaturePartCommonTest, testNonIntersecting) @@ -115,8 +64,8 @@ TEST_F(FeaturePartCommonTest, testNonIntersecting) // Assert EXPECT_FALSE(bb.IsValid()); - // EXPECT_EQ(bb.Volume(),-1); - // EXPECT_EQ(bb.Volume(),0); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,0.0); } TEST_F(FeaturePartCommonTest, testTouching) @@ -132,7 +81,8 @@ TEST_F(FeaturePartCommonTest, testTouching) // Assert EXPECT_FALSE(bb.IsValid()); - // EXPECT_EQ(bb.Volume(),0); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,0.0); } TEST_F(FeaturePartCommonTest, testAlmostTouching) @@ -148,8 +98,8 @@ TEST_F(FeaturePartCommonTest, testAlmostTouching) // Assert EXPECT_FALSE(bb.IsValid()); - // EXPECT_EQ(bb.Volume(),-1); - // EXPECT_EQ(bb.Volume(),0); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,0.0); } TEST_F(FeaturePartCommonTest, testBarelyIntersecting) @@ -170,6 +120,10 @@ TEST_F(FeaturePartCommonTest, testBarelyIntersecting) EXPECT_EQ(bb.MaxX, 1); EXPECT_EQ(bb.MaxY, 2); EXPECT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + double target = Base::Precision::Confusion() * 3 * 1000; + // FLOAT, not DOUBLE here, because ULP accuracy would be too precise. + EXPECT_FLOAT_EQ(volume,target); // 0.00029999999999996696); } TEST_F(FeaturePartCommonTest, testMustExecute) diff --git a/tests/src/Mod/Part/App/FeaturePartCut.cpp b/tests/src/Mod/Part/App/FeaturePartCut.cpp index 260b0d6e0f..a788691402 100644 --- a/tests/src/Mod/Part/App/FeaturePartCut.cpp +++ b/tests/src/Mod/Part/App/FeaturePartCut.cpp @@ -2,21 +2,12 @@ #include "gtest/gtest.h" -#include -#include -#include -#include -#include -#include -#include "Mod/Part/App/FeaturePartBox.h" #include "Mod/Part/App/FeaturePartCut.h" #include -#include +#include "PartTestHelpers.h" -// MOST OF THIS SHOULD GO INTO A FeaturePartBoolean.cpp test suite! - -class FeaturePartCutTest: public ::testing::Test +class FeaturePartCutTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass { protected: static void SetUpTestSuite() @@ -27,48 +18,7 @@ protected: void SetUp() override { - _docName = App::GetApplication().getUniqueDocumentName("test"); - _doc = App::GetApplication().newDocument(_docName.c_str(), "testUser"); - _box1obj = static_cast(_doc->addObject("Part::Box")); - _box1obj->Length.setValue(1); - _box1obj->Width.setValue(2); - _box1obj->Height.setValue(3); - _box1obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 0, 0), Base::Rotation(), Base::Vector3d(0, 0, 0))); - _box2obj = static_cast(_doc->addObject("Part::Box")); - _box2obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 1, 0), Base::Rotation(), Base::Vector3d(0, 0, 0))); - _box2obj->Length.setValue(1); - _box2obj->Width.setValue(2); - _box2obj->Height.setValue(3); - _box3obj = static_cast(_doc->addObject("Part::Box")); - _box3obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 3, 0), Base::Rotation(), Base::Vector3d(0, 0, 0))); - _box3obj->Length.setValue(1); - _box3obj->Width.setValue(2); - _box3obj->Height.setValue(3); - _box4obj = static_cast(_doc->addObject("Part::Box")); - _box4obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 2, 0), Base::Rotation(), Base::Vector3d(0, 0, 0))); - _box4obj->Length.setValue(1); - _box4obj->Width.setValue(2); - _box4obj->Height.setValue(3); - _box5obj = static_cast(_doc->addObject("Part::Box")); - _box5obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 2 + Base::Precision::Confusion(), 0), - Base::Rotation(), - Base::Vector3d())); - _box5obj->Length.setValue(1); - _box5obj->Width.setValue(2); - _box5obj->Height.setValue(3); - _box6obj = static_cast(_doc->addObject("Part::Box")); - _box6obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 2 - Base::Precision::Confusion() * 1000, 0), - Base::Rotation(), - Base::Vector3d())); - _box6obj->Length.setValue(1); - _box6obj->Width.setValue(2); - _box6obj->Height.setValue(3); + createTestFile(); _cut = static_cast(_doc->addObject("Part::Cut")); } @@ -76,12 +26,7 @@ protected: {} - Part::Box *_box1obj, *_box2obj, *_box3obj, *_box4obj, *_box5obj, *_box6obj; Part::Cut* _cut; - App::Document* _doc; - -private: - std::string _docName; }; TEST_F(FeaturePartCutTest, testIntersecting) @@ -93,15 +38,8 @@ TEST_F(FeaturePartCutTest, testIntersecting) // Act _cut->execute(); Part::TopoShape ts = _cut->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); - - // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 1); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,3.0); } TEST_F(FeaturePartCutTest, testNonIntersecting) @@ -113,15 +51,8 @@ TEST_F(FeaturePartCutTest, testNonIntersecting) // Act _cut->execute(); Part::TopoShape ts = _cut->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); - - // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 2); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,6.0); } TEST_F(FeaturePartCutTest, testTouching) @@ -133,15 +64,10 @@ TEST_F(FeaturePartCutTest, testTouching) // Act _cut->execute(); Part::TopoShape ts = _cut->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); + double volume = PartTestHelpers::getVolume(ts.getShape()); // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 2); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + EXPECT_DOUBLE_EQ(volume,6.0); } TEST_F(FeaturePartCutTest, testAlmostTouching) @@ -153,15 +79,8 @@ TEST_F(FeaturePartCutTest, testAlmostTouching) // Act _cut->execute(); Part::TopoShape ts = _cut->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); - - // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 2); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,6.0); } TEST_F(FeaturePartCutTest, testBarelyIntersecting) @@ -173,15 +92,9 @@ TEST_F(FeaturePartCutTest, testBarelyIntersecting) // Act _cut->execute(); Part::TopoShape ts = _cut->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); - - // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 1.9999); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + double target = 6 - Base::Precision::Confusion() * 3 * 1000; + EXPECT_FLOAT_EQ(volume,target); } TEST_F(FeaturePartCutTest, testMustExecute) diff --git a/tests/src/Mod/Part/App/FeaturePartFuse.cpp b/tests/src/Mod/Part/App/FeaturePartFuse.cpp index da60adfaca..7e666de6b0 100644 --- a/tests/src/Mod/Part/App/FeaturePartFuse.cpp +++ b/tests/src/Mod/Part/App/FeaturePartFuse.cpp @@ -2,21 +2,13 @@ #include "gtest/gtest.h" -#include -#include -#include -#include -#include -#include -#include "Mod/Part/App/FeaturePartBox.h" #include "Mod/Part/App/FeaturePartFuse.h" #include -#include +#include "PartTestHelpers.h" -// MOST OF THIS SHOULD GO INTO A FeaturePartBoolean.cpp test suite! -class FeaturePartFuseTest: public ::testing::Test +class FeaturePartFuseTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass { protected: static void SetUpTestSuite() @@ -27,61 +19,14 @@ protected: void SetUp() override { - _docName = App::GetApplication().getUniqueDocumentName("test"); - _doc = App::GetApplication().newDocument(_docName.c_str(), "testUser"); - _box1obj = static_cast(_doc->addObject("Part::Box")); - _box1obj->Length.setValue(1); - _box1obj->Width.setValue(2); - _box1obj->Height.setValue(3); - _box1obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 0, 0), Base::Rotation(), Base::Vector3d(0, 0, 0))); - _box2obj = static_cast(_doc->addObject("Part::Box")); - _box2obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 1, 0), Base::Rotation(), Base::Vector3d(0, 0, 0))); - _box2obj->Length.setValue(1); - _box2obj->Width.setValue(2); - _box2obj->Height.setValue(3); - _box3obj = static_cast(_doc->addObject("Part::Box")); - _box3obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 3, 0), Base::Rotation(), Base::Vector3d(0, 0, 0))); - _box3obj->Length.setValue(1); - _box3obj->Width.setValue(2); - _box3obj->Height.setValue(3); - _box4obj = static_cast(_doc->addObject("Part::Box")); - _box4obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 2, 0), Base::Rotation(), Base::Vector3d(0, 0, 0))); - _box4obj->Length.setValue(1); - _box4obj->Width.setValue(2); - _box4obj->Height.setValue(3); - _box5obj = static_cast(_doc->addObject("Part::Box")); - _box5obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 2 + Base::Precision::Confusion(), 0), - Base::Rotation(), - Base::Vector3d())); - _box5obj->Length.setValue(1); - _box5obj->Width.setValue(2); - _box5obj->Height.setValue(3); - _box6obj = static_cast(_doc->addObject("Part::Box")); - _box6obj->Placement.setValue( - Base::Placement(Base::Vector3d(0, 2 - Base::Precision::Confusion() * 1000, 0), - Base::Rotation(), - Base::Vector3d())); - _box6obj->Length.setValue(1); - _box6obj->Width.setValue(2); - _box6obj->Height.setValue(3); + createTestFile(); _fuse = static_cast(_doc->addObject("Part::Fuse")); } void TearDown() override {} - - Part::Box *_box1obj, *_box2obj, *_box3obj, *_box4obj, *_box5obj, *_box6obj; Part::Fuse* _fuse; - App::Document* _doc; - -private: - std::string _docName; }; TEST_F(FeaturePartFuseTest, testIntersecting) @@ -93,15 +38,8 @@ TEST_F(FeaturePartFuseTest, testIntersecting) // Act _fuse->execute(); Part::TopoShape ts = _fuse->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); - - // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 3); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,9.0); } TEST_F(FeaturePartFuseTest, testNonIntersecting) @@ -113,15 +51,8 @@ TEST_F(FeaturePartFuseTest, testNonIntersecting) // Act _fuse->execute(); Part::TopoShape ts = _fuse->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); - - // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 5); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,12.0); } TEST_F(FeaturePartFuseTest, testTouching) @@ -133,15 +64,8 @@ TEST_F(FeaturePartFuseTest, testTouching) // Act _fuse->execute(); Part::TopoShape ts = _fuse->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); - - // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 4); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_DOUBLE_EQ(volume,12.0); } TEST_F(FeaturePartFuseTest, testAlmostTouching) @@ -153,15 +77,8 @@ TEST_F(FeaturePartFuseTest, testAlmostTouching) // Act _fuse->execute(); Part::TopoShape ts = _fuse->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); - - // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 4); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + EXPECT_FLOAT_EQ(volume,12.0); } TEST_F(FeaturePartFuseTest, testBarelyIntersecting) @@ -173,15 +90,9 @@ TEST_F(FeaturePartFuseTest, testBarelyIntersecting) // Act _fuse->execute(); Part::TopoShape ts = _fuse->Shape.getValue(); - Base::BoundBox3d bb = ts.getBoundBox(); - - // Assert - EXPECT_FLOAT_EQ(bb.MinX, 0); - EXPECT_FLOAT_EQ(bb.MinY, 0); - EXPECT_FLOAT_EQ(bb.MinZ, 0); - EXPECT_FLOAT_EQ(bb.MaxX, 1); - EXPECT_FLOAT_EQ(bb.MaxY, 3.9999); - EXPECT_FLOAT_EQ(bb.MaxZ, 3); + double volume = PartTestHelpers::getVolume(ts.getShape()); + double target = 12 - Base::Precision::Confusion() * 3 * 1000; + EXPECT_FLOAT_EQ(volume,target); } TEST_F(FeaturePartFuseTest, testMustExecute) diff --git a/tests/src/Mod/Part/App/PartTestHelpers.cpp b/tests/src/Mod/Part/App/PartTestHelpers.cpp new file mode 100644 index 0000000000..1de59e7cfd --- /dev/null +++ b/tests/src/Mod/Part/App/PartTestHelpers.cpp @@ -0,0 +1,46 @@ + +#include "PartTestHelpers.h" + +namespace PartTestHelpers { + +double getVolume(TopoDS_Shape shape) +{ + GProp_GProps prop; + BRepGProp::VolumeProperties(shape, prop); + return prop.Mass(); +} + +void PartTestHelperClass::createTestFile() +{ + _docName = App::GetApplication().getUniqueDocumentName("test"); + _doc = App::GetApplication().newDocument(_docName.c_str(), "testUser"); + _box1obj = static_cast(_doc->addObject("Part::Box")); + _box2obj = static_cast(_doc->addObject("Part::Box")); + _box3obj = static_cast(_doc->addObject("Part::Box")); + _box4obj = static_cast(_doc->addObject("Part::Box")); + _box5obj = static_cast(_doc->addObject("Part::Box")); + _box6obj = static_cast(_doc->addObject("Part::Box")); + for ( auto _box : {_box1obj, _box2obj, _box3obj, _box4obj, _box5obj, _box6obj} ) { + _box->Length.setValue(1); + _box->Width.setValue(2); + _box->Height.setValue(3); + } + _box1obj->Placement.setValue( + Base::Placement(Base::Vector3d(), Base::Rotation(), Base::Vector3d())); + _box2obj->Placement.setValue( + Base::Placement(Base::Vector3d(0, 1, 0), Base::Rotation(), Base::Vector3d())); + _box3obj->Placement.setValue( + Base::Placement(Base::Vector3d(0, 3, 0), Base::Rotation(), Base::Vector3d())); + _box4obj->Placement.setValue( + Base::Placement(Base::Vector3d(0, 2, 0), Base::Rotation(), Base::Vector3d())); + _box5obj->Placement.setValue( + Base::Placement(Base::Vector3d(0, 2 + Base::Precision::Confusion(), 0), + Base::Rotation(), + Base::Vector3d())); + _box6obj->Placement.setValue( + Base::Placement(Base::Vector3d(0, 2 - Base::Precision::Confusion() * 1000, 0), + Base::Rotation(), + Base::Vector3d())); +} + +} \ No newline at end of file diff --git a/tests/src/Mod/Part/App/PartTestHelpers.h b/tests/src/Mod/Part/App/PartTestHelpers.h new file mode 100644 index 0000000000..a6bdfd37b9 --- /dev/null +++ b/tests/src/Mod/Part/App/PartTestHelpers.h @@ -0,0 +1,22 @@ +#include +#include +#include +#include "Mod/Part/App/FeaturePartBox.h" +#include "Mod/Part/App/FeaturePartFuse.h" +#include "Mod/Part/App/FeatureFillet.h" +#include + +namespace PartTestHelpers { + +double getVolume(TopoDS_Shape shape); + +class PartTestHelperClass { +public: + App::Document* _doc; + std::string _docName; + Part::Box *_box1obj, *_box2obj, *_box3obj, *_box4obj, *_box5obj, *_box6obj; + + void createTestFile(); +}; + +} \ No newline at end of file