Como testar na trilha de Emacs Lisp

Aprenda a testar seus exercícios de Emacs Lisp no Exercism


Os testes em Elisp são rodados com o ERT, uma biblioteca do Emacs Lisp para testes de regressão e unitários. Há várias formas de rodar os testes.

Para rodar os testes de forma interativa dentro do Emacs:

  1. Abra o arquivo de teste, M-x eval-buffer RET
  2. Interativamente e de forma individual, com M-x ert RET test-name RET
  3. Interativamente e de uma vez só, com M-x ert RET t RET Repare que isso vai rodar todos os testes carregados no Emacs no momento!
  4. Rode M-x eval-buffer RET de novo antes de testar sempre que você fizer alterações

Para executar apenas os testes no buffer atual, você pode adicionar isto ao seu .emacs ou init.el:

(defun my-eval-and-run-all-tests-in-buffer ()
  "Delete all loaded tests from the runtime, evaluate the current buffer and run all loaded tests with ert."
  (interactive)
  (ert-delete-all-tests)
  (eval-buffer)
  (ert 't))

Depois de reiniciar o Emacs:

  1. Abra o arquivo de teste
  2. M-x my-eval-and-run-all-tests-in-buffer RET

Testar de forma interativa é ótimo enquanto você trabalha em um exercício, mas o teste no modo batch é preferível quando você quer verificar se um exercício está pronto para envio.

Para rodar todos os testes pelo terminal, no modo batch, execute emacs -batch -l ert -l *-test.el -f ert-run-tests-batch-and-exit

O comando acima é meio complicado, então, se você quiser:

  1. Crie um arquivo no seu $PATH (provavelmente em ~/bin) chamado ert-run
  2. O conteúdo do arquivo deve ser assim:
    #!/usr/bin/env sh
    emacs -batch -l ert -l $1 -f ert-run-tests-batch-and-exit
    
  3. Deixe o arquivo executável com chmod +x ert-run

Você deve conseguir simplesmente chamar ert-run *-test.el e rodar os testes no modo batch.

Outras opções podem ser encontradas na documentação, C-h i m ert RET.

Trabalhando nos exercícios

Como o próprio Emacs é um intérprete de elisp, seu código em andamento está sempre no ambiente de execução nativo. Você pode avaliar qualquer forma pressionando C-x e no fim dela, ou uma seleção com M-x eval-region, ou o buffer inteiro com M-x eval-buffer. Isso pode ser extremamente útil para depurar seu código rapidamente.

Sugestões

Como tanto o seu código quanto os testes são elisp válido, a sugestão é trabalhar com o código do exercício em um painel de buffer lado a lado com o teste, assim:

Captura de tela mostrando o Emacs com o frame dividido verticalmente em duas janelas

Divida o frame verticalmente com C-x 3, mude para a nova janela com C-x o e abra o arquivo com C-x C-f /path/to/file.