Δοκιμές στην πίστα Emacs Lisp

Μάθε πώς να δοκιμάζεις τις ασκήσεις σου στην Emacs Lisp στο Exercism


Τα tests σε Elisp εκτελούνται με το ERT, μια βιβλιοθήκη της Emacs Lisp για testing παλινδρόμησης και μονάδων. Μπορείς να εκτελέσεις τα tests με διάφορους τρόπους.

Για να εκτελέσεις τα tests διαδραστικά μέσα από το Emacs:

  1. Άνοιξε το αρχείο με τα tests, M-x eval-buffer RET
  2. Διαδραστικά και μεμονωμένα, με M-x ert RET test-name RET
  3. Διαδραστικά και όλα μαζί, με M-x ert RET t RET Σημείωσε ότι αυτό θα εκτελέσει όλα τα tests που είναι φορτωμένα αυτή τη στιγμή στο Emacs!
  4. Εκτέλεσε ξανά το M-x eval-buffer RET πριν το testing, όποτε έχεις κάνει αλλαγές

Για να εκτελέσεις μόνο τα tests του τρέχοντος buffer, μπορείς να προσθέσεις το παρακάτω στο .emacs ή στο 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))

Αφού κάνεις επανεκκίνηση στο Emacs:

  1. Άνοιξε το αρχείο με τα tests
  2. M-x my-eval-and-run-all-tests-in-buffer RET

Το διαδραστικό testing είναι εξαιρετικό όσο δουλεύεις πάνω σε μια άσκηση, αλλά το testing σε batch mode είναι προτιμότερο όταν θέλεις να ελέγξεις ότι μια άσκηση είναι έτοιμη για υποβολή.

Για να εκτελέσεις όλα τα tests από το τερματικό, σε batch mode, εκτέλεσε emacs -batch -l ert -l *-test.el -f ert-run-tests-batch-and-exit

Η παραπάνω εντολή είναι λίγο δύσχρηστη, οπότε αν θέλεις:

  1. Δημιούργησε ένα αρχείο στο $PATH σου (πιθανότατα στον ~/bin) με το όνομα ert-run
  2. Τα περιεχόμενα του αρχείου πρέπει να είναι ως εξής:
    #!/usr/bin/env sh
    emacs -batch -l ert -l $1 -f ert-run-tests-batch-and-exit
    
  3. Κάνε το αρχείο εκτελέσιμο με chmod +x ert-run

Θα πρέπει να μπορείς απλώς να καλέσεις το ert-run *-test.el και να εκτελέσεις τα tests σε batch mode.

Άλλες επιλογές θα βρεις στην τεκμηρίωση, C-h i m ert RET.

Δουλεύοντας πάνω στις ασκήσεις

Επειδή το Emacs είναι το ίδιο ένας διερμηνευτής της elisp, ο κώδικας με τον οποίο δουλεύεις βρίσκεται πάντα στο φυσικό του περιβάλλον εκτέλεσης. Μπορείς να αξιολογήσεις οποιαδήποτε φόρμα πατώντας C-x e στο τέλος της φόρμας, ή μια επιλογή με το M-x eval-region, ή ολόκληρο τον buffer με το M-x eval-buffer. Αυτό μπορεί να σου φανεί εξαιρετικά χρήσιμο για να κάνεις γρήγορα debug στον κώδικά σου.

Προτάσεις

Επειδή τόσο ο κώδικας όσο και τα tests σου είναι έγκυρη elisp, προτείνεται να δουλεύεις τον κώδικα της άσκησης σε ένα παράθυρο, δίπλα-δίπλα με τα tests του, όπως εδώ:

Στιγμιότυπο οθόνης που δείχνει το Emacs με το frame χωρισμένο κάθετα σε δύο παράθυρα

Χώρισε το frame κάθετα με C-x 3, πήγαινε στο νέο παράθυρο με C-x o και άνοιξε το αρχείο με C-x C-f /path/to/file.