Ejemplo n.º 1
0
def test_task4_module3():
    next_def_found = False
    try_found = False
    exception_handler_found = False
    iter_e_next_found = False
    iter_o_next_found = False

    try:
        for x in load_ast_tree('budget/BudgetList.py').body:
            if isinstance(x, ast.ClassDef):
                if x.name == 'BudgetList':
                    for y in x.body:
                        if (isinstance(y, ast.FunctionDef) and
                                y.name == '__next__' and
                                y.args.args[0].arg=='self'):
                            next_def_found = True
                            # for z in y.body:
                            if (isinstance(y.body[0], ast.Try)):
                                try_found = True
                                returns = utils.get_returns_from_child(y.body[0])
                                if returns[0] == 'self:iter_e:__next__':
                                    iter_e_next_found = True
                                if (isinstance(y.body[0].handlers[0], ast.ExceptHandler) and
                                    y.body[0].handlers[0].type.id == 'StopIteration' and 
                                    y.body[0].handlers[0].name == 'stop'):
                                    exception_handler_found = True
                                    returns = utils.get_returns_from_child(y.body[0])
                                    if returns[1] == 'self:iter_o:__next__':
                                        iter_o_next_found = True
    except Exception as e:
            # print('next e = ' + str(e))
            pass

    assert next_def_found, 'Did you define the method `def __next__(self)`?'
    assert try_found, 'Do you have a `try` block?'
def test_task2_module3():
    iter_def_found = False
    self_iter_e_found = False
    self_iter_o_found = False
    self_return_found = False

    try:
        for x in load_ast_tree('budget/BudgetList.py').body:
            if isinstance(x, ast.ClassDef):
                if x.name == 'BudgetList':
                    for y in x.body:
                        if (isinstance(y, ast.FunctionDef) and
                                y.name == '__iter__' and
                                y.args.args[0].arg=='self'):
                            iter_def_found = True
                            # for z in y.body:
                            assignments = utils.get_assignments_from_child(y)
                            returns = utils.get_returns_from_child(y)
                            if 'self:iter_e:iter:self:expenses' in assignments:
                                self_iter_e_found = True
                            if 'self:iter_o:iter:self:overages' in assignments:
                                self_iter_o_found = True
                            if 'self' in returns:
                                self_return_found = True
    except Exception as e:
            # print('iter e = ' + str(e))
            pass

    assert iter_def_found, 'Did you define the method `def __iter__(self)`?'
    assert self_iter_e_found, 'Did you assign `self.iter_e` to the iterator `iter(self.expenses)`?'
    assert self_iter_o_found, 'Did you assign `self.iter_o` to the iterator `iter(self.overages)`?'
    assert self_return_found, 'Did you return `self`?'
Ejemplo n.º 3
0
def test_task5_module4():
    return_found = False

    try:
        for x in load_ast_tree('budget/Expense.py').body:
            if isinstance(x, ast.ClassDef):
                if x.name == 'Expenses':
                    for y in x.body:
                        if (isinstance(y, ast.FunctionDef)
                                and y.name == 'categorize_set_comprehension'):
                            for z in y.body:
                                returns = utils.get_returns_from_child(z)
                                print("returns = " + str(returns))
                                if 'necessary_expenses:food_expenses:unnecessary_expenses' in returns:
                                    return_found = True

    except Exception as e:
        # print('iter e = ' + str(e))
        pass

    assert return_found, 'Did you return `[necessary_expenses, food_expenses, unnecessary_expenses]`?'