예제 #1
0
 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()
예제 #2
0
 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)
예제 #3
0
    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()
예제 #4
0
 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)
예제 #5
0
 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()
예제 #6
0
 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()
예제 #7
0
    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()
예제 #8
0
    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)
예제 #9
0
    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
예제 #10
0
 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()
예제 #11
0
    def test_criar_arquivo(self):

        a = ArquivoSubmissao("x = 2")

        self.assertIsNotNone(a.arquivo)
        a.apagarArquivo()
예제 #12
0
 def test_apagar_arquivo(self):
     a = ArquivoSubmissao("x = 2")
     self.assertTrue(os.path.exists(a.arquivo.name))
     a.apagarArquivo()
     self.assertIsNone(a.arquivo)
예제 #13
0
 def test_arquivo_valido(self):
     a = ArquivoSubmissao("x = 2")
     self.assertTrue(a.is_arquivo_valido())
     a.apagarArquivo()
예제 #14
0
 def test_arquivo_invalido(self):
     with self.assertRaises(ValueError):
         a = ArquivoSubmissao("")