~martanne/vis-test

testing infrastructure for vis
test/vis: remove entire text object test
test/vis: remove z> tests
test/vis: remove z< tests

clone

read-only
https://git.sr.ht/~martanne/vis-test
read/write
git@git.sr.ht:~martanne/vis-test

You can also use your local clone with git send-email.

#Testing Infrastructure for Vis

This repository contains testing infrastructure for the vis editor. It is expected to be cloned into a sub directory of the vis source tree.

There exist 5 different kinds of tests:

  • core are C unit tests for core data structures used by vis
  • fuzz infrastructure for automated fuzzing
  • vim tests vim compatibility
  • sam tests sam compatibility of the command language
  • vis contains tests for vis specific behavior/features
  • lua contains tests for the vis specific lua api

Run make to execute all test suites.

#Writing good tests

Each sub directory contains a README with further information about the specific test method.

Coming up with good and exhaustive tests is often non-trivial, below are some recommendations:

  • Make sure you understand what the expected behavior you want to test is. Think about possible error conditions.

  • Test something specific, but keep the overall context in mind.

    For vi(m) frontend related tests consider behavior when given a count or when the command is repeated (using .).

    For example the motions f, F, t, T also influence ; and ,. Similar, * and # affect n and N.

  • Test special cases, these often reveal interesting behavior.

    Continuing the motion example these might be: empty lines, single letter words, no matches, consecutive matches, over-specified counts, etc.

  • Test systematically and strive for high test coverage.

    It is preferable to have a small set of tests which cover a specific functionality exhaustively, rather than lots of half-baked tests which only test the basics.

    A good first indication of the completeness of your tests is the achieved code coverage. Ideally a test should primarily exercise a small set of functions which should achieve high path coverage.