Esempio n. 1
0
def test_task3_module4():
    food_expenses_found = False
    food_expenses_checks_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:
                                assignments = utils.get_assignments_from_child(
                                    z)
                                print("assignments = " + str(assignments))
                                if 'food_expenses:x:x:self:list' in assignments[
                                        0]:
                                    food_expenses_found = True
                                    if ('x:category:Groceries'
                                            in assignments[0]
                                            and 'x:category:Eating Out'
                                            in assignments[0]):
                                        food_expenses_checks_found = True

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

    assert food_expenses_found, 'Did you create the variable `food_expenses`?'
    assert food_expenses_checks_found, 'Did you assign `food_expenses` to a set comprehension with all of the category checks?'
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`?'
def test_task2_module4():
    necessary_expenses_found = False
    necessary_expenses_checks_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:
                                assignments = utils.get_assignments_from_child(
                                    z)

                                if 'necessary_expenses:x:x:self:list' in assignments[
                                        0]:
                                    necessary_expenses_found = True
                                    if ('x:category:Phone' in assignments[0]
                                            and 'x:category:Auto and Gas'
                                            in assignments[0]
                                            and 'x:category:Classes'
                                            in assignments[0]
                                            and 'x:category:Utilities'
                                            in assignments[0]
                                            and 'x:category:Mortgage'
                                            in assignments[0]):
                                        necessary_expenses_checks_found = True

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

    assert necessary_expenses_found, 'Did you create the variable `necessary_expenses`?'
    assert necessary_expenses_checks_found, 'Did you assign `necessary_expenses` to a set comprehension with all of the category checks?'
Esempio n. 4
0
def test_task4_module4():
    unnecessary_expenses_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:
                                assignments = utils.get_assignments_from_child(
                                    z)
                                print("assignments = " + str(assignments))
                                if ('unnecessary_expenses:set:self:list'
                                        in assignments[0] and
                                        'necessary_expenses' in assignments[0]
                                        and 'food_expenses' in assignments[0]):
                                    unnecessary_expenses_found = True

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

    assert unnecessary_expenses_found, 'Did you create the variable `unnecessary_expenses`? It should be initialized to `set(self.list)` minus `necessary_expenses` minus `food_expenses`.'
def test_task5_module2():

    append_def_found = False
    # else body
    sum_over_inc_found = False
    over_append_item_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 == 'append'
                                and y.args.args[0].arg == 'self'
                                and y.args.args[1].arg == 'item'):
                            append_def_found = True
                            # print("y.body = " + str(y.body))
                            for z in y.body:
                                if_statements = utils.get_if_statements_from_child(
                                    z)
                                # print("if_statements = " + str(if_statements))
                                if (isinstance(z, ast.If)):
                                    for item in z.orelse:
                                        aug_assign = utils.get_augassignments_from_child(
                                            item)
                                        func_call = utils.get_calls_from_child(
                                            item)
                                        assign = utils.get_assignments_from_child(
                                            item)

                                        if ('self:sum_overages:item'
                                                in aug_assign or
                                                'self:sum_overages:self:sum_overages:item'
                                                in assign):
                                            sum_over_inc_found = True
                                        if ('self:overages:append:item'
                                                in func_call):
                                            over_append_item_found = True
    except Exception as e:
        # print('append e = ' + str(e))
        pass

    assert append_def_found, 'Did you define the method `def append(self, item)`?'
    assert over_append_item_found, 'Inside the else statement, did you call `self.overages.append(item)`?'
    assert sum_over_inc_found, 'Inside the else statement, did you call `self.sum_overages+=item`?'
def test_task7_module2():

    main_func_found = False
    budgetlist_assign_found = False
    try:
        for x in load_ast_tree('budget/BudgetList.py').body:
            if (isinstance(x, ast.FunctionDef) and x.name == 'main'):
                main_func_found = True
                for y in x.body:
                    assignments = utils.get_assignments_from_child(y)
                    if 'myBudgetList:BudgetList:1200' in assignments:
                        budgetlist_assign_found = True

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

    assert main_func_found, 'Did you define a `main()` function?'
    assert budgetlist_assign_found, 'Did you define a `myBudgetList` variable assigned to `BudgetList(1200)`?'
def test_task2_module2():
    args_found = False
    init_found = False

    self_budget_assign_found = False
    expenses_assign_found = False
    overages_assign_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 == '__init__'):
                            init_found = True

                            if (y.args.args[0].arg == 'self'
                                    and y.args.args[1].arg == 'budget'):
                                args_found = True
                            child_assign = utils.get_assignments_from_child(y)
                            # BudgetList __init__ assignments = ['self:budget:budget', 'self:sum_expenses:0',
                            # 'self:expenses', 'self:sum_overages:0', 'self:overages']
                            if ('self:budget:budget' in child_assign):
                                self_budget_assign_found = True
                            if ('self:sum_expenses:0' in child_assign
                                    and 'self:expenses' in child_assign):
                                expenses_assign_found = True
                            if ('self:sum_overages:0' in child_assign
                                    and 'self:overages' in child_assign):
                                overages_assign_found = True

    except Exception as e:
        pass

    assert init_found, 'Did you create the `__init__` method in the `BudgetList` class?'
    assert args_found, 'The `__init__` method should take `self` and `budget` as parameters.'
    assert self_budget_assign_found, 'Did you initialize `self.budget` to `budget` in `__init__`()?'
    assert expenses_assign_found, 'Did you initialize `sum_expenses` to 0 and `expenses` to an empty list in `__init__`()?'
    assert overages_assign_found, 'Did you initialize `sum_overages` to 0 and `overages` to an empty list in `__init__`()?'
def test_task9_module2():

    expenses_assign_found = False
    read_expenses_call_found = False

    try:
        for x in load_ast_tree('budget/BudgetList.py').body:
            if (isinstance(x, ast.FunctionDef) and x.name == 'main'):
                for y in x.body:
                    assignments = utils.get_assignments_from_child(y)
                    calls = utils.get_calls_from_child(y)

                    if 'expenses:Expense:Expenses' in assignments:
                        expenses_assign_found = True
                    if 'expenses:read_expenses:data/spending_data.csv' in calls:
                        read_expenses_call_found = True

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

    assert expenses_assign_found, 'Did you define an `expenses` variable assigned to `Expense.Expenses()`?'
    assert read_expenses_call_found, 'Did you call `read_expenses(\'data/spending_data.csv\')` on `expenses`?'
def test_task4_module2():

    append_def_found = False
    # if (self.sum_expenses+item < self.budget):
    self_found = False
    sum_expenses_found = False
    op_add_found = False
    lt_found = False
    self_budget_found = False

    # if body
    sum_exp_inc_found = False
    exp_append_item_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 == 'append'
                                and y.args.args[0].arg == 'self'
                                and y.args.args[1].arg == 'item'):
                            append_def_found = True
                            # print("y.body = " + str(y.body))
                            for z in y.body:
                                if_statements = utils.get_if_statements_from_child(
                                    z)
                                # print("if_statements = " + str(if_statements))
                                if (isinstance(z, ast.If)):
                                    # test = Compare() part
                                    if (z.test.left.left.value.id == 'self'):
                                        self_found = True
                                    if (z.test.left.left.attr == 'sum_expenses'
                                        ):
                                        sum_expenses_found = True
                                    if (isinstance(z.test.left.op, ast.Add)):
                                        op_add_found = True
                                    if (isinstance(z.test.ops[0], ast.Lt)):
                                        lt_found = True
                                    if (z.test.comparators[0].value.id
                                            == 'self'
                                            and z.test.comparators[0].attr
                                            == 'budget'):
                                        self_budget_found = True
                                    # for each in body = Compare() part

                                    for item in z.body:
                                        aug_assign = utils.get_augassignments_from_child(
                                            item)
                                        assign = utils.get_assignments_from_child(
                                            item)
                                        func_call = utils.get_calls_from_child(
                                            item)

                                        if ('self:sum_expenses:item'
                                                in aug_assign or
                                                'self:sum_expenses:self:sum_expenses:item'
                                                in assign):
                                            sum_exp_inc_found = True
                                        if ('self:expenses:append:item'
                                                in func_call):
                                            exp_append_item_found = True

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

    assert append_def_found, 'Did you define the method `def append(self, item)`?'
    assert self_found and sum_expenses_found and op_add_found and lt_found and self_budget_found, 'Add an `if` statement that checks if `self.sum_expenses+item < self.budget`.'
    assert exp_append_item_found, 'Inside the if statement, did you call `self.expenses.append(item)`?'
    assert sum_exp_inc_found, 'Inside the if statement, did you call `self.sum_expenses += item`?'