anchor.diff:        }
       }
       
  -    _reporter.onRunnerResult(this);
  +    _environment.reporter.onRunnerResult(this);
     }
       
     void addSuite(TeaoliveSuite suite){
  
positive.code:  * If you want to start writing BDD test, start with this function.
   */
  void describe(String description, Function test){
    if(_runner == null){
      _runner = new TeaoliveRunner();
    }
    _runner.addSuite(new TeaoliveSuite(description, test));
  }
  
  /**
   * If you do not want to use to "description" temporarily, you can use this function.
   */
  void xdescribe(String description, Function test){
    if(_runner == null){
      _runner = new TeaoliveRunner();
    }
    _runner.addSuite(new TeaoliveSuite.ignore(description, test));
  }
  
  /**
  
negative.code:   void onSpecResult(TeaoliveSpec spec);
  }
  
  /**
   * get TeaoliveEnvironment.
   * this function is use for self testing about Teaolive.
   */
  TeaoliveEnvironment getCurrentTeaoliveEnvironment() => _environment;
  
  /**
   * restore TeaoliveEnvironment.
   * this function is use for self testing about Teaolive.
   */
  void restoreTeaoliveEnvironment(TeaoliveEnvironment environment){
    _environment = environment;
  }
  
  /**
   * re-initialize TeaoliveEnvironment.
   * this function is use for self testing about Teaolive.
   */
  void resetTeoliveEnvironment(){
    _environment = null;
  }
  
  // implementation from here.
  
  TeaoliveEnvironment _environment;
  
  void checkEnvironment() {
    if(_environment == null){
      _environment = new TeaoliveEnvironment();
    }
  }
  
  class TeaoliveEnvironment {
    TeaoliveReporter _reporter;
    TeaoliveRunner _runner;
    
    TeaoliveEnvironment(): _runner = new TeaoliveRunner(), _reporter = new TeaoliveReporter();
    
    void run() {
      _runner.run();
    }
    
    void set reporter(TeaoliveReporter reporter) {
      assert(reporter != null);
      _reporter = reporter;
    }
    
    TeaoliveReporter get reporter() => _reporter;
    
    TeaoliveRunner get runner() => _runner;
  }
  
  class TeaoliveTextReporter implements TeaoliveReporter {
    
  