Generalize test runner