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(&currentSuite.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 }