diff --git a/CMakeLists.txt b/CMakeLists.txt index ae75b7dfd6..1cfe238299 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1267,6 +1267,7 @@ if(CMAKE_COMPILER_IS_GNUCXX OR MINGW) ) endif(CMAKE_COMPILER_IS_GNUCXX OR MINGW) + # Print message to start build process if (${CMAKE_BUILD_TOOL} MATCHES "make") MESSAGE("=======================================\n" diff --git a/src/Mod/Test/CMakeLists.txt b/src/Mod/Test/CMakeLists.txt index 5acbb32b9a..93e73270d3 100644 --- a/src/Mod/Test/CMakeLists.txt +++ b/src/Mod/Test/CMakeLists.txt @@ -13,6 +13,7 @@ SET(Test_SRCS unittestgui.py InitGui.py testmakeWireString.py + TestPythonSyntax.py ) SOURCE_GROUP("" FILES ${Test_SRCS}) diff --git a/src/Mod/Test/TestApp.py b/src/Mod/Test/TestApp.py index e4b5c8d440..1f7c58ae80 100644 --- a/src/Mod/Test/TestApp.py +++ b/src/Mod/Test/TestApp.py @@ -73,7 +73,8 @@ def All(): "TestPartDesignApp", "TestSpreadsheet", "TestTechDrawApp", - "TestPathApp" ] + "TestPathApp", + "TestPythonSyntax"] # gui tests of modules if (FreeCAD.GuiUp == 1): diff --git a/src/Mod/Test/TestPythonSyntax.py b/src/Mod/Test/TestPythonSyntax.py new file mode 100644 index 0000000000..0860f89542 --- /dev/null +++ b/src/Mod/Test/TestPythonSyntax.py @@ -0,0 +1,41 @@ +import sys +import os +import ast +import unittest +import FreeCAD as App + +def test_python_syntax(rootdir, whitelist=None): + whitelist = whitelist or [] + log = [] + for sub_dir, dirs, files in os.walk(rootdir): + for fn in files: + if (not fn in whitelist) and os.path.splitext(fn)[1] == '.py': + with open(os.path.join(sub_dir, fn), encoding='utf-8') as py_file: + try: + ast.parse(py_file.read()) + except SyntaxError: + log.append(os.path.join(sub_dir, fn)) + message = "\n\n" + "#" * 30 + "\n" + message += "{} python files are not parseable:\n\n".format(len(log)) + for i in log: + message += i + "\n" + message += "#" * 30 + "\n\n" + if log: + raise RuntimeError("there are some files not parse-able with the used python-interpreter" + message) + else: + return + + +class PythonSyntaxTestCase(unittest.TestCase): + """ + Test Case to test python syntax of all python files in FreeCAD + """ + def setUp(self): + self.whitelist = [] + self.whitelist += ["automotive_design.py"] + self.whitelist += ["ifc2x3.py"] + self.whitelist += ["ifc4.py"] + + + def testAll(self): + test_python_syntax(App.getHomePath(), self.whitelist)