* Don't restrict the list of compatibility values to check against
to only those we have mapped, also support unmapped more exotic
ones.
* Allow 1:1 check against sys.platform values (with startswith).
Combined with the above that allows very granular compatibility
modelling ("freebsd11", "freebsd12") if required.
* Instead of only whitelisting ("linux", "freebsd") now also black
listing is possible ("!windows").
A detected os must match all provided whitelist elements (if the
whitelist is empty that is considered always the case) and none of
the backlist elements (if the blacklist is empty that is also
considered always the case).
See the included unit tests for examples of how this works.
61 lines
2 KiB
Python
61 lines
2 KiB
Python
# coding=utf-8
|
|
"""
|
|
Unit tests for bundled plugin "PluginManager".
|
|
"""
|
|
|
|
from __future__ import absolute_import
|
|
|
|
__author__ = "Gina Häußge <osd@foosel.net>"
|
|
__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
|
|
__copyright__ = "Copyright (C) 2017 The OctoPrint Project - Released under terms of the AGPLv3 License"
|
|
|
|
import unittest
|
|
import mock
|
|
import ddt
|
|
|
|
from octoprint.plugins.pluginmanager import PluginManagerPlugin
|
|
|
|
@ddt.ddt
|
|
class PluginManagerPluginTests(unittest.TestCase):
|
|
|
|
@ddt.data(
|
|
("linux", "linux2", [], True),
|
|
("linux", "linux2", ["linux", "freebsd"], True),
|
|
("windows", "win32", ["linux", "freebsd"], False),
|
|
("linux", "linux2", ["!windows"], True),
|
|
("windows", "win32", ["!windows"], False),
|
|
("unmapped", "os2", [], True),
|
|
("unmapped", "os2", ["linux", "freebsd"], False),
|
|
("unmapped", "os2", ["!os2"], False),
|
|
("unmapped", "sunos5", ["linux", "freebsd", "sunos"], True),
|
|
("unmapped", "sunos5", ["!sunos", "!os2"], False),
|
|
|
|
# both black and white listing at the same time usually doesn't
|
|
# make a whole lot of sense, but let's test it anyhow
|
|
("linux", "linux2", ["!windows", "linux", "freebsd"], True),
|
|
("linux", "linux2", ["!windows", "freebsd"], False),
|
|
("windows", "win32", ["!windows", "linux", "freebsd"], False),
|
|
("unmapped", "sunos5", ["!windows", "linux", "freebsd"], False)
|
|
)
|
|
@ddt.unpack
|
|
def test_is_os_compatible(self, current_os, sys_platform, entries, expected):
|
|
with mock.patch("sys.platform", sys_platform):
|
|
actual = PluginManagerPlugin._is_os_compatible(current_os, entries)
|
|
self.assertEqual(actual, expected)
|
|
|
|
@ddt.data(
|
|
("win32", "windows"),
|
|
("linux2", "linux"),
|
|
("darwin", "macos"),
|
|
("linux", "linux"),
|
|
("linux3", "linux"),
|
|
("freebsd", "freebsd"),
|
|
("freebsd2342", "freebsd"),
|
|
("os2", "unmapped"),
|
|
("sunos5", "unmapped")
|
|
)
|
|
@ddt.unpack
|
|
def test_get_os(self, sys_platform, expected):
|
|
with mock.patch("sys.platform", sys_platform):
|
|
actual = PluginManagerPlugin._get_os()
|
|
self.assertEqual(actual, expected)
|