def check_assignment_mock(self) -> List[Check]: def assert_executed_after_baseline() -> CheckResult: self.assertEqual(self.count, len(self.baseline_assignments)) return CheckResult(True, '', '', '') return [Check('', assert_executed_after_baseline)]
def execution_mock(self, file, success_criteria, msg) -> List[Check]: def execution() -> CheckResult: if 'invalid' not in file: return_value, out, err = compile_with_gcc_and_run( 'assignments/' + self.assignment + '/' + file) msg = 'compiling ' + file + ' with gcc and running the programming gives the expected result' if type(success_criteria) is int: self.assertNotIn( success_criteria, EXITCODE_ERROR_RANGE, 'The hypster execution result value can also be an Selfie error code' ) self.assertEqual(success_criteria, return_value, msg) elif type(success_criteria) is str: filtered = filter_status_messages(out) self.assertIs(filtered, success_criteria, msg) elif callable(success_criteria): self.assertTrue( success_criteria(return_value, out)[0], msg) else: self.assertTrue(False) return CheckResult(True, "", "", "") return [Check("execution_mock", execution)]
def check_baseline_assignment_mock(self, n_th_baseline) -> List[Check]: def assert_order(i) -> CheckResult: self.assertEqual(self.count, i) self.count = self.count + 1 return CheckResult(True, '', '', '') return [Check('', lambda: assert_order(n_th_baseline))]
def execute_with_output(check: Check) -> CheckResult: print_processing(check.msg) try: result = check.execute() finally: stop_processing_spinner() if result.result == result.should_succeed: print_passed(check.msg) else: print_failed(check.msg, result.warning, result.output, result.command) return result
def compilable_mock(self, file, msg, should_succeed=True) -> List[Check]: def execute() -> CheckResult: file_path = 'assignments/' + self.assignment + '/' + file is_compilable = self.is_compilable(file) self.assertEqual(is_compilable, should_succeed) if not is_compilable: self.assertNotEqual( compile_with_gcc(file_path), 0, 'compiling ' + file + ' with gcc leads to an error') else: self.assertEqual( compile_with_gcc(file_path), 0, 'compiling ' + file + ' with gcc leads to no error') return CheckResult(True, "unittest", "", "") return [Check("compilable_check_mock", execute)]