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.
e2e-clean-hopinion-lonelye2e-clean-hopinion-projecte2e-clean-hopinion-thinge2e-clean-hopinion-thing-gene2e-dirty-package-failse2e-dirty-project-failse2e-discovers-every-packagee2e-no-packages-failse2e-no-store-paths-in-findingse2e-paths-are-repository-relativee2e-withheld-facts-failhlint-checkhopinion-hopinionhopinion-hopinion-genhopinion-projectplanpre-commitreleaseshellweeder-checkconfiguredevShelldefaultx86_64-linux