# -*- coding: utf-8 -*- ############################################################################## # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2010 Tiny SPRL (). All Rights Reserved # $Id$ # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # ############################################################################## import os from osv import fields, osv from tools.translate import _ import pooler import addons from base_module_quality import base_module_quality class quality_test(base_module_quality.abstract_quality_check): def __init__(self): super(quality_test, self).__init__() self.bool_installed_only = True self.name = _("Unit Test") self.note = _(""" This test checks the Unit Test(PyUnit) Cases of the module. Note that 'unit_test/test.py' is needed in module. """) self.min_score = 0 self.message = 'This test does not calculate score' self.bool_count_score = False return None def run_test(self, cr, uid, module_path): pool = pooler.get_pool(cr.dbname) module_name = module_path.split('/')[-1] test_file = addons.get_module_resource(module_name) + '/unit_test/test.py' if not os.path.isfile(test_file): self.result += _("Module does not have 'unit_test/test.py' file") return None module_obj = pool.get('ir.module.module') module_ids = module_obj.search(cr, uid, [('name', '=', module_name)]) module = module_obj.browse(cr, uid, module_ids) if not len(module): self.result += _("Error! Module is not properly loaded/installed") return None module = module[0] test = module.name + '.' + 'unit_test.test' test_module = __import__(test) test_file = getattr(test_module, 'unit_test') test_obj = getattr(test_file, 'test') test_result = test_obj.runTest(cr,uid) self.result = self.get_result(test_result) self.result_details += self.get_result_details(test_result) return None def get_result(self, data_list): header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-40s \n', [_('Summary'), _('Status')]) result_unit = {} res_list = [] if data_list[0]: res = data_list[1].split('\n') res_list.append(res[-4:][0]) res_list.append(res[-4:][2]) result_unit['unit_test'] = res_list return self.format_table(header, data_list=result_unit) return "Unit Test Fail" def get_result_details(self, data_list): detail = '''%s'''%(self.get_style()) html = '' if data_list[0] == True: data = data_list[1].split('... ok') for case in map(lambda x:x[0].replace('\n',''),map(lambda x: x.split(' ('),data)): if case.find('Ran') != -1: case = case[case.index('Ran'):-2] html += ''%(case) else: html += ''%(case) res = detail + html + '
Test CasesResult
%sOK
%sOK
' return res else: detail_dict = {} detail += '''Details''' data = data_list[1].split("======================================================================") test = data[0].split('\n') for err in (data_list[0].failures,data_list[0].errors): for value in err: detail_dict[value[0]._testMethodName] = value[1] for case in map(lambda x:x.split('...'), test): if len(case[0]) < 2: continue test_name = case[0].split(' (')[0] if not detail_dict.has_key(test_name): detail_dict[test_name] = '' html += '%s%s%s'%(test_name, case[1], detail_dict[test_name]) return detail + html +'' return '' # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: