5011b739391b6a1b6129d473b6c050010baf1f6f braney Sat Sep 19 17:57:37 2026 -0700 testRegistry: a registry of which unit test defends which ticket A bug ticket has no way to say whether a test now defends its fix, and a test has no way to say which bug it came from. The two questions are asked from opposite ends and neither the tree nor Redmine answers either one. utils/testRegistry/registry.tsv is that table, hand written, one row per ticket per test, starting at v504. Unit tests only: the browser-page regression tests are the docent suite, refs #38252, which already names each script for its ticket, and a docent column here says which ticket has one of those too. Each row says why a unit test is the right test, because "the fix is in a library file" is wrong in both directions. A wording fix in hg/lib needs no unit test, and a performance rewrite inside hgTracks needs one badly, since nothing else can tell that the slow path has come back. The three reasons are invisible, perf and library, and a perf row says what has to be measured -- queries, passes, allocations, bytes -- never wall-clock seconds. testRegistry reads it: ticket, test, release, why, needed, unwatched, tickets, check. No network and no database, so the check can run anywhere. check is why the table is checked in rather than derived. A registry that quietly names files nobody has, saying a bug is covered when it is not, is worse than no registry, so check fails the build the day a row rots. Its own tests are in tests/, with one row of input/bad.tsv per complaint check can make, and utils/makefile runs the whole thing so it reaches make test from src. Today: 37 tickets, 12 covered by 11 tests, 25 waiting. refs #38391 diff --git src/utils/makefile src/utils/makefile index dc0f4d9b9d2..56cbea02d95 100644 --- src/utils/makefile +++ src/utils/makefile @@ -273,30 +273,34 @@ chmod +x $*; \ echo cp -p $* ${SCRIPTS}; \ cp -p $* ${SCRIPTS}; \ fi testAll: $(ALL_APPS:%=%.testAll) %.testAll: @test -s $*/tests/makefile && (echo $*; cd $* && $(MAKE) test) || true test: testAll cd faToTwoBit && ${MAKE} test cd twoBitToFa && ${MAKE} test cd twoBitInfo && ${MAKE} test cd bedGeneParts && ${MAKE} test +# testRegistry is not an app, so the testAll rule above cannot reach it. Its test checks +# that every row of the ticket-to-test registry still names a test that is in the tree, +# refs #38391. + cd testRegistry && ${MAKE} test clean: $(ALL_APPS:%=%.clean) touch non-empty-rm.o - find . -name \*.o -print | xargs rm %.clean: cd $* && echo $* && $(MAKE) clean BAD_DIRS= \ ccCpLock \ est2genomeToPsl \ geneStarts \ jimgrep \ jkShell \ wigAsciiToBinary \