Development/UnitTests
TODO this is outdated (2016-01)
The Unit Tests
The unit tests are built into the darcs-test binary, which you can
run by doing a dist/build/darcs-test/darcs-test.
To run the tests as thoroughly as before the switch to
test-framework, you do
dist/build/unit/unit --maximum-unsuitable-generated-tests=5000 && dist/build/unit/unit -t 'Checking again we can do merges using QuickCheck' -a 1000.
The Main module of the unit test executable is
src/test.hs. This file imports the QuickCheck and HUnit
test suites embedded into the various modules of the Darcs source
code.
The darcs unit tests use the test-framework package for executing the tests and handling command-line flags.
QuickCheck-based tests
There are some QuickCheck-based tests in src/unit.lhs,
which are converted to test-framework Tests by the
testProperty function.
Non-QuickCheck tests
There are also non-QuickCheck tests in the Darcs.Patch.Test
hierarchy. Such a test has type [String],
counterintuitively. The test returns an empty list if it succeeds and
strings explaining the failures if it fails. There is a
testStringList to convert such tests to Test.Framework
Test via HUnit.
Adding new tests
If you want to add new tests, add them within the module you are
testing, and make sure the module exports a
testSuite :: Test function that calls all the tests for
that module. The module Darcs.Email is an example of this
approach.
Tests in Darcs.Patch.Test
For the tests that reside in src/Darcs/Patch/Test, there
are five modules:
Darcs.Patch.Test.Unitcontains the big list of test patches (patch_unit_tests) and some propertiesDarcs.Patch.Test.Propertiescontains some propertiesDarcs.Patch.Test.Utilcontains generators andArbitraryinstances for darcs’s data types, and some properties.Darcs.Patch.Test.QuickCheckcontainsArbitraryinstances and QuickCheck-related helper functions.Darcs.Patch.Test.Checkcontains the definition of aPatchCheckstate monad for tracking repository state, used byDarcs.Patch.Test
