File: test_VersionedPlugin.py

package info (click to toggle)
yapsy 1.12.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 888 kB
  • sloc: python: 2,684; makefile: 82
file content (133 lines) | stat: -rw-r--r-- 5,081 bytes parent folder | download | duplicates (4)
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),
		])