Exemplo n.º 1
0
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)
    ]
Exemplo n.º 2
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
 def mutation_id_of_current_index(self):
     return MutationID(line=self.current_source_line,
                       index=self.index,
                       line_number=self.current_line_index)
Exemplo n.º 8
0
    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)