1 module tests.nodes.time_machine; 2 3 import core.time; 4 5 import fluid; 6 7 @safe: 8 9 alias timeTracker = nodeBuilder!TimeTracker; 10 11 class TimeTracker : Node { 12 13 TimeIO timeIO; 14 MonoTime lastFrame; 15 Duration frameTime; 16 17 override void resizeImpl(Vector2) { 18 require(timeIO); 19 lastFrame = timeIO.now(); 20 } 21 22 override void drawImpl(Rectangle, Rectangle) { 23 frameTime = timeIO.timeSince(lastFrame); 24 lastFrame = timeIO.now(); 25 } 26 27 } 28 29 @("TimeMachine can manipulate TimeIO output") 30 unittest { 31 32 auto machine = timeMachine(); 33 auto event1 = machine.now(); 34 machine += 5.seconds; 35 36 auto event2 = machine.now(); 37 machine += 4.seconds; 38 39 auto event3 = machine.now(); 40 41 assert(event2 == event1 + 5.seconds); 42 assert(event3 == event1 + 9.seconds); 43 assert(event3 == event2 + 4.seconds); 44 45 } 46 47 @("TimeMachine's output is readable by nodes") 48 unittest { 49 50 auto machine = timeMachine(); 51 auto tracker = timeTracker(); 52 auto root = chain(machine, tracker); 53 54 root.draw(); 55 machine += 5.seconds; 56 root.draw(); 57 assert(tracker.frameTime == 5.seconds); 58 59 machine += 16.msecs; 60 root.draw(); 61 assert(tracker.frameTime == 16.msecs); 62 63 machine += 4.msecs; 64 machine += 5.msecs; 65 root.draw(); 66 assert(tracker.frameTime == 9.msecs); 67 68 }