def test_performed_mutation_ids(): source = "dict(a=b, c=d)" context = Context(source=source) mutate(context) # we found two mutation points: mutate "a" and "c" assert context.performed_mutation_ids == [ MutationID(source, 0, 0), MutationID(source, 1, 0) ]
def test_perform_one_indexed_mutation(): assert mutate( Context(source='1+1', mutation_id=MutationID(line='1+1', index=0, line_number=0))) == ('2+1', 1) assert mutate( Context(source='1+1', mutation_id=MutationID('1+1', 1, line_number=0))) == ('1-1', 1) assert mutate( Context(source='1+1', mutation_id=MutationID('1+1', 2, line_number=0))) == ('1+2', 1)
def test_mutate_dict2(): source = "dict(a=b, c=d, e=f, g=h)" assert mutate( Context(source=source, mutation_id=MutationID( source, 3, line_number=0))) == ("dict(a=b, c=d, e=f, gXX=h)", 1)
def test_mutate_dict(): source = "dict(a=b, c=d)" assert mutate( Context(source=source, mutation_id=MutationID(source, 1, line_number=0))) == ("dict(a=b, cXX=d)", 1)
def test_function_with_annotation(): source = "def capitalize(s : str):\n return s[0].upper() + s[1:] if s else s\n" assert mutate( Context(source=source, mutation_id=MutationID(source.split('\n')[1], 0, line_number=1)) ) == ( "def capitalize(s : str):\n return s[1].upper() + s[1:] if s else s\n", 1)
def mutation_id_from_pk(pk): mutant = Mutant.get(id=pk) return MutationID(line=mutant.line.line, index=mutant.index, line_number=mutant.line.line_number)
def mutation_id_of_current_index(self): return MutationID(line=self.current_source_line, index=self.index, line_number=self.current_line_index)
def __init__(self, line, index, line_number): self.line = line self.index = index self.line_number = line_number def __repr__(self): return 'MutationID(line="{}", index={}, line_number={})'.format( self.line, self.index, self.line_number) def __eq__(self, other): return (self.line, self.index, self.line_number) == (other.line, other.index, other.line_number) ALL = MutationID(line='%all%', index=-1, line_number=-1) class InvalidASTPatternException(Exception): pass class ASTPattern(object): def __init__(self, source, **definitions): if definitions is None: definitions = {} source = source.strip() self.definitions = definitions self.module = parse(source)