anchor.diff:   */
   void it(String description, Task test){
     checkEnvironment();
  +  assert(_environment.runner.currentRunning != null);
  +  assert(_environment.runner.currentRunning.isSuite());
     _environment.runner.add(new TestPiece.it(description, test));
   }
   
  
positive.code:   bool start = false;
    bool finish = false;
  
    Dynamic error;
    String errorMessage;
    Dynamic trace;
    
    TestPiece.describe(this.description, this._test, [this.parent = null]): _describe = true, ignore = false, tests = new List<TestPiece>(), beforeEach = new List<Task>(), afterEach = new List<Task>();
    TestPiece.it(this.description, this._test, [this.parent = null]): _describe = false, ignore = false, tests = new List<TestPiece>(), beforeEach = new List<Task>(), afterEach = new List<Task>();
  
    TestPiece.xdescribe(this.description, this._test, [this.parent = null]): _describe = true, ignore = true, tests = new List<TestPiece>(), beforeEach = new List<Task>(), afterEach = new List<Task>();
    TestPiece.xit(this.description, this._test, [this.parent = null]): _describe = false, ignore = true, tests = new List<TestPiece>(), beforeEach = new List<Task>(), afterEach = new List<Task>();
  
    bool isSuite() => _describe;
    bool isSpec() => !_describe;
    
    void run(){
      TeaoliveRunner runner = _environment.runner;
      TestPiece pre = runner.currentRunning;
      runner.currentRunning = this;
      try{
        start = true;
        if(ignore){
          finish = true;
          return;
        }
        _test();
        for(TestPiece piece in tests){
          for(Task beforeTask in beforeEach){
            beforeTask();
          }
          piece.run();
          for(Task afterTask in afterEach){
            afterTask();
          }
        }
        finish = true;
        result = true;
  
        List<TestPiece> fullset = new List<TestPiece>();
        fullset.add(this);
        fullset.addAll(tests);
        for(TestPiece piece in fullset){
          if(piece.start && piece.finish && piece.result){
            continue;
          } else if(piece.ignore){
            continue;
          }
          result = false;
        }
      } catch(AssertionException e, Dynamic _trace) {
        errorMessage = e.msg;
        error = e;
        trace = _trace;
        return;
      } catch(var e, Dynamic _trace) {
        error = e;
        trace = _trace;
        return;
      } finally {
        runner.currentRunning = pre;
        finish = true;
      }
    }
    
    void add(TestPiece piece){
  
negative.code:     }
    }
    
    List<Task> _collectBeforeTask([TestPiece piece, List<Task> tasks]){
      if(parent == null){
        return new List<Task>();
      }
      if(piece == null){
        piece = parent;
      }
      if(tasks == null){
        tasks = new List<Task>();
      }
      if(piece.parent != null){
        _collectBeforeTask(piece.parent, tasks);
      }
  