Testar no percurso de Emacs Lisp

Aprende a testar os teus exercícios de Emacs Lisp no Exercism


Os testes de Elisp são executados com o ERT, uma biblioteca de Emacs Lisp para testes de regressão/unitários. Há várias formas de correr os testes.

Para correr os testes interativamente dentro do Emacs:

  1. Abre o ficheiro de testes, M-x eval-buffer RET
  2. Interativamente e um a um, com M-x ert RET test-name RET
  3. Interativamente e todos de uma vez, com M-x ert RET t RET Repara que isto vai correr todos os testes que estão carregados no Emacs neste momento!
  4. Volta a executar M-x eval-buffer RET antes de testar, sempre que fizeres alterações

Para executar apenas os testes do buffer atual, podes adicionar isto ao teu .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 reiniciares o Emacs:

  1. Abre o ficheiro de testes
  2. M-x my-eval-and-run-all-tests-in-buffer RET

Testar interativamente é ótimo enquanto estás a trabalhar num exercício, mas o modo batch é preferível quando queres verificar se um exercício está pronto para submeter.

Para correr todos os testes a partir do terminal, em modo batch, executa emacs -batch -l ert -l *-test.el -f ert-run-tests-batch-and-exit

O comando acima é um pouco pesado, por isso, se quiseres:

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

Deves conseguir simplesmente chamar ert-run *-test.el e correr os testes em modo batch.

Encontras outras opções na documentação, C-h i m ert RET.

Trabalhar nos exercícios

Como o próprio Emacs é um intérprete de Elisp, o teu código está sempre no seu ambiente de execução nativo. Podes avaliar qualquer forma premiando C-x e no fim da forma, ou uma seleção com M-x eval-region, ou o buffer todo com M-x eval-buffer. Isto pode ser extremamente útil para depurar o código rapidamente.

Sugestões

Como tanto o teu código como os testes são Elisp válido, sugere-se que trabalhes no código do exercício num painel do buffer, lado a lado com o teste, tal como se mostra:

Captura de ecrã do Emacs com o frame dividido verticalmente em duas janelas

Divide o frame verticalmente com C-x 3, passa para a nova janela com C-x o e abre o ficheiro com C-x C-f /path/to/file.