Move more of the test-running logic into runner.hpp