def test_executar_codigo_com_erro(self): codigo = "x = input('bla')\nprint(y)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) j.salvarResultados = stub_save with self.assertRaises(JuizError): j.executarTestes(arquivo) arquivo.apagarArquivo() codigo = "x = 2\nz = input('ble')\nprint(y)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) j.salvarResultados = stub_save with self.assertRaisesRegex( JuizError, "O código apresentou o seguinte erro 'NameError' na linha 3"): j.executarTestes(arquivo) arquivo.apagarArquivo()
def test_escrever_codigo_arquivo(self): codigo = "x = 2\ny = 3" a = ArquivoSubmissao(codigo) arquivoCriado = open(a.arquivo.name, "r") self.assertEqual(codigo + "\n", arquivoCriado.read( )) # a criação de arquivo no python acrescenta uma linha \n a.apagarArquivo()
def test_apagar_arquivo_nao_existente(self): try: a = ArquivoSubmissao("x = 2") a.apagarArquivo() a.apagarArquivo() except Exception as e: self.fail("Unexpected exception %s" % e)
def test_executar_testes_questao_vazia(self): submissao = Submissao("x = 2", None, None) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) with self.assertRaises(JuizError): j.executarTestes(arquivo) arquivo.apagarArquivo()
def test_executar_arquivo_inexistente(self): codigo = "x = input('bla')\nprint(y)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) arquivo.apagarArquivo() with self.assertRaises(JuizError): j.executarTestes(arquivo)
def test_executar_codigo_com_menos_inputs(self): codigo = "x = input('blableble')\nprint(x)" testsCases = [TestCase("1", ["2", "3"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) j.salvarResultados = stub_save with self.assertRaises(JuizError): j.executarTestes(arquivo) arquivo.apagarArquivo()
def test_executar_codigo_sucesso(self): codigo = "x = input('bla')\nprint(x)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) j.salvarResultados = stub_save self.assertListEqual( [ResultadoTestCase(submissao, testsCases[0], ["2"], True)], j.executarTestes(arquivo)) arquivo.apagarArquivo()
def post(self, request, format=None): try: # TODO: verificações para ver se o JSON é válido if self.submissaoRequestValid(request): testsCases = TestCase.listAllByQuery(Query("questaoId", "==", request.data["questaoId"])) questao = Questao(request.data["questaoId"], testsCases) submissao = Submissao(None, request.data["codigo"], Estudante(request.data["estudanteId"], None), questao) juiz = Juiz(submissao) arquivo = ArquivoSubmissao(submissao.codigo) jsonVisualizacao = juiz.executarVisualizacao(arquivo) arquivo.apagarArquivo() return JsonResponse(jsonVisualizacao, safe=False, status=status.HTTP_201_CREATED) except Exception as exception: return JsonResponse({"erro":str(exception)}, safe=False, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(status=status.HTTP_201_CREATED)
def post(self, request, format=None): json = "" httpStatus = 201 try: if Submissao.validarJson(request.data): submissao = Submissao.fromJson(request.data) juiz = Juiz(submissao) arquivo = ArquivoSubmissao(submissao.codigo) if request.data["tipo"] == "visualização": json = juiz.executarVisualizacao(arquivo) else: if request.data["tipo"] == "testes": submissao.resultadosTestsCases = juiz.executarTestes( arquivo) #submissao.saida = juiz.executar(arquivo) json = submissao.toJson() else: httpStatus = 400 except pexpect.TIMEOUT as exception: json = { "mensagem": "TimedoutError: o tempo de execução do seu algoritmo expirou." } httpStatus = 408 except Exception as exception: json = {"mensagem": str(exception)} httpStatus = 500 finally: if arquivo != None: arquivo.apagarArquivo() response = JsonResponse(json, safe=False, status=httpStatus) response["Access-Control-Allow-Origin"] = "*" return response
def test_saida_valida(self): submissao = Submissao("x = 2", None, None) j = Juiz(submissao) self.assertTrue(j.compararSaidaEsperadaComSaidaAlgoritmo("2", "2")) arquivo = ArquivoSubmissao(submissao.codigo) arquivo.apagarArquivo()
def test_criar_arquivo(self): a = ArquivoSubmissao("x = 2") self.assertIsNotNone(a.arquivo) a.apagarArquivo()
def test_apagar_arquivo(self): a = ArquivoSubmissao("x = 2") self.assertTrue(os.path.exists(a.arquivo.name)) a.apagarArquivo() self.assertIsNone(a.arquivo)
def test_arquivo_valido(self): a = ArquivoSubmissao("x = 2") self.assertTrue(a.is_arquivo_valido()) a.apagarArquivo()
def test_arquivo_invalido(self): with self.assertRaises(ValueError): a = ArquivoSubmissao("")