anchor.diff:          member this.contextStart c = 
               contexts <- c :: contexts
               context <- c
  -            js (sprintf "addContext('%s');" context)
  -            js (sprintf "collapseContextsExcept('%s');" context)
  +            this.swallowedJS (sprintf "addContext('%s');" context)
  +            this.swallowedJS (sprintf "collapseContextsExcept('%s');" context)
               consoleReporter.contextStart c
   
           member this.contextEnd c = 
  
positive.code:         member this.skip () = ()
  
  type LiveHtmlReporter() =
      let consoleReporter : IReporter = new ConsoleReporter() :> IReporter    
      let browser = new OpenQA.Selenium.Firefox.FirefoxDriver() :> IWebDriver    
      let pin () =   
          let h = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;
          let w = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
          let maxWidth = w / 2    
          browser.Manage().Window.Size <- new System.Drawing.Size(maxWidth,h);        
          browser.Manage().Window.Position <- new System.Drawing.Point((maxWidth * 0),0);
      do pin()
      let js script = try (browser :?> IJavaScriptExecutor).ExecuteScript(script) |> ignore with | ex -> ()
      let mutable context = System.String.Empty;
      let mutable test = System.String.Empty;
      let mutable canQuit = false
      let mutable contexts : string list = []
  
      interface IReporter with               
          member this.pass () =
              js (sprintf "addToContext('%s', 'Pass', '%s', '%s');" context test "")
              consoleReporter.pass ()
  
          member this.fail ex id ss =
              js (sprintf "addToContext('%s', 'Fail', '%s', '%s');" context test (Convert.ToBase64String(ss)))
              consoleReporter.fail ex id ss
  
          member this.describe d = 
  
negative.code:             
          member this.testEnd id = ()
  
          member this.quit () = if canQuit then _browser.Quit()
          
          member this.suiteBegin () = _browser.Navigate().GoToUrl(this.reportPath)
  
          member this.suiteEnd () = 
              canQuit <- true
              this.swallowedJS (sprintf "collapseContextsExcept('%s');" "") //cheap hack to collapse all contexts at the end of a run
  
          member this.coverage url ss = 
              if (contexts |> List.exists (fun c -> c = "Coverage Reports")) = false then
                  contexts <- "Coverage Reports" :: contexts
                  this.swallowedJS (sprintf "addContext('%s');" "Coverage Reports")
              this.swallowedJS (sprintf "addToContext('%s', 'Pass', '%s', '%s');" "Coverage Reports" url (Convert.ToBase64String(ss)))
  
          member this.todo () = 
              this.swallowedJS (sprintf "addToContext('%s', 'Todo', '%s', '%s');" context test "")
  
          member this.skip () = 
              this.swallowedJS (sprintf "addToContext('%s', 'Skip', '%s', '%s');" context test "")