MrDraw/tests/plugins/test_pluginmanager.py
Gina Häußge 346f818707 PGMR: More general flexibility for os compat check
* 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.
2017-04-07 09:18:37 +02:00

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)