1 module feature_test.callbacks; 2 3 debug (featureTest) { 4 alias FTCallback = void delegate(); 5 6 mixin template FTCallbacks() { 7 final void addBeforeAll(FTCallback d) { 8 _beforeAllCallbacks ~= d; 9 } 10 11 final void addBeforeEach(FTCallback d) { 12 _beforeEachCallbacks ~= d; 13 } 14 15 final void addAfterEach(FTCallback d) { 16 _afterEachCallbacks ~= d; 17 } 18 19 final void addAfterAll(FTCallback d) { 20 _afterAllCallbacks ~= d; 21 } 22 23 // To be overridden 24 void beforeAll() { 25 } 26 27 // To be overridden 28 void beforeEach() { 29 } 30 31 // To be overridden 32 void afterEach() { 33 } 34 35 // To be overridden 36 void afterAll() { 37 } 38 39 void runBeforeAll() { 40 beforeAll; 41 runCallbacks(_beforeAllCallbacks); 42 } 43 44 void runBeforeEach() { 45 beforeEach; 46 runCallbacks(_beforeEachCallbacks); 47 } 48 49 void runAfterEach() { 50 runCallbacks(_afterEachCallbacks); 51 afterEach; 52 } 53 54 void runAfterAll() { 55 runCallbacks(_afterAllCallbacks); 56 afterAll; 57 } 58 protected: 59 FTCallback[] _beforeEachCallbacks, _afterEachCallbacks, _beforeAllCallbacks, _afterAllCallbacks; 60 61 void runCallbacks(FTCallback[] callbacks) { 62 foreach(callback; callbacks) callback(); 63 } 64 } 65 }