hunk.code_window:   return silentExecAndWaitForOutputToMatch('ng', ['serve'], webpackGoodRegEx)
       // Should trigger a rebuild.
       .then(() => exec('touch', 'src/main.ts'))
       .then(() => waitForAnyProcessOutputToMatch(webpackBadRegEx, 5000))
       .then(() => waitForAnyProcessOutputToMatch(webpackGoodRegEx, 5000))
       .then(() => appendToFile('src/app/app.component.css', ':host { color: blue; }'))
  
hunk.labels: keep keep keep replace replace keep
hunk.after_edit:     .then(() => waitForAnyProcessOutputToMatch(webpackBadRegEx, 10000))
       .then(() => waitForAnyProcessOutputToMatch(webpackGoodRegEx, 10000))
  
hunk.file_path: tests/e2e/tests/build/rebuild-css-change.ts
hunk.type: replace
file: import * as glob from 'glob';
  import { writeFile, expectFileToMatch } from '../../../utils/fs';
  import { ng } from '../../../utils/process';
  import { stripIndents } from 'common-tags';
  
  export default function () {
    return writeFile('src/styles.css', stripIndents`
        /* normal-comment */
        /*! important-comment */
        div { flex: 1 }
      `)
      // uses autoprefixer plugin for all builds
      .then(() => ng('build', '--extract-css'))
      .then(() => expectFileToMatch('dist/styles.bundle.css', stripIndents`
        /* normal-comment */
        /*! important-comment */
        div { -webkit-box-flex: 1; -ms-flex: 1; flex: 1 }
      `))
      // uses postcss-discard-comments plugin for prod
      .then(() => ng('build', '--prod'))
      .then(() => glob.sync('dist/styles.*.bundle.css').find(file => !!file))
      .then((stylesBundle) => expectFileToMatch(stylesBundle, stripIndents`
        /*! important-comment */div{-webkit-box-flex:1;-ms-flex:1;flex:1}
      `));
  }
  