def test_run_cleaner_after_exception(self): rec = CleanerCallRecorder() with self.assertRaises(Exception) as content: execute( "python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 0, ex.PREPARERS: [lambda a: 1 / 0], ex.CLEANERS: [rec, rec] }) self.assertEqual(rec.cnt, 2) self.assertEqual(rec.params[ex.EXIT_CODE], 0) self.assertEqual(rec.received, None)
def test_checker_overwritten(self): params = { ex.OPTIONS: ["echoprog.py"], ex.INPUT: "42", ex.EXIT_CODE: 0, ex.STDOUT: "41" } #canary: res, mes = execute("python", params) self.assertEqual(res, False) #test: params[ex.CHECKERS] = [DoubleChecker(abs_tolerance=1.1)] res, mes = execute("python", params) self.assertEqual(mes, "") self.assertEqual(res, True)
def test_no_checkers(self): #canary: res, mes = execute("python", { ex.OPTIONS: ["echoprog.py"], ex.EXIT_CODE: 0 }) self.assertEqual(res, False) #test: res, mes = execute("python", { ex.OPTIONS: ["echoprog.py"], ex.EXIT_CODE: 0, ex.CHECKERS: [] }) self.assertEqual(mes, "") self.assertEqual(res, True)
def test_exitcode(self): res, mes = execute("python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 1 }) self.assertEqual(mes, "Wrong return code! Expected: 1 but received 0") self.assertEqual(res, False)
def test_additional_checker_used(self): params = { ex.OPTIONS: ["echoprog.py"], ex.INPUT: "42", ex.EXIT_CODE: 0, ex.STDOUT: "41", ex.CHECKERS: [DoubleChecker(abs_tolerance=1.1)] } #canary: res, mes = execute("python", params) self.assertEqual(res, True) #test: params[ex.CHECKERS] = [DoubleChecker(abs_tolerance=1.1)] params[ex.ADDITIONAL_CHECKERS] = [DefaultChecker()] res, mes = execute("python", params) self.assertEqual(res, False)
def test_stderr(self): res, mes = execute("python", { ex.OPTIONS: ["mockprog.py", "24"], ex.STDERR: "nono" }) self.assertEqual( mes, "Wrong stderr output! Expected: [nono] but received [2424\n]") self.assertEqual(res, False)
def test_return_empty_in_preparer(self): res, mes = execute( "python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 0, ex.PREPARERS: [lambda a: ""] }) self.assertEqual(mes, "") self.assertEqual(res, True)
def test_error_in_preparer(self): res, mes = execute( "python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 0, ex.PREPARERS: [lambda a: "Error"] }) self.assertEqual(mes, "Error") self.assertEqual(res, False)
def test_error_in_cleaner(self): res, mes = execute( "python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 0, ex.CLEANERS: [lambda a, b: "Error"] }) self.assertEqual(mes, "Error") self.assertEqual(res, False)
def test_return_empty_in_cleaner(self): res, mes = execute( "python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 0, ex.CLEANERS: [lambda a, b: None] }) self.assertEqual(mes, "") self.assertEqual(res, True)
def test_mockprog2(self): res, mes = execute( "python", { ex.OPTIONS: ["mockprog.py", "24"], ex.STDERR: "2424\n", ex.STDOUT: "24\n", ex.EXIT_CODE: 0 }) self.assertEqual(mes, "") self.assertTrue(res)
def test_emptyinput(self): res, mes = execute( "python", { ex.OPTIONS: ["echoprog.py"], ex.STDERR: "", ex.STDOUT: "", ex.EXIT_CODE: 42 }) self.assertEqual(mes, "") self.assertEqual(res, True)
def test_with_default_parameters_not_overwritten(self): res, mes = execute("python", {ex.EXIT_CODE: 0}, { ex.OPTIONS: ["echoprog.py"], ex.STDERR: "my_inputmy_input\n", ex.STDOUT: "my_input\n", ex.EXIT_CODE: 22, ex.INPUT: "my_input" }) self.assertEqual(mes, "") self.assertEqual(res, True)
def test_errorcode(self): res, mes = execute( "python", { ex.OPTIONS: ["mockprog.py"], ex.STDERR: "", ex.STDOUT: "", ex.EXIT_CODE: 42 }) self.assertEqual(mes, "") self.assertEqual(res, True)
def test_rel_tolerance_not_ok(self): params = { ex.OPTIONS: ["echoprog.py"], ex.INPUT: "0.1", ex.EXIT_CODE: 0, ex.STDOUT: .081, ex.CHECKERS: [DoubleChecker(rel_tolerance=0.1)] } res, mes = execute("python", params) self.assertEqual(res, False)
def test_checker_used_first(self): double_checker = DoubleChecker(abs_tolerance=0.9) params = { ex.OPTIONS: ["echoprog.py"], ex.INPUT: "42", ex.EXIT_CODE: 0, ex.STDOUT: "41", ex.CHECKERS: [double_checker] } expected_err_msg = "Wrong stdout output! Expected: [41] but received [42\n]" #default checker message #canary: res, msg = execute("python", params) self.assertEqual(res, False) self.assertFalse(msg == expected_err_msg) #test: params[ex.CHECKERS] = [DefaultChecker()] params[ex.ADDITIONAL_CHECKERS] = [double_checker] res, msg = execute("python", params) self.assertEqual(res, False) self.assertEqual(msg, expected_err_msg)
def test_input2(self): res, mes = execute( "python", { ex.OPTIONS: ["echoprog.py"], ex.STDERR: "my_inputmy_input\n", ex.STDOUT: "my_input\n", ex.EXIT_CODE: 0, ex.INPUT: "my_input" }) self.assertEqual(mes, "") self.assertEqual(res, True)
def test_expected_output_not_double(self): params = { ex.OPTIONS: ["echoprog.py"], ex.INPUT: "1.0", ex.EXIT_CODE: 0, ex.STDOUT: "1a.0", ex.CHECKERS: [DoubleChecker(abs_tolerance=0.9)] } res, mes = execute("python", params) self.assertEqual(res, False) self.assertEqual(mes, "Expected value [1a.0] isn't a float value")
def setUp(self): #remove old data, if needed: prog = os.path.join(self.my_path, self.EXE_NAME) rm = os.path.join(self.my_path, self.program_name+".rm") silent_remove(prog) silent_remove(os.path.join(self.my_path, self.program_name+".o")) silent_remove(os.path.join(self.my_path, self.program_name+".s")) build_pars={ex.EXIT_CODE: 0, ex.STDERR: "", ex.INPUT: "", ex.STDOUT: "", ex.OPTIONS: [os.environ["RMC"], "-c", rm, "-o", prog]} res, msg = exe.execute("python", build_pars) self.assertTrue(res, msg="Could not set up: "+msg)
def test_abs_tolerance_ok(self): params = { ex.OPTIONS: ["echoprog.py"], ex.INPUT: "1.0", ex.EXIT_CODE: 0, ex.STDOUT: .91, ex.CHECKERS: [DoubleChecker(abs_tolerance=0.1)] } res, mes = execute("python", params) self.assertEqual(res, True) self.assertEqual(mes, "")
def test_call_twice(self): rec = PreparerCallRecorder() res, mes = execute( "python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 0, ex.PREPARERS: [rec, rec] }) self.assertEqual(mes, "") self.assertEqual(res, True) self.assertEqual(rec.cnt, 2) self.assertEqual(rec.params[ex.EXIT_CODE], 0)
def test_call_ones(self): rec = CleanerCallRecorder() res, mes = execute("python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 0, ex.CLEANERS: [rec] }) self.assertEqual(mes, "") self.assertEqual(res, True) self.assertEqual(rec.cnt, 1) self.assertEqual(rec.params[ex.EXIT_CODE], 0) self.assertEqual(rec.received.exit_code, 0)
def test_run_cleaner_wrong_answer(self): rec = CleanerCallRecorder() res, mes = execute( "python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 42, ex.CLEANERS: [rec, rec] }) self.assertEqual(mes, "Wrong return code! Expected: 42 but received 0") self.assertEqual(res, False) self.assertEqual(rec.cnt, 2) self.assertEqual(rec.params[ex.EXIT_CODE], 42) self.assertEqual(rec.received.exit_code, 0)
def test_run_cleaner_error_in_preparer(self): rec = CleanerCallRecorder() res, mes = execute( "python", { ex.OPTIONS: ["mockprog.py", "24"], ex.EXIT_CODE: 0, ex.PREPARERS: [lambda a: "Error"], ex.CLEANERS: [rec, rec] }) self.assertEqual(mes, "Error") self.assertEqual(res, False) self.assertEqual(rec.cnt, 2) self.assertEqual(rec.params[ex.EXIT_CODE], 0) self.assertEqual(rec.received, None)
def test_pwd(self): res, mes = execute("pwd", {ex.STDERR: "", ex.EXIT_CODE: 0}) self.assertEqual(res, True) self.assertEqual(mes, "")
def unit_test_prototype(x, exe, data, defaults): #x=>self res, msg = ex.execute(exe, data, defaults) x.assertTrue(res, msg="Wrong test with message: " + msg)