diff --git a/src/App/GroupExtension.h b/src/App/GroupExtension.h index 2da27c3a0..84b0b9c88 100644 --- a/src/App/GroupExtension.h +++ b/src/App/GroupExtension.h @@ -30,7 +30,6 @@ #include "DocumentObjectExtension.h" #include - namespace App { class DocumentObjectGroup; diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index 801b20165..5df71fc61 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -440,7 +440,9 @@ void CmdPartDesignNewSketch::activated(int iMsg) unsigned validPlanes = 0; auto group = App::GeoFeatureGroupExtension::getGroupOfObject ( pcActiveBody ); - auto geoGroup = dynamic_cast(group->getExtension(App::GeoFeatureGroupExtension::getClassTypeId())); + App::GeoFeatureGroupExtension* geoGroup = nullptr; + if(group) + geoGroup = dynamic_cast(group->getExtension(App::GeoFeatureGroupExtension::getClassTypeId())); std::vector planes; std::vector status; diff --git a/src/Mod/Test/Document.py b/src/Mod/Test/Document.py index 98ebbd326..f2b4b3a18 100644 --- a/src/Mod/Test/Document.py +++ b/src/Mod/Test/Document.py @@ -188,15 +188,38 @@ class DocumentBasicCases(unittest.TestCase): grp = self.Doc.addObject("App::DocumentObject", "Extension_2") #we should have all methods we need to handle extensions try: - self.failUnless(not grp.hasExtension("App::GroupExtension")) - grp.addExtension("App::GroupExtension", self) + self.failUnless(not grp.hasExtension("App::GroupExtensionPython")) + grp.addExtension("App::GroupExtensionPython", self) + self.failUnless(grp.hasExtension("App::GroupExtension")) + self.failUnless(grp.hasExtension("App::GroupExtensionPython")) grp.addObject(obj) + self.failUnless(len(grp.Group) == 1) self.failUnless(grp.Group[0] == obj) except: self.failUnless(True) + + #test if the method override works + class SpecialGroup(): + def allowObject(self, obj): + return False; - self.Doc.remove(obj) + callback = SpecialGroup() + grp2 = self.Doc.addObject("App::DocumentObject", "Extension_3") + grp2.addExtension("App::GroupExtensionPython", callback) + + try: + self.failUnless(grp2.hasExtension("App::GroupExtension")) + grp2.addObject(obj) + self.failUnless(len(grp2.Group) == 0) + except: + self.failUnless(True) + + self.Doc.removeObject(grp.Name) + self.Doc.removeObject(grp2.Name) + self.Doc.removeObject(obj.Name) del obj + del grp + del grp2 def tearDown(self): #closing doc