Beispiel #1
0
    def test_use_random_randint(self):
        result = challenge_test.run_tests(CHALLENGE_CODE_20, TEST_CODE9,
                                          'random_int')
        self.assertTrue(result.success)

        result = challenge_test.run_tests(CHALLENGE_CODE_21, TEST_CODE9,
                                          'random_int')
        self.assertTrue(result.success)

        result = challenge_test.run_tests(CHALLENGE_CODE_22, TEST_CODE9,
                                          'random_int')
        self.assertFalse(result.success)
        self.assertTrue(
            'Não deveria executar o randint com os argumentos 1, 10' in
            result.failure_msgs[0])
Beispiel #2
0
 def test_one_failure(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_3, TEST_CODE1, 'ex1')
     self.assertEqual(2, result.result_obj.testsRun)
     self.assertFalse(result.success)
     self.assertEqual(1, len(result.failure_msgs))
     self.assertEqual('Não funcionou para caso com zero.',
                      result.failure_msgs[0])
Beispiel #3
0
 def test_run_program_with_error(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_10, TEST_CODE4, None)
     self.assertFalse(result.success)
     self.assertEqual(2, len(result.failure_msgs))
     for i in range(2):
         self.assertEqual('Não funcionou para algum teste',
                          result.failure_msgs[i])
Beispiel #4
0
 def test_doesnt_break_with_missing_function(self):
     f_name = 'wrong_name'
     result = challenge_test.run_tests(CHALLENGE_CODE_1, TEST_CODE1, f_name)
     self.assertFalse(result.success)
     self.assertEqual(1, len(result.failure_msgs))
     self.assertEqual(
         'Função não encontrada. Sua função deveria se chamar {}'.format(
             f_name), result.failure_msgs[0])
Beispiel #5
0
 def test_division_by_zero(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_4, TEST_CODE1, 'ex1')
     self.assertEqual(2, result.result_obj.testsRun)
     self.assertFalse(result.success)
     self.assertEqual(2, len(result.failure_msgs))
     self.assertEqual('Não funcionou para caso com zero.',
                      result.failure_msgs[0])
     self.assertEqual(challenge_test.DEFAULT_MSG, result.failure_msgs[1])
Beispiel #6
0
 def test_timeout(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_2, TEST_CODE1, 'ex1')
     self.assertEqual(2, result.result_obj.testsRun)
     self.assertFalse(result.success)
     self.assertEqual(2, len(result.failure_msgs))
     self.assertEqual(challenge_test.TIME_LIMIT_EXCEEDED,
                      result.failure_msgs[0])
     self.assertEqual(challenge_test.TIME_LIMIT_EXCEEDED,
                      result.failure_msgs[1])
Beispiel #7
0
def handle(event, context):
    answer = event['answer']
    test_code = event['test_code']
    function_name = event['function_name']

    result = ch.run_tests(answer, test_code, function_name)
    retval = {
        'failure_msgs': result.failure_msgs,
        'success': result.success,
        'stack_traces': result.stack_traces,
    }

    return json.dumps(retval)
Beispiel #8
0
def run_code(challenge, answer):
    answer = answer.decode('utf-8')
    test_code = challenge.test_file.read().decode('utf-8')
    if settings.DEV_SERVER:
        return ch.run_tests(answer, test_code, challenge.function_name)
    else:
        lamb = boto3.client('lambda')
        args = {
            'answer': answer,
            'test_code': test_code,
            'function_name': challenge.function_name,
        }

        response = lamb.invoke(FunctionName="testRunner",
                               InvocationType='RequestResponse',
                               Payload=json.dumps(args))
        feedback = response['Payload'].read().decode('utf-8')
        feedback = json.loads(json.loads(feedback))
        return TestResults(feedback['failure_msgs'], feedback['success'],
                           feedback['stack_traces'])
def executa_codigo(exercicio, resposta):
    resposta = resposta.decode('utf-8')
    testes = exercicio.testes.read().decode('utf-8')
    if settings.DEV_SERVER:
        return ch.run_tests(resposta, testes, exercicio.nome_funcao)
    else:
        kwargs = {
            'region_name': 'us-east-1',
        }
        if settings.AWS_ACCESS_KEY:
            kwargs['aws_access_key_id'] = settings.AWS_ACCESS_KEY
        if settings.AWS_SECRET_KEY:
            kwargs['aws_secret_access_key'] = settings.AWS_SECRET_KEY
        lamb = boto3.client('lambda', **kwargs)
        args = {
            'answer': resposta,
            'test_code': testes,
            'function_name': exercicio.nome_funcao,
        }

        response = lamb.invoke(FunctionName="testRunner",
                               InvocationType='RequestResponse',
                               Payload=json.dumps(args))
        feedback = response['Payload'].read().decode('utf-8')
        feedback = json.loads(feedback)
        if isinstance(
                feedback,
                dict) and 'Task timed out after' in feedback['errorMessage']:
            msg = feedback['errorMessage']
            msg = msg[msg.index('Task timed out'):]
            feedback = {
                'success': False,
                'failure_msgs': [ch.TIME_LIMIT_EXCEEDED],
                'stack_traces': [msg],
                'stdouts': [''],
            }
        else:
            feedback = json.loads(feedback)
        return TestResults(feedback['failure_msgs'], feedback['success'],
                           feedback['stack_traces'], feedback['stdouts'])
Beispiel #10
0
 def test_print_failure(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_6, TEST_CODE2,
                                       'code_with_print')
     self.assertEqual(1, result.result_obj.testsRun)
     self.assertFalse(result.success)
Beispiel #11
0
 def test_doesnt_allow_input_in_function_challenge(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_19, TEST_CODE8,
                                       'do_nothing')
     self.assertFalse(result.success)
     self.assertTrue('input' in result.failure_msgs[0])
Beispiel #12
0
 def test_append(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_18, TEST_CODE7, None)
     self.assertTrue(result.success)
Beispiel #13
0
 def test_write(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_17, TEST_CODE6, None)
     self.assertTrue(result.success)
Beispiel #14
0
 def test_write_file_opened_for_reading(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_16, TEST_CODE5, None)
     self.assertFalse(result.success)
     self.assertTrue('UnsupportedOperation' in result.stack_traces[0])
     self.assertTrue('not writable' in result.stack_traces[0])
Beispiel #15
0
 def test_open_file_that_doesnt_exist(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_13, TEST_CODE5, None)
     self.assertFalse(result.success)
     self.assertTrue('FileNotFoundError' in result.stack_traces[0])
Beispiel #16
0
 def test_with_open(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_12, TEST_CODE5, None)
     self.assertTrue(result.success)
Beispiel #17
0
    code = None
    try:
        with open(filename) as f:
            code = f.read()
    except FileNotFoundError:
        print('File {} not found'.format(filename))
    return code



target_code = load_code(args.target_filename)
test_code = load_code(args.test_filename)

result = None
if target_code is not None and test_code is not None:
    result = ch.run_tests(target_code, test_code, args.function_name)

if result:
    if result.success:
        print('Passed all tests!')
    else:
        print('Did not pass all tests :(')
        print('Failure messages:')
        for msg in result.failure_msgs:
            print(msg)
        if args.verbose:
            print('\nStack traces:')
            for st in result.stack_traces:
                print(st)
        print()
else:
Beispiel #18
0
 def test_run_program_if_none_function(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_9, TEST_CODE4, None)
     self.assertEqual(2, result.result_obj.testsRun)
     self.assertTrue(result.success)
Beispiel #19
0
 def test_doesnt_break_with_multiple_inputs(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_23, TEST_CODE10, None)
     self.assertTrue(result.success)
Beispiel #20
0
 def test_doesnt_break_with_syntax_error(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_0, TEST_CODE1, 'ex1')
     self.assertFalse(result.success)
     self.assertEqual(1, len(result.failure_msgs))
     self.assertEqual('Erro de sintaxe (código Python inválido)',
                      result.failure_msgs[0])
Beispiel #21
0
 def test_pass_all_tests(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_1, TEST_CODE1, 'ex1')
     self.assertEqual(2, result.result_obj.testsRun)
     self.assertTrue(result.success)
     self.assertEqual(0, len(result.failure_msgs))
Beispiel #22
0
 def test_get_stdout(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_24, TEST_CODE11, None)
     self.assertFalse(result.success)
     self.assertEqual([('Começando', ), ('Continuar? ', 'sim'),
                       ('Continuar? ', 'sim'), ('Continuar? ', 'não'),
                       ('Fim', )], result.stdouts[0])
Beispiel #23
0
 def test_fail_input(self):
     result = challenge_test.run_tests(CHALLENGE_CODE_8, TEST_CODE3,
                                       'input_and_sum')
     self.assertEqual(2, result.result_obj.testsRun)
     self.assertFalse(result.success)