1 module bed; 2 3 public import reporters; 4 public import runnable; 5 public import spec; 6 public import suite; 7 8 static Suite[] suites; 9 static Suite currentSuite; 10 11 void describe(string title, Block block) 12 { 13 if(currentSuite is null) 14 { 15 currentSuite = new Suite(title); 16 } 17 else 18 { 19 auto suite = new Suite(title, currentSuite); 20 currentSuite.children ~= suite; 21 currentSuite = suite; 22 } 23 24 block(); 25 26 if(!currentSuite.isRoot) 27 { 28 currentSuite = cast(Suite) currentSuite.parent; 29 } 30 else 31 { 32 suites ~= currentSuite; 33 currentSuite = null; 34 } 35 } 36 37 void it(string title, Block block) 38 { 39 auto spec = new Spec(title, currentSuite, block); 40 currentSuite.specs ~= spec; 41 spec.connect(¤tSuite.propagateFailure); 42 } 43 44 static ~this() 45 { 46 import std.c.process : exit; 47 import colorize : fg; 48 import colorize.colorize : colorize; 49 auto rootSuite = new Suite("\n -- bed --\n".colorize(fg.yellow)); 50 51 foreach(suite; suites) 52 { 53 suite.parent = rootSuite; 54 rootSuite.children ~= suite; 55 } 56 57 auto rep = new SpecReporter(rootSuite); 58 rootSuite.run(); 59 if(rootSuite.failed) exit(1); 60 }