1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
# -*- coding: utf-8; tab-width: 4; indent-tabs-mode: t; python-indent: 4 -*-
from . import test_settings
from .test_settings import TEST_MESSAGE
import unittest
import os
from yapsy.IPlugin import IPlugin
from yapsy.VersionedPluginManager import VersionedPluginManager
class VersionedTestsCase(unittest.TestCase):
"""
Test the correct loading of a simple plugin as well as basic
commands.
"""
def setUp(self):
"""
init
"""
# create the plugin manager
self.versionedPluginManager = VersionedPluginManager(
directories_list=[os.path.join(
os.path.dirname(os.path.abspath(__file__)),"plugins")],
plugin_info_ext="version-plugin",
)
# load the plugins that may be found
self.versionedPluginManager.collectPlugins()
# Will be used later
self.plugin_info = None
def plugin_loading_check(self):
"""
Test if the correct plugin has been loaded.
"""
if self.plugin_info is None:
# check nb of categories
self.assertEqual(len(self.versionedPluginManager.getCategories()),1)
sole_category = self.versionedPluginManager.getCategories()[0]
# check the number of plugins (the older versions of the
# plugins should not be there)
self.assertEqual(len(self.versionedPluginManager.getPluginsOfCategory(sole_category)),1)
# older versions of the plugin should be found in the attic
self.assertEqual(len(self.versionedPluginManager.getPluginsOfCategoryFromAttic(sole_category)),4)
plugins = self.versionedPluginManager.getPluginsOfCategory(sole_category)
self.plugin_info = None
for plugin_info in plugins:
TEST_MESSAGE("plugin info: %s" % plugin_info)
if plugin_info.name == "Versioned Plugin":
self.plugin_info = plugin_info
break
self.assertTrue(self.plugin_info)
# test that the name of the plugin has been correctly defined
self.assertEqual(self.plugin_info.name,"Versioned Plugin")
self.assertEqual(sole_category,self.plugin_info.category)
else:
self.assertTrue(True)
def testLoaded(self):
"""
Test if the correct plugin has been loaded.
"""
self.plugin_loading_check()
sole_category = self.versionedPluginManager.getCategories()[0]
self.assertEqual(len(self.versionedPluginManager.getLatestPluginsOfCategory(sole_category)),1)
self.plugin_info = self.versionedPluginManager.getLatestPluginsOfCategory(sole_category)[0]
TEST_MESSAGE("plugin info: %s" % self.plugin_info)
# test that the name of the plugin has been correctly defined
self.assertEqual(self.plugin_info.name,"Versioned Plugin")
self.assertEqual(sole_category,self.plugin_info.category)
self.assertEqual("1.2",str(self.plugin_info.version))
def testLatestPluginOfCategory(self):
self.plugin_loading_check()
def testActivationAndDeactivation(self):
"""
Test if the activation procedure works.
"""
self.plugin_loading_check()
self.assertTrue(not self.plugin_info.plugin_object.is_activated)
self.versionedPluginManager.activatePluginByName(self.plugin_info.name,
self.plugin_info.category)
self.assertTrue(self.plugin_info.plugin_object.is_activated)
self.versionedPluginManager.deactivatePluginByName(self.plugin_info.name,
self.plugin_info.category)
self.assertTrue(not self.plugin_info.plugin_object.is_activated)
# also check that this is the plugin of the latest version
# that has been activated (ok the following test is already
# ensured by the plugin_loading_check method, but this is to
# make the things clear: the plugin chosen for activation is
# the one with the latest version)
self.assertEqual("1.2",str(self.plugin_info.version))
def testDirectActivationAndDeactivation(self):
"""
Test if the activation procedure works when directly activating a plugin.
"""
self.plugin_loading_check()
self.assertTrue(not self.plugin_info.plugin_object.is_activated)
TEST_MESSAGE("plugin object = %s" % self.plugin_info.plugin_object)
self.plugin_info.plugin_object.activate()
self.assertTrue(self.plugin_info.plugin_object.is_activated)
self.plugin_info.plugin_object.deactivate()
self.assertTrue(not self.plugin_info.plugin_object.is_activated)
def testAtticConsistencyAfterCategoryFilterUpdate(self):
"""
Test that changing the category filer doesn't make the attic inconsistent.
"""
self.plugin_loading_check()
newCategory = "Mouf"
# Pre-requisite for the test
previousCategories = self.versionedPluginManager.getCategories()
self.assertTrue(len(previousCategories) >= 1)
self.assertTrue(newCategory not in previousCategories)
# change the category and see what's happening
self.versionedPluginManager.setCategoriesFilter({newCategory: IPlugin})
self.versionedPluginManager.collectPlugins()
for categoryName in previousCategories:
self.assertRaises(KeyError, self.versionedPluginManager\
.getPluginsOfCategory, categoryName)
self.assertEqual(len(self.versionedPluginManager\
.getPluginsOfCategoryFromAttic(newCategory)),4)
suite = unittest.TestSuite([
unittest.TestLoader().loadTestsFromTestCase(VersionedTestsCase),
])
|