Open toshikurauchi opened 4 years ago
Gostaria de trabalhar nesta issue.
Oi, professor!
Consegui resolver o problema do eval fazendo a substituição que você pediu, porém como toda string ao ser adicionada no dicionário do json "recebido" recebe aspas (simples ou dupla) mesmo já sendo enviada pelo usuário com aspas (ficando assim com aspas simples e duplas ao mesmo tempo), eu tive que fazer um if dedicado à filtrar quais strings foram enviadas pelo usuário com aspas, quais foram enviadas sem aspas (e estas geram uma mensagem de erro) e quais são booleans que receberam aspas.
Desta forma foi possível comparar o dicionário recebido do esperado como você pediu, ficando assim:
[27/Jun/2020 03:34:03] "POST /exercicio/7?passo=3 HTTP/1.1" 302 0
[27/Jun/2020 03:34:03] "GET /exercicio/7?passo=4 HTTP/1.1" 200 8653
entrada esperado: {'x': 3, 'y': 4, 'z': 12, 'w': 'False'}
entrada recebido: {'x': '3', 'y': '4', 'z': '12', 'w': 'False'}
saída esperado: {'x': '3', 'y': '4', 'z': '12', 'w': 'False'}
saída recebido: {'x': '3', 'y': '4', 'z': '12', 'w': 'False'}
Não ficou um código super bonito mas resolveu o problema. Enviei um PR com essa solução.
Porém, tem um outro problema que eu não consegui resolver e que eu acredito que não pertença à essa issue, mas posso continuar trabalhando nela caso pertencer. Sempre que eu avanço um passo no teste de mesa, os valores que estão nas caixinhas dos passos anteriores são substituídos pelos valores do gabarito do teste de mesa, e sempre que esses valores forem strings, eles virão pras caixinhas com aspas, porque eles são guardados obrigatoriamente com aspas no gabarito. Isso faz os booleans virem com aspas também, mesmo que o usuário tenha os enviado sem aspas. Vou deixar algumas fotos para explicar melhor o que eu quero dizer.
Antes de enviar o w = False:
Após enviar o w = False:
Essa modificação faz com que, se as aspas não forem retiradas da caixinha de atribuição do w antes de avançar mais uma vez, o json recebido tenha w = '"False"' (aspas duplas e simples ao mesmo tempo), o que faz o dicionário recebido final não ser o mesmo que o esperado.
Não consegui resolver esse problema mas pensei em duas soluções:
Caso seja necessário, segue os códigos que usei para criar o teste de mesa (é o mesmo que você tinha enviado para o Toranja um dia, mas com uma pequena alteração para testar o exemplo com ">" que você pediu. Código: x = 3 y = 4 z = x * y w = 3 > 4 print('O retângulo de lados {0} e {1} tem área {2}'.format(x, y, z))
Gabarito:
[[0, "x = 3", {"
O uso do eval permite, para a linha
a = 1 > 2
, por exemplo, o usuário envie1 > 2
como o valor da memória.Ao invés de dar eval na solução do usuário seria mais seguro (não precisaria mais de lambda), usar o
repr
do valor esperado e comparar com a string recebida.