1 module actions.start_stop; 2 3 import fluid; 4 5 @safe: 6 7 class StartAndStopAction : TreeAction { 8 9 int starts; 10 int stops; 11 int iterations; 12 bool continueAfter; 13 14 override void started() { 15 starts++; 16 } 17 18 override void stopped() { 19 super.stopped(); 20 stops++; 21 } 22 23 override void beforeTree(Node, Rectangle) { 24 assert(starts > stops); 25 iterations++; 26 } 27 28 override void afterTree() { 29 if (!continueAfter) { 30 stop; 31 } 32 } 33 34 } 35 36 @("Node.queueAction() will fire start and stop hooks") 37 unittest { 38 39 auto root = vspace(); 40 auto action = new StartAndStopAction; 41 root.queueAction(action); 42 43 root.draw(); 44 assert(action.starts == 1); 45 assert(action.stops == 1); 46 assert(action.iterations == 1); 47 48 action.continueAfter = true; 49 root.queueAction(action); 50 root.draw(); 51 assert(action.starts == 2); 52 assert(action.stops == 1); 53 assert(action.iterations == 2); 54 55 } 56 57 @("Node.startAction() will fire start and stop hooks") 58 unittest { 59 60 auto root = vspace(); 61 auto action = new StartAndStopAction; 62 root.startAction(action); 63 64 root.draw(); 65 assert(action.starts == 1); 66 assert(action.stops == 1); 67 assert(action.iterations == 1); 68 69 action.continueAfter = true; 70 root.startAction(action); 71 root.draw(); 72 assert(action.starts == 2); 73 assert(action.stops == 1); 74 assert(action.iterations == 2); 75 76 }