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
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.")
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
def isQuestaoValida(self): if type(self.submissao) == Submissao and type( self.submissao.questao) != Questao: raise JuizError("Uma questão precisa ser informada")