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