From af773b566e3bdb28816a8a52ebc7f2ba0d1b7a52 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Sun, 22 Mar 2020 13:27:31 +0100 Subject: [PATCH] FEM: unit test, improve all objects test --- src/Mod/Fem/TestFem.py | 5 ++ src/Mod/Fem/femtest/app/test_object.py | 64 +++++++++++++++++--------- 2 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/Mod/Fem/TestFem.py b/src/Mod/Fem/TestFem.py index 01c0085752..d264c620ad 100644 --- a/src/Mod/Fem/TestFem.py +++ b/src/Mod/Fem/TestFem.py @@ -59,6 +59,11 @@ False if FemTest10.__name__ else True """ # examples from within FreeCAD: + +# create all objects test +import Test, femtest.app.test_object +Test.runTestsFromClass(femtest.app.test_object.TestObjectCreate) + # all FEM tests import Test, TestFem Test.runTestsFromModule(TestFem) diff --git a/src/Mod/Fem/femtest/app/test_object.py b/src/Mod/Fem/femtest/app/test_object.py index 7933c9d89f..805399ab0a 100644 --- a/src/Mod/Fem/femtest/app/test_object.py +++ b/src/Mod/Fem/femtest/app/test_object.py @@ -27,6 +27,7 @@ __url__ = "http://www.freecadweb.org" import sys import unittest +from os.path import join import FreeCAD @@ -59,8 +60,6 @@ class TestObjectCreate(unittest.TestCase): def test_femobjects_make( self ): - # TODO return document, see Part - # https://github.com/FreeCAD/FreeCAD/blob/565bdbbb3e/src/Mod/Part/parttests/part_test_objects.py#L260 doc = self.document analysis = ObjectsFem.makeAnalysis(doc) @@ -96,50 +95,69 @@ class TestObjectCreate(unittest.TestCase): analysis.addObject(ObjectsFem.makeMaterialReinforced(doc)) msh = analysis.addObject(ObjectsFem.makeMeshGmsh(doc))[0] - analysis.addObject(ObjectsFem.makeMeshBoundaryLayer(doc, msh)) - analysis.addObject(ObjectsFem.makeMeshGroup(doc, msh)) - analysis.addObject(ObjectsFem.makeMeshRegion(doc, msh)) + ObjectsFem.makeMeshBoundaryLayer(doc, msh) + ObjectsFem.makeMeshGroup(doc, msh) + ObjectsFem.makeMeshRegion(doc, msh) analysis.addObject(ObjectsFem.makeMeshNetgen(doc)) - analysis.addObject(ObjectsFem.makeMeshResult(doc)) + ObjectsFem.makeMeshResult(doc) res = analysis.addObject(ObjectsFem.makeResultMechanical(doc))[0] if "BUILD_FEM_VTK" in FreeCAD.__cmake__: vres = analysis.addObject(ObjectsFem.makePostVtkResult(doc, res))[0] - analysis.addObject(ObjectsFem.makePostVtkFilterClipRegion(doc, vres)) - analysis.addObject(ObjectsFem.makePostVtkFilterClipScalar(doc, vres)) - analysis.addObject(ObjectsFem.makePostVtkFilterCutFunction(doc, vres)) - analysis.addObject(ObjectsFem.makePostVtkFilterWarp(doc, vres)) + ObjectsFem.makePostVtkFilterClipRegion(doc, vres) + ObjectsFem.makePostVtkFilterClipScalar(doc, vres) + ObjectsFem.makePostVtkFilterCutFunction(doc, vres) + ObjectsFem.makePostVtkFilterWarp(doc, vres) analysis.addObject(ObjectsFem.makeSolverCalculixCcxTools(doc)) analysis.addObject(ObjectsFem.makeSolverCalculix(doc)) sol = analysis.addObject(ObjectsFem.makeSolverElmer(doc))[0] analysis.addObject(ObjectsFem.makeSolverZ88(doc)) - analysis.addObject(ObjectsFem.makeEquationElasticity(doc, sol)) - analysis.addObject(ObjectsFem.makeEquationElectrostatic(doc, sol)) - analysis.addObject(ObjectsFem.makeEquationFlow(doc, sol)) - analysis.addObject(ObjectsFem.makeEquationFluxsolver(doc, sol)) - analysis.addObject(ObjectsFem.makeEquationHeat(doc, sol)) + ObjectsFem.makeEquationElasticity(doc, sol) + ObjectsFem.makeEquationElectrostatic(doc, sol) + ObjectsFem.makeEquationFlow(doc, sol) + ObjectsFem.makeEquationFluxsolver(doc, sol) + ObjectsFem.makeEquationHeat(doc, sol) doc.recompute() + # count the def make in ObjectsFem module # if FEM VTK post processing is disabled, we are not able to create VTK post objects if "BUILD_FEM_VTK" in FreeCAD.__cmake__: - fem_vtk_post = True + count_defmake = testtools.get_defmake_count() else: - fem_vtk_post = False - count_defmake = testtools.get_defmake_count(fem_vtk_post) - # because of the analysis itself count -1 - self.assertEqual(len(analysis.Group), count_defmake - 1) + count_defmake = testtools.get_defmake_count(False) + # TODO if the children are added to the analysis, they show up twice on Tree + # thus they are not added to the analysis group ATM + # https://forum.freecadweb.org/viewtopic.php?t=25283 + # thus they should not be counted + # solver children: equations --> 5 + # gmsh mesh children: group, region, boundary layer --> 3 + # resule children: mesh result --> 1 + # post pipeline childeren: region, scalar, cut, wrap --> 4 + # analysis itself is not in analysis group --> 1 + # thus: -14 + + self.assertEqual(len(analysis.Group), count_defmake - 14) self.assertEqual(len(doc.Objects), count_defmake) fcc_print("doc objects count: {}, method: {}".format( len(doc.Objects), sys._getframe().f_code.co_name) ) - # TODO if the equations and gmsh mesh children are added to the analysis, - # they show up twice on Tree (on solver resp. gmsh mesh obj and on analysis) - # https://forum.freecadweb.org/viewtopic.php?t=25283 + + # save the file + save_dir = testtools.get_unit_test_tmp_dir( + testtools.get_fem_test_tmp_dir(), + "FEM_all_objects" + ) + save_fc_file = join(save_dir, "all_objects.FCStd") + fcc_print( + "Save FreeCAD all objects file to {}..." + .format(save_fc_file) + ) + self.document.saveAs(save_fc_file) # ******************************************************************************************** def tearDown(