From bbfc77f1675a20d3eecb3c171b4f0a6c43c747ef Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Tue, 8 Mar 2022 19:14:49 -0600 Subject: [PATCH] Addon Manager: Add unit tests for dependencies --- .../AddonManagerTest/app/test_addon.py | 20 +++++++++-- .../data/depends_on_all_workbenches.xml | 34 +++++++++++++++++++ .../data/test_version_detection.xml | 33 ++++++++++++++++++ src/Mod/AddonManager/CMakeLists.txt | 10 +++--- 4 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 src/Mod/AddonManager/AddonManagerTest/data/depends_on_all_workbenches.xml create mode 100644 src/Mod/AddonManager/AddonManagerTest/data/test_version_detection.xml diff --git a/src/Mod/AddonManager/AddonManagerTest/app/test_addon.py b/src/Mod/AddonManager/AddonManagerTest/app/test_addon.py index 2e1677e416..943cda27b5 100644 --- a/src/Mod/AddonManager/AddonManagerTest/app/test_addon.py +++ b/src/Mod/AddonManager/AddonManagerTest/app/test_addon.py @@ -26,7 +26,7 @@ import unittest import os import FreeCAD -from Addon import Addon +from Addon import Addon, INTERNAL_WORKBENCHES from addonmanager_macro import Macro class TestAddon(unittest.TestCase): @@ -201,4 +201,20 @@ class TestAddon(unittest.TestCase): self.assertTrue("AddonB" in addon_strings, "AddonB not in required dependencies, and it should be.") self.assertTrue("AddonC" in addon_strings, "AddonC not in required dependencies, and it should be.") self.assertTrue("AddonD" in addon_strings, "AddonD not in required dependencies, and it should be.") - self.assertTrue("Path" in deps.unrecognized_addons, "Path not in unrecognized dependencies, and it should be.") \ No newline at end of file + self.assertTrue("Path" in deps.internal_workbenches, "Path not in workbench dependencies, and it should be.") + + def test_internal_workbench_list(self): + addon = Addon("FreeCAD","https://github.com/FreeCAD/FreeCAD", Addon.Status.NOT_INSTALLED, "master") + addon.load_metadata_file(os.path.join(self.test_dir, "depends_on_all_workbenches.xml")) + deps = Addon.Dependencies() + addon.walk_dependency_tree({}, deps) + self.assertEqual(len(deps.internal_workbenches), len(INTERNAL_WORKBENCHES)) + + def test_version_check(self): + addon = Addon("FreeCAD","https://github.com/FreeCAD/FreeCAD", Addon.Status.NOT_INSTALLED, "master") + addon.load_metadata_file(os.path.join(self.test_dir, "test_version_detection.xml")) + + self.assertEqual(len(addon.tags),1, "Wrong number of tags found: version requirements should have restricted to only one") + self.assertFalse("TagA" in addon.tags, "Found 'TagA' in tags, it should have been exluded by version requirement") + self.assertTrue("TagB" in addon.tags, "Failed to find 'TagB' in tags, it should have been included") + self.assertFalse("TagC" in addon.tags, "Found 'TagA' in tags, it should have been exluded by version requirement") diff --git a/src/Mod/AddonManager/AddonManagerTest/data/depends_on_all_workbenches.xml b/src/Mod/AddonManager/AddonManagerTest/data/depends_on_all_workbenches.xml new file mode 100644 index 0000000000..58a18d4798 --- /dev/null +++ b/src/Mod/AddonManager/AddonManagerTest/data/depends_on_all_workbenches.xml @@ -0,0 +1,34 @@ + + + Test Workbenches + A package.xml file for unit testing. + 1.0.1 + 2022-01-07 + FreeCAD Developer + LGPLv2.1 + https://github.com/chennes/FreeCAD-Package + https://github.com/chennes/FreeCAD-Package/blob/main/README.md + + + + MyFirstWorkbench + Resources/icons/PackageIcon.svg + Arch + DraftWB + FEM WB + MeshWorkbench + OpenSCAD Workbench + Part WORKBENCH + PartDesign WB + path + Plot + POINTS + RayTRAcing + ROBOTWB + Sketcher workbench + Spreadsheet + TechDraw + + + + \ No newline at end of file diff --git a/src/Mod/AddonManager/AddonManagerTest/data/test_version_detection.xml b/src/Mod/AddonManager/AddonManagerTest/data/test_version_detection.xml new file mode 100644 index 0000000000..66f90d9295 --- /dev/null +++ b/src/Mod/AddonManager/AddonManagerTest/data/test_version_detection.xml @@ -0,0 +1,33 @@ + + + Test Workbenches + A package.xml file for unit testing. + 1.0.1 + 2022-01-07 + FreeCAD Developer + LGPLv2.1 + https://github.com/chennes/FreeCAD-Package + https://github.com/chennes/FreeCAD-Package/blob/main/README.md + + + + MacroA + TagA + 0.1 + 0.10 + + + MacroB + TagB + 0.20 + 9999.98 + + + MacroC + TagC + 9999.99 + 99999.99 + + + + \ No newline at end of file diff --git a/src/Mod/AddonManager/CMakeLists.txt b/src/Mod/AddonManager/CMakeLists.txt index 3945a93e0f..ced99b68f5 100644 --- a/src/Mod/AddonManager/CMakeLists.txt +++ b/src/Mod/AddonManager/CMakeLists.txt @@ -53,14 +53,16 @@ SET(AddonManagerTestsGui_SRCS SET(AddonManagerTestsFiles_SRCS AddonManagerTest/data/__init__.py AddonManagerTest/data/bad_macro_metadata.FCStd + AddonManagerTest/data/combination.xml + AddonManagerTest/data/depends_on_all_workbenches.xml + AddonManagerTest/data/DoNothing.FCMacro AddonManagerTest/data/good_macro_metadata.FCStd - AddonManagerTest/data/missing_macro_metadata.FCStd AddonManagerTest/data/good_package.xml AddonManagerTest/data/macro_only.xml - AddonManagerTest/data/workbench_only.xml + AddonManagerTest/data/missing_macro_metadata.FCStd AddonManagerTest/data/prefpack_only.xml - AddonManagerTest/data/combination.xml - AddonManagerTest/data/DoNothing.FCMacro + AddonManagerTest/data/test_version_detection.xml + AddonManagerTest/data/workbench_only.xml ) SET(AddonManagerTests_ALL