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?'
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`?'