56
56
return __import__(test_module, fromlist=[test_module], level=0)
58
def plugin_test(self, name, base):
58
def plugin_item_test(self, name, base):
59
"""Test that there is API test for plugin items"""
60
self.plugin_test(name, base, 'item', ItemApiBase)
62
def plugin_list_test(self, name, base):
63
"""Test that there is API test for plugin items"""
64
self.plugin_test(name, base, 'list', CollectionApiBase)
66
def plugin_source_test(self, name, base):
67
"""Test that there is API test for plugin items"""
68
self.plugin_test(name, base, 'source', SourceApiBase)
70
def plugin_test(self, name, base, layer, base_api):
59
71
"""Test each plugin class"""
60
72
test_module = self.api_test(name, base)
64
75
for d_value in ModuleClasses(test_module):
65
if issubclass(d_value, ItemApiBase):
66
api_item_test = d_value
67
if issubclass(d_value, CollectionApiBase):
68
api_list_test = d_value
76
if issubclass(d_value, base_api):
70
79
# Test that this has a Test Case
71
self.assert_(api_item_test,
72
"%s '%s' does not have an item test suite." % (
73
self.inter_name, name)
75
self.assert_(api_list_test,
76
"%s '%s' does not have a collection test suite." % (
77
self.inter_name, name)
80
self.assert_(api_test,
81
"%s '%s' does not have an %s test suite." % (
82
self.inter_name, name, layer)
80
85
# Test that it inherits from the data class for this plugin
81
api_item_check = False
82
api_list_check = False
83
87
base_data_class = get_base_data_class( base )
84
88
test_base = self.api_test(base_data_class.__module__, base_data_class)
85
89
for d_value in ModuleClasses(test_base):
86
if issubclass(d_value, ItemApiBase):
87
if issubclass(api_item_test, d_value):
89
if issubclass(d_value, CollectionApiBase):
90
if issubclass(api_list_test, d_value):
93
self.assert_(api_list_check,
94
"%s '%s' doesn't inherit from collection api base class." % (
95
self.inter_name, name)
98
self.assert_(api_item_check,
99
"%s '%s' does not inherit from item api base class." % (
100
self.inter_name, name)
90
if issubclass(d_value, base_api) and issubclass(api_test, d_value):
93
self.assert_(api_check,
94
"%s '%s' doesn't inherit from %s api base class." % (
95
self.inter_name, name, layer)
103
98
def class_test(self, name, base):
138
133
for d_base in f_base.__bases__:
139
134
if 'classes' in d_base.__module__:
141
deeper = data_base_class(d_base)
136
deeper = get_base_data_class(d_base)
146
def make_api_test_exists(g_name, d_base, api='plugin'):
141
def make_api_test_exists(g_name, d_base, layer='none'):
147
142
"""Create an API Check Test"""
148
def plugin_test_exists(self):
150
self.plugin_test(g_name, d_base)
143
def plugin_item_exists(self):
145
self.plugin_item_test(g_name, d_base)
146
def plugin_list_exists(self):
148
self.plugin_list_test(g_name, d_base)
149
def plugin_source_exists(self):
151
self.plugin_source_test(g_name, d_base)
154
result = plugin_item_exists
155
elif layer == 'list':
156
result = plugin_list_exists
157
elif layer == 'source':
158
result = plugin_source_exists
160
h_name = ' '.join(g_name.split('.')[1:]).title()
161
result.func_doc = "Tests Exist for %s %s" % (h_name, layer.title())
165
def make_class_test_exists(g_name, d_base):
166
"""Make a test suite for a data class"""
151
167
def class_test_exists(self):
152
168
"""No Information"""
153
169
self.class_test(g_name, d_base)
155
result = plugin_test_exists
157
result = class_test_exists
170
result = class_test_exists
159
171
h_name = ' '.join(g_name.split('.')[1:]).title()
160
172
result.func_doc = "Tests Exist for %s" % (h_name)
163
176
def add_extra_tests(test_case, results):
164
177
"""Add each of the results to the test class"""
165
178
for name, func in results.iteritems():
166
179
setattr(test_case, name, func)
168
def add_api_tests(test_case, source, api_type='plugin'):
182
def add_api_tests(test_case, source):
169
183
"""Add a whole bunch of API tests as required"""
171
185
for module_name, target_class in ModulesClasses(source):
172
186
class_name = module_name.replace('Coisas.', '')
173
188
if issubclass(target_class, DataItem):
174
# Add an API test for a plugin's DataItem
175
func = make_api_test_exists(class_name, target_class, api=api_type)
176
test_name = "test_%s_api" % (class_name.replace('.','_'))
190
elif issubclass(target_class, DataCollection):
192
elif issubclass(target_class, DataSource):
196
# Add an API test for a plugin
197
func = make_api_test_exists(class_name, target_class, layer=layer)
198
test_name = "test_%s_%s_api" % (class_name.replace('.','_'), layer)
177
199
result[test_name] = func
178
201
# We could add source and collection API tests too.
179
202
add_extra_tests(test_case, result)
205
def add_class_tests(test_case, source):
206
"""Add a whole bunch of data class tests"""
207
for module_name, target_class in ModulesClasses(source):
208
class_name = module_name.replace('Coisas.', '')
209
if issubclass(target_class, DataItem):
210
test_name = "test_%s_class" % (class_name.replace('.','_'))
211
add_extra_tests(test_case, { test_name :
212
make_class_test_exists(class_name, target_class),
181
216
class DataClassTestCase(RootTestCase):
182
217
"""Test Data Classes have API Test Cases"""
183
218
inter_type = 'classes'
184
219
inter_name = 'Data Class'
186
221
CLASSES = load_modules( Coisas.classes )
187
add_api_tests(DataClassTestCase, CLASSES, 'class')
222
add_class_tests(DataClassTestCase, CLASSES)
189
224
class PluginsTestCase(RootTestCase):
190
225
"""Test Plugins have Tests for their APIs"""