607d661d

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Rename fixtures to test_resources, one directory per spec

Each directory under hopinion-gen/test_resources now belongs to exactly one
spec and is named after it, and nothing may sit there unread:

- TestResourcesSpec asserts every directory names a spec that exists, so both
  a directory nobody reads and one whose spec was deleted fail.
- CommentSpec runs off scenarioDir, so every file gets a test, and a golden
  whose module was deleted fails with it.
- RuleSpec compares the directory listing against the rule enum, in both
  directions.
- AnnotationSpec, ProjectSpec and ExampleSpec each assert their own listing.

The cross-consumer coupling is gone with it. The split property moves from
SplitSpec into RuleSpec, where it runs per project-level rule over that rule's
own resources rather than over a hand-kept list of projects, so a rule added
later is covered without anyone remembering. absent-module moves to a new
ProjectSpec.

annotate gets its own repository, Annotation/to-annotate, instead of building
one at test time by copying a module out of the rule resources and rewriting a
cabal file. The awkward input is now a file: Latin1.hs holds a byte no UTF-8
decoder can read and ends without a newline.

nix/e2e.nix drives Example/clean and Example/dirty, owned by a new ExampleSpec
that asserts in one process every property those Nix checks rest on: which
packages the dirty repository holds, that it fails at all three levels, and
that the finding the path check greps for is where the grep looks.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 2s 2s 2s 0s
Eval 1s 15s 15s 17s 0s
Build 7s 1m26s 30s 38s 0s
Suite 0s 1m44s 37s 38s 0s

Timeline

0s10s20s30s