From bf5189958079e87a82982ebda5e276e5d2402d27 Mon Sep 17 00:00:00 2001 From: Ajinkya Dahale Date: Sun, 31 Aug 2025 15:48:44 +0530 Subject: [PATCH] Sketcher: [test] Add test for `addExternal` and `delExternal` --- .../Mod/Sketcher/App/SketchObjectChanges.cpp | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/tests/src/Mod/Sketcher/App/SketchObjectChanges.cpp b/tests/src/Mod/Sketcher/App/SketchObjectChanges.cpp index 7d777b1ba1..a0b20603aa 100644 --- a/tests/src/Mod/Sketcher/App/SketchObjectChanges.cpp +++ b/tests/src/Mod/Sketcher/App/SketchObjectChanges.cpp @@ -8,12 +8,81 @@ #include #include #include +#include #include #include #include "SketcherTestHelpers.h" using namespace SketcherTestHelpers; +TEST_F(SketchObjectTest, testAddExternalIncreasesCount) +{ + // Arrange + auto* doc = getObject()->getDocument(); + auto box {doc->addObject("Part::Box")}; + int numboxes = doc->countObjectsOfType(); + int numExtPre = getObject()->ExternalGeo.getSize(); + doc->recompute(); + + // Act + getObject()->addExternal(box, "Face6"); + int numExt = getObject()->ExternalGeo.getSize(); + + // Assert + EXPECT_TRUE(numExt > numExtPre); +} + +TEST_F(SketchObjectTest, testDelExternalUndef) +{ + // Act + int res = getObject()->delExternal(Sketcher::GeoEnum::GeoUndef); + + // Assert + EXPECT_EQ(res, -1); +} + +TEST_F(SketchObjectTest, testDelExternalWhenEmpty) +{ + // Act + int res = getObject()->delExternal(Sketcher::GeoEnum::RefExt); + + // Assert + EXPECT_EQ(res, -1); +} + +TEST_F(SketchObjectTest, testDelExternalWhenEmptyWithPositiveId) +{ + // Act + int res = getObject()->delExternal(1); + + // Assert + EXPECT_EQ(res, -1); +} + +TEST_F(SketchObjectTest, testDelExternalReducesCount) +{ + // Arrange + auto* doc = getObject()->getDocument(); + auto box {doc->addObject("Part::Box")}; + doc->recompute(); + // NOTE: When adding, say, `Face6` instead, `delExternal` removes all the edges. This could be + // intended behaviour, ensuring that adding a face always gives a closed loop, or a side effect, + // or should instead be an option at time of external geometry creation. + // TODO: Consider whether this should be intended behaviour, and add tests accordingly. + getObject()->addExternal(box, "Edge6"); + getObject()->addExternal(box, "Edge4"); + int numExt = getObject()->ExternalGeo.getSize(); + + // Act + int res = getObject()->delExternal(Sketcher::GeoEnum::RefExt); + + // Assert + EXPECT_EQ(getObject()->ExternalGeo.getSize(), numExt - 1); +} + +// TODO: `delExternal` situation of constraints +// TODO: `delExternal` situation of constraint containing more than 3 entities + TEST_F(SketchObjectTest, testReplaceGeometriesOneToOne) { // Arrange