Skip to content

Commit

Permalink
Merge db1893f into b37a361
Browse files Browse the repository at this point in the history
  • Loading branch information
phihos committed Nov 23, 2018
2 parents b37a361 + db1893f commit 79d045c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 11 deletions.
2 changes: 1 addition & 1 deletion mutpy/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ def mutate_module(self, target_module, to_mutate, total_duration):
if self.mutation_number and self.mutation_number != mutation_number:
self.score.inc_incompetent()
continue
self.notify_mutation(mutation_number, mutations, target_module.__name__, mutant_ast)
self.notify_mutation(mutation_number, mutations, target_module, mutant_ast)
mutant_module = self.create_mutant_module(target_module, mutant_ast)
if mutant_module:
self.run_tests_with_mutant(total_duration, mutant_module, mutations, coverage_result)
Expand Down
35 changes: 25 additions & 10 deletions mutpy/views.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import ast
import datetime
import inspect
import os
import traceback
import datetime
import yaml
from difflib import unified_diff

import jinja2
import yaml

from mutpy import codegen, termcolor, utils


Expand Down Expand Up @@ -121,27 +126,37 @@ def original_tests_fail(self, result):
def mutation(self, number, mutations, module, mutant):
for mutation in mutations:
self.level_print(
'[#{:>4}] {:<3} {}:{:<3}: '.format(number, mutation.operator.name(), module, mutation.node.lineno),
'[#{:>4}] {:<3} {}: '.format(number, mutation.operator.name(), module.__name__),
ended=False,
level=2,
)
if mutation != mutations[-1]:
print()
if self.show_mutants:
self.print_code(mutant, mutation.node.lineno)
self.print_code(mutant, module)

def cant_load(self, name, exception):
self.level_print(self.decorate('Can\'t load module: ', 'red', attrs=['bold']) + '{} ({}: {})'.format(name,
exception.__class__.__name__, exception))

def print_code(self, mutant, lineno):
def print_code(self, mutant, original):
mutant_src = codegen.to_source(mutant)
mutant_src = codegen.add_line_numbers(mutant_src)
src_lines = mutant_src.split("\n")
lineno = min(lineno, len(src_lines))
src_lines[lineno - 1] = self.decorate('~' + src_lines[lineno - 1][1:], 'yellow')
snippet = src_lines[max(0, lineno - 5):min(len(src_lines), lineno + 5)]
print("\n{}\n".format('-'*80) + "\n".join(snippet) + "\n{}".format('-'*80))
original_src = codegen.to_source(ast.parse(inspect.getsource(original)))
original_src = codegen.add_line_numbers(original_src)
self._print_diff(mutant_src, original_src)

def _print_diff(self, mutant_src, original_src):
snippet = []
for line in unified_diff(original_src.split('\n'), mutant_src.split('\n'), n=4, lineterm=''):
if line.startswith(('---', '+++', '@@')):
continue
if line.startswith('- '):
line = self.decorate(line, 'blue')
elif line.startswith('+ '):
line = self.decorate(line, 'green')
snippet.append(line)
print("\n{}\n".format('-' * 80) + "\n".join(snippet) + "\n{}".format('-' * 80))

def killed(self, time, killer, *args, **kwargs):
self.level_print(self.time_format(time) + ' ' + self.decorate('killed', 'green') + ' by ' + str(killer),
Expand Down

0 comments on commit 79d045c

Please sign in to comment.