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 }