main
js 77 lines 1.74 KB
Raw
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;