diff --git a/src/App/Application.cpp b/src/App/Application.cpp index 96d14e975e..e432b9d739 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -1991,6 +1991,7 @@ void Application::initTypes() App ::GeoFeature ::init(); App ::FeatureTest ::init(); App ::FeatureTestException ::init(); + App ::FeatureTestColumn ::init(); App ::FeaturePython ::init(); App ::GeometryPython ::init(); App ::Document ::init(); diff --git a/src/App/FeatureTest.cpp b/src/App/FeatureTest.cpp index 62c9a62668..abf2e16c89 100644 --- a/src/App/FeatureTest.cpp +++ b/src/App/FeatureTest.cpp @@ -31,6 +31,7 @@ #include "FeatureTest.h" #include "Material.h" +#include "Range.h" #ifdef _MSC_VER #pragma warning( disable : 4700 ) @@ -179,6 +180,7 @@ DocumentObjectExecReturn *FeatureTest::execute() return DocumentObject::StdReturn; } +// ---------------------------------------------------------------------------- PROPERTY_SOURCE(App::FeatureTestException, App::FeatureTest) @@ -195,3 +197,21 @@ DocumentObjectExecReturn *FeatureTestException::execute() return nullptr; } + +// ---------------------------------------------------------------------------- + +PROPERTY_SOURCE(App::FeatureTestColumn, App::DocumentObject) + + +FeatureTestColumn::FeatureTestColumn() +{ + ADD_PROPERTY_TYPE(Column, ("A"), "Test", App::Prop_None, ""); + ADD_PROPERTY_TYPE(Silent, (false), "Test", App::Prop_None, ""); + ADD_PROPERTY_TYPE(Value, (0L), "Test", App::Prop_Output, ""); +} + +DocumentObjectExecReturn *FeatureTestColumn::execute() +{ + Value.setValue(decodeColumn(Column.getStrValue(), Silent.getValue())); + return nullptr; +} diff --git a/src/App/FeatureTest.h b/src/App/FeatureTest.h index 0d99ac1234..51ca4b3808 100644 --- a/src/App/FeatureTest.h +++ b/src/App/FeatureTest.h @@ -134,6 +134,23 @@ public: } }; +class FeatureTestColumn : public DocumentObject +{ + PROPERTY_HEADER_WITH_OVERRIDE(App::FeatureTestColumn); + +public: + FeatureTestColumn(); + + // Standard Properties (PropertyStandard.h) + App::PropertyString Column; + App::PropertyBool Silent; + App::PropertyInteger Value; + + /** @name methods override Feature */ + //@{ + DocumentObjectExecReturn *execute() override; + //@} +}; } //namespace App diff --git a/src/Mod/Test/Document.py b/src/Mod/Test/Document.py index 6c09637bee..742fb19fd0 100644 --- a/src/Mod/Test/Document.py +++ b/src/Mod/Test/Document.py @@ -2182,3 +2182,127 @@ class DocumentObserverCases(unittest.TestCase): #closing doc FreeCAD.removeDocumentObserver(self.Obs) self.Obs = None + +class FeatureTestColumn(unittest.TestCase): + def setUp(self): + doc = FreeCAD.newDocument("TestColumn") + self.obj = doc.addObject("App::FeatureTestColumn", "Column") + + def testEmpty(self): + value = self.obj.Value + self.obj.Column = "" + self.assertFalse(self.obj.recompute()) + self.assertEqual(self.obj.Value, value) + + def testA(self): + self.obj.Column = "A" + self.obj.recompute() + self.assertEqual(self.obj.Value, 0) + + def testZ(self): + self.obj.Column = "Z" + self.obj.recompute() + self.assertEqual(self.obj.Value, 25) + + def testAA(self): + self.obj.Column = "AA" + self.obj.recompute() + self.assertEqual(self.obj.Value, 26) + + def testAB(self): + self.obj.Column = "AB" + self.obj.recompute() + self.assertEqual(self.obj.Value, 27) + + def testAZ(self): + self.obj.Column = "AZ" + self.obj.recompute() + self.assertEqual(self.obj.Value, 51) + + def testBA(self): + self.obj.Column = "BA" + self.obj.recompute() + self.assertEqual(self.obj.Value, 52) + + def testCB(self): + self.obj.Column = "CB" + self.obj.recompute() + self.assertEqual(self.obj.Value, 79) + + def testZA(self): + self.obj.Column = "ZA" + self.obj.recompute() + self.assertEqual(self.obj.Value, 676) + + def testZZ(self): + self.obj.Column = "ZZ" + self.obj.recompute() + self.assertEqual(self.obj.Value, 701) + + def testAAA(self): + self.obj.Column = "AAA" + self.obj.recompute() + self.assertEqual(self.obj.Value, 702) + + def testAAZ(self): + self.obj.Column = "AAA" + self.obj.recompute() + self.assertEqual(self.obj.Value, 727) + + def testCBA(self): + self.obj.Column = "CBA" + self.obj.recompute() + self.assertEqual(self.obj.Value, 2080) + + def testAZA(self): + self.obj.Column = "AZA" + self.obj.recompute() + self.assertEqual(self.obj.Value, 1352) + + def testZZA(self): + self.obj.Column = "ZZA" + self.obj.recompute() + self.assertEqual(self.obj.Value, 18252) + + def testZZZ(self): + self.obj.Column = "ZZZ" + self.obj.recompute() + self.assertEqual(self.obj.Value, 18277) + + def testALL(self): + self.obj.Column = "ALL" + self.obj.recompute() + self.assertEqual(self.obj.Value, 999) + + def testAb(self): + value = self.obj.Value + self.obj.Column = "Ab" + self.assertFalse(self.obj.recompute()) + self.assertEqual(self.obj.Value, value) + + def testABCD(self): + value = self.obj.Value + self.obj.Column = "ABCD" + self.assertFalse(self.obj.recompute()) + self.assertEqual(self.obj.Value, value) + + def testEmptySilent(self): + self.obj.Column = "" + self.obj.Silent = True + self.assertTrue(self.obj.recompute()) + self.assertEqual(self.obj.Value, -1) + + def testAbSilent(self): + self.obj.Column = "Ab" + self.obj.Silent = True + self.assertTrue(self.obj.recompute()) + self.assertEqual(self.obj.Value, -1) + + def testABCDSilent(self): + self.obj.Column = "ABCD" + self.obj.Silent = True + self.assertTrue(self.obj.recompute()) + self.assertEqual(self.obj.Value, -1) + + def tearDown(self): + FreeCAD.closeDocument("TestColumn")