Gunit64 – Dev Log

Guile Logo Logo Emacs

I practice Test Driven Development almost systematically when I write code. So executing tests and reading their results are more than repetitive tasks.

Repetition could lead to automation... Here I present the first features of a tool that should make my life easier. I call it Gunit64!

This article is valid for the following versions: – guile-gunit64: 0.0.1-0.094c17a – geiser-gunit64: 0.0.1-0.7a87357

Introductory tutorial

Given the following SRFI-64 test suite.

The key binding C-c r t will execute these tests and display the result.

The key binding C-c r f will only execute tests that failed during the last execution.

The key binding C-c r . will execute the test at point (the cursor must be somewhere on the string representing the test name).

The key binding C-c r r will re-execute the tests from the last execution.

Quick explanation

The geiser-gunit minor mode key bindings will call Emacs Lisp functions which will : – save all buffers – compile the current buffer – evaluate an s-exp in the REPL

This s-exp is one of the procedures exported by the Guile modile gunit64.

Troubleshooting

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Unbound variable: run-root-tests

You're missing (use-modules (gunit64)).

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Wrong type to apply: ""

Your tests are not correctly passed to the *test-root* parameter. Make sure you respect the following model:

(*test-root*
 (lambda ()
   ;;; your tests here))

Installation

  1. Install guile-gunit64
  2. Install geiser-gunit64
  3. Enable geiser-gunit64-mode when geiser-mode is enabled (via a hook in your Emacs configuration).
  4. Configure Geiser so that the *Geiser Debug* buffer processes ANSI colors (setq geiser-debug-treat-ansi-colors 'colors).
  5. Configure Geiser not to jump to *Geiser Debug* buffer on compile-time error (setq geiser-debug-jump-to-debug nil).

For steps 1 and 2, I created the Guix definitions for these 2 packages. You can find them in my personal channel.

Limitations

Gunit64 only handles simple test suites (test-assert, test-equal and test-error). As soon as test-group is introduced, things get messy. I haven't yet seen how it behaves with user-defined test-runner (I guess, not very well).

Thank you very much for reading this article! Hope you learned something!

Don't hesitate to give me your opinion, suggest an idea for improvement, report an error, or ask a question ! I would be so glad to discuss about the topic covered here with you ! You can reach me here.

Don't miss out on the next ones ! You can subscribe via RSS or via e-mail just right here !

And more importantly, share this blog and tell your friends why they should read this post!

#gnu #guile #emacs #geiser #gunit64 #tdd #english