hunk.code_window: export default function() {
     return ng('test', '--single-run', '--code-coverage')
       .then(() => expectFileToExist('coverage/src/app'))
       .then(() => expectFileToExist('coverage/coverage.lcov'));
   }
hunk.labels: keep keep keep replace keep
hunk.after_edit:     .then(() => expectFileToExist('coverage/lcov.info'));
  
hunk.file_path: tests/e2e/tests/misc/coverage.ts
hunk.type: replace
file: import {git, silentGit} from './process';
  
  
  export function gitClean() {
    console.log('  Cleaning git...');
    return silentGit('clean', '-df')
      .then(() => silentGit('reset', '--hard'))
      .then(() => {
        // Checkout missing files
        return silentGit('status', '--porcelain')
          .then(output => output
            .split(/[\n\r]+/g)
            .filter(line => line.match(/^ D/))
            .map(line => line.replace(/^\s*\S+\s+/, '')))
          .then(files => silentGit('checkout', ...files));
      })
      .then(() => expectGitToBeClean());
  }
  
  export function expectGitToBeClean() {
    return git('status', '--porcelain')
      .then(output => {
        if (output != '') {
          throw new Error('Git repo is not clean...');
        }
      });
  }
  
  export function gitCommit(message: string) {
    return git('add', '-A')
      .then(() => git('status', '--porcelain'))
      .then(output => {
        if (output != '') {
          return git('commit', '-am', message);
        }
      });
  }
  