def build_dict(self, path, container, contents): """ Build a hierarchical dictionary including information about the stats at each level and the duration. """ if isinstance(path, basestring): segs = process_pytest_path(path) else: segs = path head = segs[0] end = segs[1:] # If we are at the end node, ie a test. if not end: container['_sub'][head] = contents container['_stats'][contents['outcomes']['overall']] += 1 container['_duration'] += contents['duration'] # If we are in a module. else: if head not in container['_sub']: container['_sub'][head] = deepcopy(_tests_tpl) # Call again to recurse down the tree. self.build_dict(end, container['_sub'][head], contents) container['_stats'][contents['outcomes']['overall']] += 1 container['_duration'] += contents['duration']
def build_li(self, lev): """ Build up the actual HTML tree from the dict from build_dict """ bimdict = {'passed': 'success', 'failed': 'warning', 'error': 'danger', 'skipped': 'primary', 'xpassed': 'danger', 'xfailed': 'success'} list_string = '<ul>\n' for k, v in lev['_sub'].iteritems(): # If 'name' is an attribute then we are looking at a test (leaf). if 'name' in v: pretty_time = str(datetime.timedelta(seconds=math.ceil(v['duration']))) teststring = '<span name="mod_lev" class="label label-primary">T</span>' label = '<span class="label label-{}">{}</span>'.format( bimdict[v['outcomes']['overall']], v['outcomes']['overall'].upper()) proc_name = process_pytest_path(v['name'])[-1] link = ( '<a href="#{}">{} {} {} <span style="color:#888888"><em>[{}]</em></span></a>' .format(v['name'], proc_name, teststring, label, pretty_time)) # Do we really need the os.path.split (now process_pytest_path) here? # For me it seems the name is always the leaf list_string += '<li>{}</li>\n'.format(link) # If there is a '_sub' attribute then we know we have other modules to go. elif '_sub' in v: percenstring = "" bmax = 0 for _, val in v['_stats'].iteritems(): bmax += val # If there were any NON skipped tests, we now calculate the percentage which # passed. if bmax: percen = "{:.2f}".format((float(v['_stats']['passed']) + float(v['_stats']['skipped']) + float(v['_stats']['xfailed'])) / float(bmax) * 100) if float(percen) == 100.0: level = 'passed' elif float(percen) > 80.0: level = 'failed' else: level = 'error' percenstring = '<span name="blab" class="label label-{}">{}%</span>'.format( bimdict[level], percen) modstring = '<span name="mod_lev" class="label label-primary">M</span>' pretty_time = str(datetime.timedelta(seconds=math.ceil(v['_duration']))) list_string += ('<li>{} {}<span> </span>' '{}{}<span style="color:#888888"> <em>[{}]' '</em></span></li>\n').format(k, modstring, str(percenstring), self.build_li(v), pretty_time) list_string += '</ul>\n' return list_string
def build_li(self, lev): """ Build up the actual HTML tree from the dict from build_dict """ bimdict = {'passed': 'success', 'failed': 'warning', 'error': 'danger', 'skipped': 'primary', 'xpassed': 'danger', 'xfailed': 'success'} list_string = '<ul>\n' for k, v in lev['_sub'].iteritems(): # If 'name' is an attribute then we are looking at a test (leaf). if 'name' in v: pretty_time = str(datetime.timedelta(seconds=math.ceil(v['duration']))) teststring = '<span name="mod_lev" class="label label-primary">T</span>' label = '<span class="label label-{}">{}</span>'.format( bimdict[v['outcomes']['overall']], v['outcomes']['overall'].upper()) proc_name = process_pytest_path(v['name'])[-1] link = ( '<a href="#{}">{} {} {} <span style="color:#888888"><em>[{}]</em></span></a>' .format(v['name'], proc_name, teststring, label, pretty_time)) # Do we really need the os.path.split (now process_pytest_path) here? # For me it seems the name is always the leaf list_string += '<li>{}</li>\n'.format(link) # If there is a '_sub' attribute then we know we have other modules to go. elif '_sub' in v: percenstring = "" bmax = 0 for _, val in v['_stats'].iteritems(): bmax += val # If there were any NON skipped tests, we now calculate the percentage which # passed. if bmax: percen = "{:.2f}".format((float(v['_stats']['passed']) + float(v['_stats']['xfailed'])) / float(bmax) * 100) if float(percen) == 100.0: level = 'passed' elif float(percen) > 80.0: level = 'failed' else: level = 'error' percenstring = '<span name="blab" class="label label-{}">{}%</span>'.format( bimdict[level], percen) modstring = '<span name="mod_lev" class="label label-primary">M</span>' pretty_time = str(datetime.timedelta(seconds=math.ceil(v['_duration']))) list_string += ('<li>{} {}<span> </span>' '{}{}<span style="color:#888888"> <em>[{}]' '</em></span></li>\n').format(k, modstring, str(percenstring), self.build_li(v), pretty_time) list_string += '</ul>\n' return list_string
def test_process_pytest_path(input_string, expected_result): assert process_pytest_path(input_string) == expected_result