tests/subfiles.py

changeset 82
75b5241a35ec
parent 80
2f81758d1537
child 83
bd840d5dc8d8
equal deleted inserted replaced
81:e65d82501a38 82:75b5241a35ec
235 message = lambda category: str.format( 235 message = lambda category: str.format(
236 '"{category}" is not an official category', 236 '"{category}" is not an official category',
237 category = category, 237 category = category,
238 ) 238 )
239 ) 239 )
240 @problem_type('bad-category-in-description',
241 severity = 'hold',
242 message = lambda category: str.format(
243 'the category "{category}" must be set using !CATEGORY '
244 'and not by description',
245 category = category,
246 )
247 )
240 def category_test(model): 248 def category_test(model):
241 if model.header.valid: 249 if model.header.valid:
242 categories = library_standards['categories'].keys() 250 categories = library_standards['categories']
243 if model.header.effective_category not in categories: 251 illegal_categories_in_description = [
252 category_name.lower()
253 for category_name in categories.keys()
254 if ' ' in category_name
255 ]
256 has_bad_category = False
257 if model.header.effective_category not in categories.keys():
244 try: 258 try:
245 bad_object = model.find_first_header_object('category') 259 bad_object = model.find_first_header_object('category')
246 except KeyError: 260 except KeyError:
247 # category was not specified using !CATEGORY, blame 261 # category was not specified using !CATEGORY, blame
248 # the description instead 262 # the description instead
249 bad_object = model.body[0] 263 bad_object = model.body[0]
264 has_bad_category = True
250 yield report_problem( 265 yield report_problem(
251 'bad-category', 266 'bad-category',
252 bad_object = bad_object, 267 bad_object = bad_object,
253 category = model.header.effective_category, 268 category = model.header.effective_category,
254 ) 269 )
270 # Check if the description sets a multi-word category
271 if not has_bad_category and model.header.category is None:
272 for category_name in illegal_categories_in_description:
273 if model.header.description.lower().startswith(category_name):
274 yield report_problem(
275 'bad-category-in-description',
276 bad_object = model.body[0],
277 category = category_name.title(),
278 )
279 break
255 280
256 manifest = { 281 manifest = {
257 'tests': [ 282 'tests': [
258 determinant_test, 283 determinant_test,
259 scaling_legality_test, 284 scaling_legality_test,

mercurial