1. #!/usr/bin/env node
    
  2. 
    
  3. 'use strict';
    
  4. 
    
  5. const {exec} = require('child-process-promise');
    
  6. const {join} = require('path');
    
  7. const puppeteer = require('puppeteer');
    
  8. const server = require('pushstate-server');
    
  9. const theme = require('../theme');
    
  10. const {logPromise} = require('../utils');
    
  11. 
    
  12. const validate = async () => {
    
  13.   const browser = await puppeteer.launch();
    
  14.   const page = await browser.newPage();
    
  15. 
    
  16.   await page.goto('http://localhost:9000/fixtures/packaging');
    
  17. 
    
  18.   try {
    
  19.     return await page.evaluate(() => {
    
  20.       const iframes = document.querySelectorAll('iframe');
    
  21. 
    
  22.       if (iframes.length === 0) {
    
  23.         return 'No iframes were found.';
    
  24.       }
    
  25. 
    
  26.       for (let i = 0; i < iframes.length; i++) {
    
  27.         const iframe = iframes[i];
    
  28.         // Don't include the <script> Babel tag
    
  29.         const container =
    
  30.           iframe.contentDocument.body.getElementsByTagName('div')[0];
    
  31.         if (container.textContent !== 'Hello World!') {
    
  32.           return `Unexpected fixture content, "${container.textContent}"`;
    
  33.         }
    
  34.       }
    
  35. 
    
  36.       return null;
    
  37.     });
    
  38.   } finally {
    
  39.     await browser.close();
    
  40.   }
    
  41. };
    
  42. 
    
  43. const run = async ({cwd}) => {
    
  44.   await logPromise(
    
  45.     exec('node build-all.js', {cwd: join(cwd, 'fixtures/packaging')}),
    
  46.     'Generating "packaging" fixture',
    
  47.     20000 // This takes roughly 20 seconds
    
  48.   );
    
  49. 
    
  50.   let errorMessage;
    
  51.   let response;
    
  52. 
    
  53.   try {
    
  54.     response = server.start({
    
  55.       port: 9000,
    
  56.       directory: cwd,
    
  57.     });
    
  58. 
    
  59.     errorMessage = await logPromise(
    
  60.       validate(),
    
  61.       'Verifying "packaging" fixture'
    
  62.     );
    
  63.   } finally {
    
  64.     response.close();
    
  65.   }
    
  66. 
    
  67.   if (errorMessage) {
    
  68.     console.error(
    
  69.       theme.error(''),
    
  70.       'Verifying "packaging" fixture\n ',
    
  71.       theme.error(errorMessage)
    
  72.     );
    
  73.     process.exit(1);
    
  74.   }
    
  75. };
    
  76. 
    
  77. module.exports = run;