From 96006c7587205e983bd843ff95c2c00d1d9d502f Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Sun, 27 Feb 2022 23:32:33 -0600 Subject: [PATCH] Addon Manager: Add tests for Addon --- .../AddonManagerTest/app/test_addon.py | 79 +++++++++++++++++++ .../AddonManagerTest/app/test_utilities.py | 2 +- .../AddonManagerTest/data/good_package.xml | 20 +++++ src/Mod/AddonManager/CMakeLists.txt | 2 + src/Mod/AddonManager/TestAddonManagerApp.py | 4 + 5 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/Mod/AddonManager/AddonManagerTest/app/test_addon.py create mode 100644 src/Mod/AddonManager/AddonManagerTest/data/good_package.xml diff --git a/src/Mod/AddonManager/AddonManagerTest/app/test_addon.py b/src/Mod/AddonManager/AddonManagerTest/app/test_addon.py new file mode 100644 index 0000000000..75100529c0 --- /dev/null +++ b/src/Mod/AddonManager/AddonManagerTest/app/test_addon.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- + +# *************************************************************************** +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of the FreeCAD CAx development system. * +# * * +# * This library is free software; you can redistribute it and/or * +# * modify it under the terms of the GNU Lesser General Public * +# * License as published by the Free Software Foundation; either * +# * version 2.1 of the License, or (at your option) any later version. * +# * * +# * This library is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with this library; if not, write to the Free Software * +# * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * +# * 02110-1301 USA * +# * * +# *************************************************************************** + +import unittest +import os +import FreeCAD + +from Addon import Addon + +class TestAddon(unittest.TestCase): + + MODULE = "test_addon" # file name without extension + + def setUp(self): + self.test_dir = os.path.join(FreeCAD.getHomePath(), "Mod", "AddonManager", "AddonManagerTest", "data") + + def test_display_name(self): + + # Case 1: No display name set elsewhere: name == display_name + addon = Addon("FreeCAD","https://github.com/FreeCAD/FreeCAD", Addon.Status.NOT_INSTALLED, "master") + self.assertEqual(addon.name, "FreeCAD") + self.assertEqual(addon.display_name, "FreeCAD") + + # Case 2: Package.xml metadata file sets a display name: + addon.load_metadata_file(os.path.join(self.test_dir, "good_package.xml")) + self.assertEqual(addon.name, "FreeCAD") + self.assertEqual(addon.display_name, "Test Workbench") + + def test_metadata_loading(self): + addon = Addon("FreeCAD","https://github.com/FreeCAD/FreeCAD", Addon.Status.NOT_INSTALLED, "master") + addon.load_metadata_file(os.path.join(self.test_dir, "good_package.xml")) + + # Generic tests: + self.assertIsNotNone(addon.metadata) + self.assertEqual(addon.metadata.Version, "1.0.1") + self.assertEqual(addon.metadata.Description, "A package.xml file for unit testing.") + + maintainer_list = addon.metadata.Maintainer + self.assertEqual(len(maintainer_list),1,"Wrong number of maintainers found") + self.assertEqual(maintainer_list[0]["name"],"FreeCAD Developer") + self.assertEqual(maintainer_list[0]["email"],"developer@freecad.org") + + license_list = addon.metadata.License + self.assertEqual(len(license_list),1,"Wrong number of licenses found") + self.assertEqual(license_list[0]["name"],"LGPLv2.1") + self.assertEqual(license_list[0]["file"],"LICENSE") + + url_list = addon.metadata.Urls + self.assertEqual(len(url_list),2,"Wrong number of urls found") + self.assertEqual(url_list[0]["type"],"repository") + self.assertEqual(url_list[0]["location"],"https://github.com/chennes/FreeCAD-Package") + self.assertEqual(url_list[0]["branch"],"main") + self.assertEqual(url_list[1]["type"],"readme") + self.assertEqual(url_list[1]["location"],"https://github.com/chennes/FreeCAD-Package/blob/main/README.md") + + contents = addon.metadata.Content + self.assertEqual(len(contents),1,"Wrong number of content catetories found") + self.assertEqual(len(contents["workbench"]),1,"Wrong number of workbenches found") diff --git a/src/Mod/AddonManager/AddonManagerTest/app/test_utilities.py b/src/Mod/AddonManager/AddonManagerTest/app/test_utilities.py index b714ca8f57..57734e32fa 100644 --- a/src/Mod/AddonManager/AddonManagerTest/app/test_utilities.py +++ b/src/Mod/AddonManager/AddonManagerTest/app/test_utilities.py @@ -115,7 +115,7 @@ class TestUtilities(unittest.TestCase): ] for line in good_lines: result = get_assigned_string_literal(line[0]) - self.assertEquals(result, line[1]) + self.assertEqual(result, line[1]) bad_lines = [ "my_var = __date__", diff --git a/src/Mod/AddonManager/AddonManagerTest/data/good_package.xml b/src/Mod/AddonManager/AddonManagerTest/data/good_package.xml new file mode 100644 index 0000000000..94089aca01 --- /dev/null +++ b/src/Mod/AddonManager/AddonManagerTest/data/good_package.xml @@ -0,0 +1,20 @@ + + + Test Workbench + 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 + Resources/icons/PackageIcon.svg + + + + MyWorkbench + ./ + + + + \ No newline at end of file diff --git a/src/Mod/AddonManager/CMakeLists.txt b/src/Mod/AddonManager/CMakeLists.txt index 108974ad08..a81c4256e3 100644 --- a/src/Mod/AddonManager/CMakeLists.txt +++ b/src/Mod/AddonManager/CMakeLists.txt @@ -42,6 +42,7 @@ SET(AddonManagerTests_SRCS SET(AddonManagerTestsApp_SRCS AddonManagerTest/app/__init__.py AddonManagerTest/app/test_utilities.py + AddonManagerTest/app/test_addon.py ) SET(AddonManagerTestsGui_SRCS @@ -54,6 +55,7 @@ SET(AddonManagerTestsFiles_SRCS AddonManagerTest/data/bad_macro_metadata.FCStd AddonManagerTest/data/good_macro_metadata.FCStd AddonManagerTest/data/missing_macro_metadata.FCStd + AddonManagerTest/data/good_package.xml ) SET(AddonManagerTests_ALL diff --git a/src/Mod/AddonManager/TestAddonManagerApp.py b/src/Mod/AddonManager/TestAddonManagerApp.py index bfc05ab562..2d0cc063a8 100644 --- a/src/Mod/AddonManager/TestAddonManagerApp.py +++ b/src/Mod/AddonManager/TestAddonManagerApp.py @@ -26,6 +26,10 @@ from AddonManagerTest.app.test_utilities import ( TestUtilities as AddonManagerTestUtilities, ) +from AddonManagerTest.app.test_addon import ( + TestAddon as AddonManagerTestAddon, +) # dummy usage to get flake8 and lgtm quiet False if AddonManagerTestUtilities.__name__ else True +False if AddonManagerTestAddon.__name__ else True