View Javadoc

1   package fit;
2   
3   import java.util.HashMap;
4   import java.util.Stack;
5   
6   public class ContextFixture extends Fixture
7   {
8   
9     private static HashMap<String, Fixture> contexts = new HashMap<String, Fixture>();
10  
11    private static Stack<String> activeContextStack = new Stack<String>();
12  
13    @Override
14    public void doCells(Parse cells)
15    {   
16      if (cells.text().equals("begin context"))
17      {
18        beginContext(cells);
19      }
20      else if (cells.text().equals("complete context"))
21      {
22        completeContext(cells);
23      }
24      else if (cells.text().equals("select context"))
25      {
26        selectContext(cells);
27      }
28      else
29      {
30        Fixture fixture = getActiveFixture();
31        fixture.doCells(cells);
32      }
33    }
34  
35    public void beginContext(Parse cells)
36    {
37      String context = cells.more.text();
38      String fixtureName = cells.more.more.text();
39      try
40      {
41        Fixture fixture = (Fixture) getClass().forName(fixtureName).newInstance();
42        fixture.counts = this.counts;
43  
44        activeContextStack.push(context);
45        contexts.put(context, fixture);
46        right(cells);
47        right(cells.more);
48        right(cells.more.more);
49      }
50      catch (Exception e)
51      {
52        exception(cells, e);
53      }
54    }
55  
56    public void selectContext(Parse cells)
57    {
58      String context = cells.more.text();
59      activeContextStack.remove(context);
60      activeContextStack.push(context);
61      right(cells);
62      right(cells.more);
63    }
64  
65    public void completeContext(Parse cells)
66    {
67      String context = cells.more.text();
68      if (activeContextStack.lastElement().equals(context))
69      {
70        String active = activeContextStack.pop();
71        Fixture fixture = contexts.remove(active);
72        right(cells);
73        right(cells.more);
74        counts.right += fixture.counts.right;
75        counts.wrong += fixture.counts.wrong;
76        counts.ignores += fixture.counts.ignores;
77        counts.exceptions += fixture.counts.ignores;
78      }
79      else
80      {
81        wrong(cells, "Wrong context, the context is not active!");
82      }
83    }
84  
85    protected Fixture getActiveFixture()
86    {
87      String activeContext = activeContextStack.lastElement();
88      Fixture fixture = contexts.get(activeContext);
89      return fixture;
90    }
91  
92  }