コード例 #1
0
ファイル: juiz.py プロジェクト: beatrijz/letscode
    def executarTestes(self, arquivo):
        resultados = []
        resultadoTeste = False
        msgRetornoAlgoritmo = ""
        self.isQuestaoValida()

        for teste in self.submissao.questao.testsCases:

            if arquivo.is_arquivo_valido():
                if self.matchInputCodigo(teste.entradas):

                    child = pexpect.spawn('python3 ' + arquivo.nome())

                    try:

                        for entradas in teste.entradas:
                            child.expect(".*")
                            child.sendline(entradas)

                        child.expect(pexpect.EOF)
                        msgRetornoAlgoritmo = child.before.decode("utf-8")
                        # TODO: verificar se há erro no código
                        try:
                            erro = ErroProgramacao(msgRetornoAlgoritmo)
                            if erro.possuiErroExecucao(msgRetornoAlgoritmo):
                                raise JuizError(
                                    "O código apresentou o seguinte erro '" +
                                    erro.tipo + "' na linha " + erro.linha)
                        except ErroProgramacaoError:  # Não há erro, verificar o resultado test de testcase normalmente
                            resultadoTeste = self.compararSaidaEsperadaComSaidaAlgoritmo(
                                msgRetornoAlgoritmo, teste.saida)
                        finally:
                            child.close()
                    except OSError as e:
                        raise JuizError(
                            "O código possui um erro."
                        )  #TODO: melhorar a mensagem para indicar qual o problema

                else:
                    raise JuizError(
                        "A quantidade de inputs em seu código é menor que a quantidade de entradas"
                    )

                resultado = ResultadoTestCase(
                    None, self.submissao, teste,
                    self.respostaAlgoritmo(msgRetornoAlgoritmo,
                                           teste.entradas), resultadoTeste)

                resultados.append(resultado)
            else:
                raise JuizError("O arquivo de código não foi encontrado.")

        # self.salvarResultados(resultados) # migrou para o frontend que será responsável por salvar tudo

        return resultados
コード例 #2
0
ファイル: juiz.py プロジェクト: lsoaresesilva/32bits-backend
    def executar(self, arquivo):

        if arquivo.is_arquivo_valido():

            msgRetornoAlgoritmo = ""
            if len(self.submissao.questao.testsCases) > 0:
                for teste in self.submissao.questao.testsCases:

                    child = pexpect.spawn('python3 ' + arquivo.nome(),
                                          timeout=12)
                    for entradas in teste.entradas:
                        child.expect(".*")
                        child.sendline(entradas)

                    child.expect(pexpect.EOF)
                    msgRetornoAlgoritmo = child.before.decode("utf-8")
                    break
                return self.obterSaidaAlgoritmo(
                    msgRetornoAlgoritmo,
                    self.submissao.questao.testsCases[0].entradas)
            else:
                child = pexpect.spawn('python3 ' + arquivo.nome(), timeout=12)
                child.expect(pexpect.EOF)
                msgRetornoAlgoritmo = child.before.decode("utf-8")
                return msgRetornoAlgoritmo
        else:
            raise JuizError("O arquivo de código não foi encontrado.")
コード例 #3
0
ファイル: juiz.py プロジェクト: lsoaresesilva/32bits-backend
    def executarVisualizacao(self, arquivo):
        jsonTrace = ""

        teste = self.submissao.questao.testsCases[0]
        if teste != None:
            inputs = self.prepararInputs(teste.entradas)
        # TODO: colocar tudo dentro do if, se n tiver teste, n tem como visualizar.

        if arquivo.is_arquivo_valido():
            # if self.matchInputCodigo(teste["entradas"]):
            path = os.path.dirname(os.path.realpath(__file__))
            path = path + '/pythontutor/generate_json_trace.py'
            comando = 'python3 ' + path + ' ' + arquivo.nome(
            ) + ' -i ' + inputs
            # BUG: tem de recuperar o dir do projeto.. para poder executar
            child = pexpect.spawn('python3 ' + path + ' ' + arquivo.nome() +
                                  ' -i ' + inputs)
            child.expect(pexpect.EOF)
            jsonTrace = child.before.decode("utf-8")
            #erro = ErroProgramacao(jsonTrace)
            #if erro.possuiErroVisualizacao() == False:
            #    return jsonTrace
            #else:
            #    raise JuizError(
            #        "O código apresentou o seguinte erro '"+erro.tipo)

            # else:
            #    raise JuizError(
            #        "A quantidade de inputs em seu código é menor/maior que a quantidade de entradas")
        else:
            raise JuizError("O arquivo de código não foi encontrado.")

        return jsonTrace
コード例 #4
0
ファイル: juiz.py プロジェクト: beatrijz/letscode
 def isQuestaoValida(self):
     if type(self.submissao) == Submissao and type(
             self.submissao.questao) != Questao:
         raise JuizError("Uma questão precisa ser informada")