示例#1
0
    def test_deve_gerar_json(self):
        s = Submissao(None, None, None)
        r1 = ResultadoTestCase(s, TestCase("2", [2], 2), "3", True)
        r1.id = "1"
        r2 = ResultadoTestCase(s, TestCase("1", [2], 2), "3", False)
        r2.id = "2"
        resultados = [r1, r2]
        s.resultadosTestsCases = resultados
        json = {
            "id":
            s.id,
            "resultados": [{
                "id": "1",
                "testCaseId": "2",
                "respostaAlgoritmo": "3",
                "status": True
            }, {
                "id": "2",
                "testCaseId": "1",
                "respostaAlgoritmo": "3",
                "status": False
            }]
        }

        self.assertDictEqual(json, s.toJson())
示例#2
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()
示例#3
0
    def test_sucesso_match_input_codigo(self):
        codigo = "x = input('blableble')\nprint(x)"

        testsCases = [TestCase("1", ["2"], "2")]
        questao = Questao("", testsCases)
        submissao = Submissao(codigo, None, questao)
        j = Juiz(submissao)
        self.assertTrue(j.matchInputCodigo(testsCases[0].entradas))

        codigo = "x = input('blableble')\ninput('blu')"
        testsCases = [TestCase("1", ["2", "3"], "2")]
        submissao = Submissao(codigo, None, questao)
        j = Juiz(submissao)
        self.assertTrue(j.matchInputCodigo(testsCases[0].entradas))
示例#4
0
 def test_capturar_mensagem_algoritmo(self):
     codigo = "x = input('bla')\nprint(x)"
     testsCases = [TestCase("1", ["2"], "2")]
     questao = Questao("", testsCases)
     submissao = Submissao(codigo, None, questao)
     j = Juiz(submissao)
     self.assertEqual(["2"], j.respostaAlgoritmo("bla2\n2"))
示例#5
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()
示例#6
0
    def test_capturar_textos_input(self):
        codigo = "x = input('blableble')\nprint(x)"

        testsCases = [TestCase("1", ["2", "3"], "2")]
        questao = Questao("", testsCases)
        submissao = Submissao(codigo, None, questao)
        j = Juiz(submissao)
        self.assertListEqual(["blableble"], j.obterTextosInput())
示例#7
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)
示例#8
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()
示例#9
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()
示例#10
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
示例#11
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)
示例#12
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()