From 181a63f156e1d55056fee96ea5841b749a55470f Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sun, 27 May 2018 19:51:00 +0200 Subject: [PATCH] Use async FS in tests (#1437) --- test/asset.js | 4 +- test/autoinstall.js | 19 ++-- test/bundler.js | 4 +- test/contentHashing.js | 31 +++---- test/css.js | 57 ++++++------ test/encodedURI.js | 8 +- test/fs-cache.js | 11 +-- test/fs.js | 46 +++++----- test/generateCertificate.js | 10 +- test/glob.js | 16 ++-- test/glsl.js | 8 +- test/graphql.js | 4 +- test/hmr.js | 51 +++++------ test/html.js | 68 +++++++------- test/javascript.js | 178 ++++++++++++++++++------------------ test/less.js | 40 ++++---- test/parser.js | 8 +- test/plugins.js | 8 +- test/pug.js | 30 +++--- test/reason.js | 2 +- test/rust.js | 27 +++--- test/sass.js | 49 +++++----- test/server.js | 32 +++++-- test/sourcemaps.js | 96 +++++++++---------- test/stylus.js | 28 +++--- test/typescript.js | 30 +++--- test/utils.js | 31 ++++--- test/vue.js | 45 ++++----- test/wasm.js | 12 +-- test/watcher.js | 74 ++++++++------- 30 files changed, 520 insertions(+), 507 deletions(-) diff --git a/test/asset.js b/test/asset.js index a6a0b6d54a5..b2981983243 100644 --- a/test/asset.js +++ b/test/asset.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const path = require('path'); const Asset = require('../src/Asset'); const {bundle} = require('./utils'); @@ -28,7 +28,7 @@ describe('Asset', () => { outFile }); - assert(fs.existsSync(__dirname, `/dist/${outFile}`)); + assert(await fs.exists(__dirname, `/dist/${outFile}`)); }); it('should have backward compatibility for package field', function() { diff --git a/test/autoinstall.js b/test/autoinstall.js index 240f74e8b2a..af60551db03 100644 --- a/test/autoinstall.js +++ b/test/autoinstall.js @@ -1,16 +1,13 @@ const assert = require('assert'); const install = require('../src/utils/installPackage'); -const fs = require('fs'); -const rimraf = require('rimraf'); -const promisify = require('../src/utils/promisify'); -const primraf = promisify(rimraf); -const ncp = promisify(require('ncp')); +const fs = require('../src/utils/fs'); +const {ncp, rimraf} = require('./utils'); const inputDirPath = __dirname + '/input'; describe('autoinstall', function() { beforeEach(async function() { // Setup (clear the input dir and move integration test in) - await primraf(inputDirPath, {}); + await rimraf(inputDirPath, {}); await ncp(__dirname + '/integration/babel-default', inputDirPath); }); @@ -23,9 +20,9 @@ describe('autoinstall', function() { }); let expectedModulePath = inputDirPath + '/node_modules/' + pkgName; - assert(fs.existsSync(expectedModulePath), 'lodash is in node_modules'); + assert(await fs.exists(expectedModulePath), 'lodash is in node_modules'); - let pkg = fs.readFileSync(inputDirPath + '/package.json'); + let pkg = await fs.readFile(inputDirPath + '/package.json'); pkg = JSON.parse(pkg); assert(pkg.devDependencies[pkgName], 'lodash is saved as a dev dep'); }); @@ -39,14 +36,14 @@ describe('autoinstall', function() { }); let expectedModulePath = inputDirPath + '/node_modules/' + pkgName; - assert(fs.existsSync(expectedModulePath), 'lodash is in node_modules'); + assert(await fs.exists(expectedModulePath), 'lodash is in node_modules'); - let pkg = fs.readFileSync(inputDirPath + '/package.json'); + let pkg = await fs.readFile(inputDirPath + '/package.json'); pkg = JSON.parse(pkg); assert(pkg.devDependencies[pkgName], 'lodash is saved as a dev dep'); }); afterEach(async function() { - await primraf(inputDirPath); + await rimraf(inputDirPath); }); }); diff --git a/test/bundler.js b/test/bundler.js index f4ae8bfc43d..39b3ed0a60e 100644 --- a/test/bundler.js +++ b/test/bundler.js @@ -56,7 +56,7 @@ describe('bundler', function() { __dirname + '/integration/multi-entry/two.html' ]); - assertBundleTree(b, [ + await assertBundleTree(b, [ { type: 'html', assets: ['one.html'], @@ -78,7 +78,7 @@ describe('bundler', function() { it('should support multiple entry points as a glob', async function() { let b = await bundle(__dirname + '/integration/multi-entry/*.html'); - assertBundleTree(b, [ + await assertBundleTree(b, [ { type: 'html', assets: ['one.html'], diff --git a/test/contentHashing.js b/test/contentHashing.js index 19d67e6a476..3288da325fd 100644 --- a/test/contentHashing.js +++ b/test/contentHashing.js @@ -1,13 +1,10 @@ const assert = require('assert'); -const fs = require('fs'); -const {bundle} = require('./utils'); -const rimraf = require('rimraf'); -const promisify = require('../src/utils/promisify'); -const ncp = promisify(require('ncp')); +const fs = require('../src/utils/fs'); +const {bundle, rimraf, ncp} = require('./utils'); describe('content hashing', function() { - beforeEach(function() { - rimraf.sync(__dirname + '/input'); + beforeEach(async function() { + await rimraf(__dirname + '/input'); }); it('should update content hash when content changes', async function() { @@ -17,13 +14,13 @@ describe('content hashing', function() { production: true }); - let html = fs.readFileSync(__dirname + '/dist/index.html', 'utf8'); + let html = await fs.readFile(__dirname + '/dist/index.html', 'utf8'); let filename = html.match( // )[1]; - assert(fs.existsSync(__dirname + '/dist/' + filename)); + assert(await fs.exists(__dirname + '/dist/' + filename)); - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/index.css', 'body { background: green }' ); @@ -32,11 +29,11 @@ describe('content hashing', function() { production: true }); - html = fs.readFileSync(__dirname + '/dist/index.html', 'utf8'); + html = await fs.readFile(__dirname + '/dist/index.html', 'utf8'); let newFilename = html.match( // )[1]; - assert(fs.existsSync(__dirname + '/dist/' + newFilename)); + assert(await fs.exists(__dirname + '/dist/' + newFilename)); assert.notEqual(filename, newFilename); }); @@ -48,19 +45,19 @@ describe('content hashing', function() { production: true }); - let js = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let js = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); let filename = js.match(/\/(test\.[0-9a-f]+\.txt)/)[1]; - assert(fs.existsSync(__dirname + '/dist/' + filename)); + assert(await fs.exists(__dirname + '/dist/' + filename)); - fs.writeFileSync(__dirname + '/input/test.txt', 'hello world'); + await fs.writeFile(__dirname + '/input/test.txt', 'hello world'); await bundle(__dirname + '/input/index.js', { production: true }); - js = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + js = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); let newFilename = js.match(/\/(test\.[0-9a-f]+\.txt)/)[1]; - assert(fs.existsSync(__dirname + '/dist/' + newFilename)); + assert(await fs.exists(__dirname + '/dist/' + newFilename)); assert.notEqual(filename, newFilename); }); diff --git a/test/css.js b/test/css.js index 5c1f71cf5bb..78dd3eca724 100644 --- a/test/css.js +++ b/test/css.js @@ -1,15 +1,12 @@ const assert = require('assert'); -const fs = require('fs'); -const {bundle, run, assertBundleTree} = require('./utils'); -const promisify = require('../src/utils/promisify'); -const ncp = promisify(require('ncp')); -const rimraf = require('rimraf'); +const fs = require('../src/utils/fs'); +const {bundle, run, assertBundleTree, rimraf, ncp} = require('./utils'); describe('css', function() { it('should produce two bundles when importing a CSS file', async function() { let b = await bundle(__dirname + '/integration/css/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.css', 'local.js', 'local.css'], childBundles: [ @@ -24,7 +21,7 @@ describe('css', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); @@ -32,7 +29,7 @@ describe('css', function() { it('should support loading a CSS bundle along side dynamic imports', async function() { let b = await bundle(__dirname + '/integration/dynamic-css/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: [ 'index.js', @@ -68,7 +65,7 @@ describe('css', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(await output(), 3); }); @@ -76,7 +73,7 @@ describe('css', function() { it('should support importing CSS from a CSS file', async function() { let b = await bundle(__dirname + '/integration/css-import/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.css', 'other.css', 'local.css'], childBundles: [ @@ -92,11 +89,11 @@ describe('css', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.local')); assert(css.includes('.other')); assert(/@media print {\s*.other/.test(css)); @@ -106,7 +103,7 @@ describe('css', function() { it('should support linking to assets with url() from CSS', async function() { let b = await bundle(__dirname + '/integration/css-url/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.css'], childBundles: [ @@ -126,11 +123,11 @@ describe('css', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(/url\("test\.[0-9a-f]+\.woff2"\)/.test(css)); assert(css.includes('url("http://google.com")')); assert(css.includes('.index')); @@ -140,7 +137,7 @@ describe('css', function() { assert(css.includes('.no-quote')); assert( - fs.existsSync( + await fs.exists( __dirname + '/dist/' + css.match(/url\("(test\.[0-9a-f]+\.woff2)"\)/)[1] ) ); @@ -151,7 +148,7 @@ describe('css', function() { production: true }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.css'], childBundles: [ @@ -171,11 +168,11 @@ describe('css', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(/url\(test\.[0-9a-f]+\.woff2\)/.test(css), 'woff ext found in css'); assert(css.includes('url(http://google.com)'), 'url() found'); assert(css.includes('.index'), '.index found'); @@ -185,7 +182,7 @@ describe('css', function() { assert(css.includes('.no-quote')); assert( - fs.existsSync( + await fs.exists( __dirname + '/dist/' + css.match(/url\((test\.[0-9a-f]+\.woff2)\)/)[1] ) ); @@ -194,7 +191,7 @@ describe('css', function() { it('should support transforming with postcss', async function() { let b = await bundle(__dirname + '/integration/postcss/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.css'], childBundles: [ @@ -209,7 +206,7 @@ describe('css', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); let value = output(); @@ -217,7 +214,7 @@ describe('css', function() { let cssClass = value.match(/(_index_[0-9a-z]+_1)/)[1]; - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes(`.${cssClass}`)); }); @@ -226,18 +223,18 @@ describe('css', function() { production: true }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.local')); assert(css.includes('.index')); assert(!css.includes('\n')); }); it('should automatically install postcss plugins with npm if needed', async function() { - rimraf.sync(__dirname + '/input'); + await rimraf(__dirname + '/input'); await ncp(__dirname + '/integration/autoinstall/npm', __dirname + '/input'); await bundle(__dirname + '/input/index.css'); @@ -249,12 +246,12 @@ describe('css', function() { assert(pkg.devDependencies['caniuse-lite']); // cssnext is applied - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('rgba')); }); it('should automatically install postcss plugins with yarn if needed', async function() { - rimraf.sync(__dirname + '/input'); + await rimraf(__dirname + '/input'); await ncp( __dirname + '/integration/autoinstall/yarn', __dirname + '/input' @@ -269,11 +266,11 @@ describe('css', function() { assert(pkg.devDependencies['caniuse-lite']); // appveyor is not currently writing to the yarn.lock file and will require further investigation - // let lockfile = fs.readFileSync(__dirname + '/input/yarn.lock', 'utf8'); + // let lockfile = await fs.readFile(__dirname + '/input/yarn.lock', 'utf8'); // assert(lockfile.includes('postcss-cssnext')); // cssnext is applied - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('rgba')); }); }); diff --git a/test/encodedURI.js b/test/encodedURI.js index 4186f4702bd..2f470a51e3a 100644 --- a/test/encodedURI.js +++ b/test/encodedURI.js @@ -1,12 +1,12 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, assertBundleTree} = require('./utils'); describe('encodedURI', function() { it('should support bundling files which names in encoded URI', async function() { let b = await bundle(__dirname + '/integration/encodedURI/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -18,8 +18,8 @@ describe('encodedURI', function() { ] }); - let files = fs.readdirSync(__dirname + '/dist'); - let html = fs.readFileSync(__dirname + '/dist/index.html'); + let files = await fs.readdir(__dirname + '/dist'); + let html = await fs.readFile(__dirname + '/dist/index.html'); for (let file of files) { if (file !== 'index.html') { assert(html.includes(file)); diff --git a/test/fs-cache.js b/test/fs-cache.js index 64a008e7eed..0f007b09a9e 100644 --- a/test/fs-cache.js +++ b/test/fs-cache.js @@ -1,10 +1,7 @@ const assert = require('assert'); const path = require('path'); -const rimraf = require('rimraf'); const fs = require('../src/utils/fs'); -const promisify = require('../src/utils/promisify'); -const {sleep} = require('./utils'); -const ncp = promisify(require('ncp')); +const {sleep, rimraf, ncp} = require('./utils'); const FSCache = require('../src/FSCache'); const cachePath = path.join(__dirname, '.cache'); @@ -17,9 +14,9 @@ const getMTime = async file => { }; describe('FSCache', () => { - beforeEach(() => { - rimraf.sync(cachePath); - rimraf.sync(inputPath); + beforeEach(async () => { + await rimraf(cachePath); + await rimraf(inputPath); }); it('should create directory on ensureDirExists', async () => { diff --git a/test/fs.js b/test/fs.js index fe458f34139..1f9f49d84c1 100644 --- a/test/fs.js +++ b/test/fs.js @@ -1,49 +1,49 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, run, assertBundleTree} = require('./utils'); describe('fs', function() { describe('--target=browser', function() { it('should inline a file as a string', async function() { let b = await bundle(__dirname + '/integration/fs/index.js'); - let output = run(b); + let output = await run(b); assert.equal(output, 'hello'); }); it('should inline a file as a buffer', async function() { let b = await bundle(__dirname + '/integration/fs-buffer/index.js'); - let output = run(b); + let output = await run(b); assert.equal(output.constructor.name, 'Buffer'); assert.equal(output.length, 5); }); it('should inline a file with fs require alias', async function() { let b = await bundle(__dirname + '/integration/fs-alias/index.js'); - let output = run(b); + let output = await run(b); assert.equal(output, 'hello'); }); it('should inline a file with fs require inline', async function() { let b = await bundle(__dirname + '/integration/fs-inline/index.js'); - let output = run(b); + let output = await run(b); assert.equal(output, 'hello'); }); it('should inline a file with fs require assignment', async function() { let b = await bundle(__dirname + '/integration/fs-assign/index.js'); - let output = run(b); + let output = await run(b); assert.equal(output, 'hello'); }); it('should inline a file with fs require assignment alias', async function() { let b = await bundle(__dirname + '/integration/fs-assign-alias/index.js'); - let output = run(b); + let output = await run(b); assert.equal(output, 'hello'); }); it('should inline a file with fs require destructure', async function() { let b = await bundle(__dirname + '/integration/fs-destructure/index.js'); - let output = run(b); + let output = await run(b); assert.equal(output, 'hello'); }); @@ -51,7 +51,7 @@ describe('fs', function() { let b = await bundle( __dirname + '/integration/fs-destructure-assign/index.js' ); - let output = run(b); + let output = await run(b); assert.equal(output, 'hello'); }); @@ -60,7 +60,7 @@ describe('fs', function() { __dirname + '/integration/resolve-entries/ignore-fs.js' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'ignore-fs.js', // empty.js is generated by require('fs'), it gets mocked with an empty module assets: ['_empty.js', 'ignore-fs.js', 'index.js'], @@ -71,7 +71,7 @@ describe('fs', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.test, 'function'); assert.equal(output.test(), 'test-pkg-ignore-fs-ok'); @@ -85,7 +85,7 @@ describe('fs', function() { let thrown = false; try { - run(b); + await run(b); } catch (e) { assert.equal(e.message, 'require(...).readFileSync is not a function'); @@ -102,7 +102,7 @@ describe('fs', function() { let thrown = false; try { - run(b); + await run(b); } catch (e) { assert.equal(e.message, 'require(...).readFileSync is not a function'); @@ -119,7 +119,7 @@ describe('fs', function() { target: 'node' }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js'], childBundles: [ @@ -129,11 +129,11 @@ describe('fs', function() { ] }); - assert(fs.readFileSync(b.name).includes("require('fs')")); - assert(fs.readFileSync(b.name).includes('readFileSync')); + assert((await fs.readFile(b.name)).includes("require('fs')")); + assert((await fs.readFile(b.name)).includes('readFileSync')); - fs.writeFileSync(__dirname + '/dist/test.txt', 'hey'); - let output = run(b); + await fs.writeFile(__dirname + '/dist/test.txt', 'hey'); + let output = await run(b); assert.equal(output, 'hey'); }); }); @@ -144,7 +144,7 @@ describe('fs', function() { target: 'electron' }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js'], childBundles: [ @@ -154,11 +154,11 @@ describe('fs', function() { ] }); - assert(fs.readFileSync(b.name).includes("require('fs')")); - assert(fs.readFileSync(b.name).includes('readFileSync')); + assert((await fs.readFile(b.name)).includes("require('fs')")); + assert((await fs.readFile(b.name)).includes('readFileSync')); - fs.writeFileSync(__dirname + '/dist/test.txt', 'hey'); - let output = run(b); + await fs.writeFile(__dirname + '/dist/test.txt', 'hey'); + let output = await run(b); assert.equal(output, 'hey'); }); }); diff --git a/test/generateCertificate.js b/test/generateCertificate.js index b3e3430cb4c..ede0d1d1179 100644 --- a/test/generateCertificate.js +++ b/test/generateCertificate.js @@ -1,10 +1,8 @@ const assert = require('assert'); const path = require('path'); -const rimraf = require('rimraf'); const fs = require('../src/utils/fs'); -const promisify = require('../src/utils/promisify'); -const ncp = promisify(require('ncp')); const generateCertificate = require('../src/utils/generateCertificate'); +const {rimraf, ncp} = require('./utils'); const cachePath = path.join(__dirname, '.cache'); const inputPath = path.join(__dirname, '/input'); @@ -15,9 +13,9 @@ const cacheOptions = { }; describe('generateCertificate', () => { - beforeEach(() => { - rimraf.sync(cachePath); - rimraf.sync(inputPath); + beforeEach(async () => { + await rimraf(cachePath); + await rimraf(inputPath); }); it('should support loading cached certificate', async () => { diff --git a/test/glob.js b/test/glob.js index 5ab0d0d5b30..014b25725d7 100644 --- a/test/glob.js +++ b/test/glob.js @@ -1,12 +1,12 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, run, assertBundleTree} = require('./utils'); describe('glob', function() { it('should require a glob of files', async function() { let b = await bundle(__dirname + '/integration/glob/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', '*.js', 'a.js', 'b.js'], childBundles: [ @@ -16,7 +16,7 @@ describe('glob', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(await output(), 3); }); @@ -24,7 +24,7 @@ describe('glob', function() { it('should require nested directories with a glob', async function() { let b = await bundle(__dirname + '/integration/glob-deep/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', '*.js', 'a.js', 'b.js', 'c.js', 'z.js'], childBundles: [ @@ -34,7 +34,7 @@ describe('glob', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(await output(), 13); }); @@ -42,7 +42,7 @@ describe('glob', function() { it('should support importing a glob of CSS files', async function() { let b = await bundle(__dirname + '/integration/glob-css/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.css', '*.css', 'other.css', 'local.css'], childBundles: [ @@ -57,11 +57,11 @@ describe('glob', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.local')); assert(css.includes('.other')); assert(css.includes('.index')); diff --git a/test/glsl.js b/test/glsl.js index 7fcc4db3bc6..e92e0a66986 100644 --- a/test/glsl.js +++ b/test/glsl.js @@ -1,12 +1,12 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, run, assertBundleTree} = require('./utils'); describe('glsl', function() { it('should support requiring GLSL files via glslify', async function() { let b = await bundle(__dirname + '/integration/glsl/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.glsl', 'local.vert', 'local.frag'], childBundles: [ @@ -16,12 +16,12 @@ describe('glsl', function() { ] }); - let shader = fs.readFileSync( + let shader = await fs.readFile( __dirname + '/integration/glsl/compiled.glsl', 'utf8' ); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.ok( output().reduce((acc, requiredShader) => { diff --git a/test/graphql.js b/test/graphql.js index 177b3dc877f..b532006994a 100644 --- a/test/graphql.js +++ b/test/graphql.js @@ -6,7 +6,7 @@ describe('graphql', function() { it('should support requiring graphql files', async function() { let b = await bundle(__dirname + '/integration/graphql/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.graphql'], childBundles: [ @@ -16,7 +16,7 @@ describe('graphql', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.deepEqual( output().definitions, diff --git a/test/hmr.js b/test/hmr.js index 15601d56b11..69ff4d77bfb 100644 --- a/test/hmr.js +++ b/test/hmr.js @@ -1,19 +1,16 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const path = require('path'); -const {bundler, run, sleep} = require('./utils'); -const rimraf = require('rimraf'); -const promisify = require('../src/utils/promisify'); -const ncp = promisify(require('ncp')); +const {bundler, run, sleep, rimraf, ncp} = require('./utils'); const WebSocket = require('ws'); const json5 = require('json5'); const sinon = require('sinon'); describe('hmr', function() { let b, ws, stub; - beforeEach(function() { + beforeEach(async function() { stub = sinon.stub(console, 'clear'); - rimraf.sync(__dirname + '/input'); + await rimraf(__dirname + '/input'); }); afterEach(function(done) { @@ -58,7 +55,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'exports.a = 5;\nexports.b = 5;' ); @@ -107,7 +104,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'exports.a = 5; exports.b = 5;' ); @@ -135,7 +132,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'require("fs"); exports.a = 5; exports.b = 5;' ); @@ -161,7 +158,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'require("fs"; exports.a = 5; exports.b = 5;' ); @@ -193,7 +190,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'require("fs"; exports.a = 5; exports.b = 5;' ); @@ -219,7 +216,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'require("fs"; exports.a = 5; exports.b = 5;' ); @@ -231,7 +228,7 @@ describe('hmr', function() { const secondBuildEnd = nextEvent(b, 'buildEnd'); - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'require("fs"); exports.a = 5; exports.b = 5;' ); @@ -249,7 +246,7 @@ describe('hmr', function() { let bundle = await b.bundle(); let outputs = []; - run(bundle, { + await run(bundle, { output(o) { outputs.push(o); } @@ -261,7 +258,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'exports.a = 5; exports.b = 5;' ); @@ -278,7 +275,7 @@ describe('hmr', function() { let outputs = []; let moduleId = ''; - run(bundle, { + await run(bundle, { reportModuleId(id) { moduleId = id; }, @@ -293,7 +290,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'exports.a = 5; exports.b = 5;' ); @@ -315,7 +312,7 @@ describe('hmr', function() { let bundle = await b.bundle(); let outputs = []; - run(bundle, { + await run(bundle, { output(o) { outputs.push(o); } @@ -328,7 +325,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'exports.a = 5; exports.b = 5;' ); @@ -345,7 +342,7 @@ describe('hmr', function() { let bundle = await b.bundle(); let logs = []; - let ctx = run( + let ctx = await run( bundle, { console: { @@ -364,7 +361,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'require("fs"; exports.a = 5; exports.b = 5;' ); @@ -383,7 +380,7 @@ describe('hmr', function() { let bundle = await b.bundle(); let logs = []; - let ctx = run( + let ctx = await run( bundle, { console: { @@ -406,7 +403,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'require("fs"; exports.a = 5; exports.b = 5;' ); @@ -415,7 +412,7 @@ describe('hmr', function() { assert(appendSpy.called); - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'require("fs"); exports.a = 5; exports.b = 5;' ); @@ -449,7 +446,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'exports.a = 5;\nexports.b = 5;' ); @@ -486,7 +483,7 @@ describe('hmr', function() { await sleep(100); } - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'exports.a = 5;\nexports.b = 5;' ); diff --git a/test/html.js b/test/html.js index d487e3355de..cf4313eab93 100644 --- a/test/html.js +++ b/test/html.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, assertBundleTree} = require('./utils'); const path = require('path'); @@ -7,7 +7,7 @@ describe('html', function() { it('should support bundling HTML', async function() { let b = await bundle(__dirname + '/integration/html/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -44,8 +44,8 @@ describe('html', function() { ] }); - let files = fs.readdirSync(__dirname + '/dist'); - let html = fs.readFileSync(__dirname + '/dist/index.html'); + let files = await fs.readdir(__dirname + '/dist'); + let html = await fs.readFile(__dirname + '/dist/index.html'); for (let file of files) { let ext = file.match(/\.([0-9a-z]+)(?:[?#]|$)/i)[0]; if (file !== 'index.html' && ext !== '.map') { @@ -57,7 +57,7 @@ describe('html', function() { it('should find href attr when not first', async function() { let b = await bundle(__dirname + '/integration/html-attr-order/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -73,20 +73,20 @@ describe('html', function() { it('should support transforming HTML with posthtml', async function() { let b = await bundle(__dirname + '/integration/posthtml/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [] }); - let html = fs.readFileSync(__dirname + '/dist/index.html'); + let html = await fs.readFile(__dirname + '/dist/index.html'); assert(html.includes('

Other page

')); }); it('should find assets inside posthtml', async function() { let b = await bundle(__dirname + '/integration/posthtml-assets/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -119,7 +119,7 @@ describe('html', function() { it('should insert sibling CSS bundles for JS files in the HEAD', async function() { let b = await bundle(__dirname + '/integration/html-css/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -140,7 +140,7 @@ describe('html', function() { ] }); - let html = fs.readFileSync(__dirname + '/dist/index.html'); + let html = await fs.readFile(__dirname + '/dist/index.html'); assert( //.test( html @@ -151,7 +151,7 @@ describe('html', function() { it('should insert sibling bundles before body element if no HEAD', async function() { let b = await bundle(__dirname + '/integration/html-css-head/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -172,7 +172,7 @@ describe('html', function() { ] }); - let html = fs.readFileSync(__dirname + '/dist/index.html'); + let html = await fs.readFile(__dirname + '/dist/index.html'); assert( /\s*\s*/.test( html @@ -185,7 +185,7 @@ describe('html', function() { hmr: true }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -211,7 +211,7 @@ describe('html', function() { ] }); - let html = fs.readFileSync(__dirname + '/dist/index.html'); + let html = await fs.readFile(__dirname + '/dist/index.html'); assert(/') ); @@ -312,7 +312,7 @@ describe('html', function() { it('should not prepend the public path to hash links', async function() { await bundle(__dirname + '/integration/html/index.html'); - let html = fs.readFileSync(__dirname + '/dist/index.html', 'utf8'); + let html = await fs.readFile(__dirname + '/dist/index.html', 'utf8'); assert(html.includes('')); }); @@ -321,7 +321,7 @@ describe('html', function() { __dirname + '/integration/html-virtualpath/index.html' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -337,11 +337,11 @@ describe('html', function() { it('should not update root/main file in the bundles', async function() { await bundle(__dirname + '/integration/html-root/index.html'); - let files = fs.readdirSync(__dirname + '/dist'); + let files = await fs.readdir(__dirname + '/dist'); for (let file of files) { if (file !== 'index.html' && file.endsWith('.html')) { - let html = fs.readFileSync(__dirname + '/dist/' + file); + let html = await fs.readFile(__dirname + '/dist/' + file); assert(html.includes('index.html')); } } @@ -352,7 +352,7 @@ describe('html', function() { production: true }); - let html = fs.readFileSync(__dirname + '/dist/index.html', 'utf8'); + let html = await fs.readFile(__dirname + '/dist/index.html', 'utf8'); assert(/hello<\/i> world<\/i>/.test(html)); }); @@ -361,7 +361,7 @@ describe('html', function() { __dirname + '/integration/child-bundle-different-types/index.html' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -396,7 +396,7 @@ describe('html', function() { it('should support circular dependencies', async function() { let b = await bundle(__dirname + '/integration/circular/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -436,7 +436,7 @@ describe('html', function() { it('should support bundling HTM', async function() { let b = await bundle(__dirname + '/integration/htm-extension/index.htm'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.htm'], type: 'html', @@ -457,7 +457,7 @@ describe('html', function() { it('should detect srcset attribute', async function() { let b = await bundle(__dirname + '/integration/html-srcset/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -485,7 +485,7 @@ describe('html', function() { __dirname + '/integration/html-source-srcset/index.html' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -511,7 +511,7 @@ describe('html', function() { it('should support webmanifest', async function() { let b = await bundle(__dirname + '/integration/webmanifest/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -533,7 +533,7 @@ describe('html', function() { it('should bundle svg files correctly', async function() { let b = await bundle(__dirname + '/integration/html-svg/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -548,7 +548,7 @@ describe('html', function() { it('should support data attribute of object element', async function() { let b = await bundle(__dirname + '/integration/html-object/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -564,7 +564,7 @@ describe('html', function() { it('should resolve assets containing spaces', async function() { let b = await bundle(__dirname + '/integration/resolve-spaces/index.html'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ diff --git a/test/javascript.js b/test/javascript.js index 6ab9e58791d..654333aac13 100644 --- a/test/javascript.js +++ b/test/javascript.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const path = require('path'); const {bundle, run, assertBundleTree} = require('./utils'); const {mkdirp} = require('../src/utils/fs'); @@ -11,7 +11,7 @@ describe('javascript', function() { assert.equal(b.assets.size, 8); assert.equal(b.childBundles.size, 1); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); @@ -22,7 +22,7 @@ describe('javascript', function() { assert.equal(b.assets.size, 8); assert.equal(b.childBundles.size, 1); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'object'); assert.equal(typeof output.default, 'function'); assert.equal(output.default(), 3); @@ -33,12 +33,12 @@ describe('javascript', function() { target: 'browser' }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'main.js', assets: ['main.js', 'local.js', 'index.js'] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); @@ -48,18 +48,18 @@ describe('javascript', function() { target: 'node' }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'main.js', assets: ['main.js', 'local.js'] }); await mkdirp(__dirname + '/dist/node_modules/testmodule'); - fs.writeFileSync( + await fs.writeFile( __dirname + '/dist/node_modules/testmodule/index.js', 'exports.a = 5;' ); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 7); }); @@ -69,18 +69,18 @@ describe('javascript', function() { target: 'electron' }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'main.js', assets: ['main.js', 'local.js'] }); await mkdirp(__dirname + '/dist/node_modules/testmodule'); - fs.writeFileSync( + await fs.writeFile( __dirname + '/dist/node_modules/testmodule/index.js', 'exports.a = 5;' ); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 7); }); @@ -91,7 +91,7 @@ describe('javascript', function() { assert.equal(b.assets.size, 1); assert.equal(b.childBundles.size, 1); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'object'); assert.equal(typeof output.default, 'function'); assert.equal(output.default(), 3); @@ -102,7 +102,7 @@ describe('javascript', function() { target: 'browser' }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'bundle-loader.js', 'bundle-url.js', 'js-loader.js'], childBundles: [ @@ -120,7 +120,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(await output(), 3); }); @@ -130,7 +130,7 @@ describe('javascript', function() { target: 'node' }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'bundle-loader.js', 'bundle-url.js', 'js-loader.js'], childBundles: [ @@ -148,7 +148,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(await output(), 3); }); @@ -156,7 +156,7 @@ describe('javascript', function() { it('should support bundling workers', async function() { let b = await bundle(__dirname + '/integration/workers/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js'], childBundles: [ @@ -188,7 +188,7 @@ describe('javascript', function() { __dirname + '/integration/dynamic-references-raw/index.js' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'bundle-loader.js', 'bundle-url.js', 'js-loader.js'], childBundles: [ @@ -209,7 +209,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(await output(), 3); }); @@ -217,7 +217,7 @@ describe('javascript', function() { it('should return all exports as an object when using ES modules', async function() { let b = await bundle(__dirname + '/integration/dynamic-esm/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'bundle-loader.js', 'bundle-url.js', 'js-loader.js'], childBundles: [ @@ -235,7 +235,7 @@ describe('javascript', function() { ] }); - let output = run(b).default; + let output = (await run(b)).default; assert.equal(typeof output, 'function'); assert.equal(await output(), 3); }); @@ -243,7 +243,7 @@ describe('javascript', function() { it('should hoist common dependencies into a parent bundle', async function() { let b = await bundle(__dirname + '/integration/dynamic-hoist/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: [ 'index.js', @@ -276,7 +276,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(await output(), 7); }); @@ -284,7 +284,7 @@ describe('javascript', function() { it('should not duplicate a module which is already in a parent bundle', async function() { let b = await bundle(__dirname + '/integration/dynamic-hoist-dup/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: [ 'index.js', @@ -308,7 +308,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(await output(), 5); }); @@ -316,7 +316,7 @@ describe('javascript', function() { it('should support requiring JSON files', async function() { let b = await bundle(__dirname + '/integration/json/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.json'], childBundles: [ @@ -326,7 +326,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); @@ -334,7 +334,7 @@ describe('javascript', function() { it('should support requiring JSON5 files', async function() { let b = await bundle(__dirname + '/integration/json5/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.json5'], childBundles: [ @@ -344,7 +344,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); @@ -352,7 +352,7 @@ describe('javascript', function() { it('should support importing a URL to a raw asset', async function() { let b = await bundle(__dirname + '/integration/import-raw/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'test.txt'], childBundles: [ @@ -367,10 +367,10 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert(/^\/test\.[0-9a-f]+\.txt$/.test(output())); - assert(fs.existsSync(__dirname + '/dist/' + output())); + assert(await fs.exists(__dirname + '/dist/' + output())); }); it('should minify JS in production mode', async function() { @@ -378,11 +378,11 @@ describe('javascript', function() { production: true }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); - let js = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let js = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!js.includes('local.a')); }); @@ -391,7 +391,7 @@ describe('javascript', function() { production: true }); - let js = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let js = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!js.includes('console.log')); assert(!js.includes('// This is a comment')); }); @@ -399,7 +399,7 @@ describe('javascript', function() { it('should insert global variables when needed', async function() { let b = await bundle(__dirname + '/integration/globals/index.js'); - let output = run(b); + let output = await run(b); assert.deepEqual(output(), { dir: path.join(__dirname, '/integration/globals'), file: path.join(__dirname, '/integration/globals/index.js'), @@ -411,7 +411,7 @@ describe('javascript', function() { it('should handle re-declaration of the global constant', async function() { let b = await bundle(__dirname + '/integration/global-redeclare/index.js'); - let output = run(b); + let output = await run(b); assert.deepEqual(output(), false); }); @@ -420,7 +420,7 @@ describe('javascript', function() { target: 'node' }); - let output = run(b); + let output = await run(b); assert.ok(output.toString().indexOf('process.env') > -1); assert.equal(output(), 'test:test'); }); @@ -430,7 +430,7 @@ describe('javascript', function() { target: 'electron' }); - let output = run(b); + let output = await run(b); assert.ok(output.toString().indexOf('process.env') > -1); assert.equal(output(), 'test:test'); }); @@ -440,7 +440,7 @@ describe('javascript', function() { target: 'browser' }); - let output = run(b); + let output = await run(b); assert.ok(output.toString().indexOf('process.env') === -1); assert.equal(output(), 'test:test'); }); @@ -448,7 +448,7 @@ describe('javascript', function() { it('should insert environment variables from a file', async function() { let b = await bundle(__dirname + '/integration/env-file/index.js'); - let output = run(b); + let output = await run(b); assert.equal(output, 'bartest'); }); @@ -463,7 +463,7 @@ describe('javascript', function() { } }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.json', 'index.css'], childBundles: [ @@ -477,7 +477,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); @@ -485,7 +485,7 @@ describe('javascript', function() { it('should support requiring YAML files', async function() { let b = await bundle(__dirname + '/integration/yaml/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.yaml'], childBundles: [ @@ -495,7 +495,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); @@ -503,7 +503,7 @@ describe('javascript', function() { it('should support requiring TOML files', async function() { let b = await bundle(__dirname + '/integration/toml/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.toml'], childBundles: [ @@ -513,7 +513,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); @@ -521,7 +521,7 @@ describe('javascript', function() { it('should support requiring CoffeeScript files', async function() { let b = await bundle(__dirname + '/integration/coffee/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.coffee'], childBundles: [ @@ -531,7 +531,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); @@ -539,7 +539,7 @@ describe('javascript', function() { it('should resolve the browser field before main', async function() { let b = await bundle(__dirname + '/integration/resolve-entries/browser.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'browser.js', assets: ['browser.js', 'browser-module.js'], childBundles: [ @@ -549,7 +549,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.test, 'function'); assert.equal(output.test(), 'pkg-browser'); @@ -560,7 +560,7 @@ describe('javascript', function() { __dirname + '/integration/resolve-entries/browser-multiple.js' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'browser-multiple.js', assets: [ 'browser-multiple.js', @@ -574,7 +574,7 @@ describe('javascript', function() { ] }); - let {test: output} = run(b); + let {test: output} = await run(b); assert.equal(typeof output.projected.test, 'function'); assert.equal(typeof output.entry.test, 'function'); @@ -587,7 +587,7 @@ describe('javascript', function() { __dirname + '/integration/resolve-entries/module-field.js' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'module-field.js', assets: ['module-field.js', 'es6.module.js'], childBundles: [ @@ -597,7 +597,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.test, 'function'); assert.equal(output.test(), 'pkg-es6-module'); @@ -608,7 +608,7 @@ describe('javascript', function() { __dirname + '/integration/resolve-entries/both-fields.js' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'both-fields.js', assets: ['both-fields.js', 'es6.module.js'], childBundles: [ @@ -618,7 +618,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.test, 'function'); assert.equal(output.test(), 'pkg-es6-module'); @@ -629,7 +629,7 @@ describe('javascript', function() { __dirname + '/integration/resolve-entries/main-field.js' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'main-field.js', assets: ['main-field.js', 'main.js'], childBundles: [ @@ -639,7 +639,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.test, 'function'); assert.equal(output.test(), 'pkg-main-module'); @@ -650,7 +650,7 @@ describe('javascript', function() { production: true }); - let json = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let json = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(json.includes('{test:"test"}')); }); @@ -659,7 +659,7 @@ describe('javascript', function() { production: true }); - let json = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let json = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(json.includes('{test:"test"}')); }); @@ -668,7 +668,7 @@ describe('javascript', function() { production: true }); - let json = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let json = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(json.includes('{a:1,b:{c:2}}')); }); @@ -677,14 +677,14 @@ describe('javascript', function() { production: true }); - let json = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let json = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(json.includes('{a:1,b:{c:2}}')); }); it('should support compiling with babel using .babelrc config', async function() { await bundle(__dirname + '/integration/babel/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('class Foo {}')); assert(file.includes('class Bar {}')); }); @@ -692,7 +692,7 @@ describe('javascript', function() { it('should compile with babel with default engines if no config', async function() { await bundle(__dirname + '/integration/babel-default/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!file.includes('class Foo {}')); assert(!file.includes('class Bar {}')); }); @@ -700,7 +700,7 @@ describe('javascript', function() { it('should support compiling with babel using browserlist', async function() { await bundle(__dirname + '/integration/babel-browserslist/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!file.includes('class Foo {}')); assert(!file.includes('class Bar {}')); }); @@ -708,7 +708,7 @@ describe('javascript', function() { it('should support splitting babel-polyfill using browserlist', async function() { await bundle(__dirname + '/integration/babel-polyfill/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('async function Bar() {}')); assert(!file.includes('regenerator')); }); @@ -722,14 +722,14 @@ describe('javascript', function() { let file; // Dev build test await bundle(__dirname + projectBasePath + '/index.js'); - file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(devRegExp.test(file) === true); assert(prodRegExp.test(file) === false); // Prod build test await bundle(__dirname + projectBasePath + '/index.js', { production: true }); - file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(prodRegExp.test(file) === true); assert(devRegExp.test(file) === false); } @@ -745,7 +745,7 @@ describe('javascript', function() { it('should not compile node_modules by default', async function() { await bundle(__dirname + '/integration/babel-node-modules/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('class Foo {}')); assert(!file.includes('class Bar {}')); }); @@ -755,7 +755,7 @@ describe('javascript', function() { __dirname + '/integration/babel-node-modules-browserify/index.js' ); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!file.includes('class Foo {}')); assert(!file.includes('class Bar {}')); }); @@ -765,7 +765,7 @@ describe('javascript', function() { __dirname + '/integration/babel-node-modules-browserslist/index.js' ); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!file.includes('class Foo {}')); assert(!file.includes('class Bar {}')); }); @@ -773,7 +773,7 @@ describe('javascript', function() { it('should compile node_modules when symlinked with a source field in package.json', async function() { await bundle(__dirname + '/integration/babel-node-modules-source/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!file.includes('class Foo {}')); assert(!file.includes('class Bar {}')); }); @@ -783,7 +783,7 @@ describe('javascript', function() { __dirname + '/integration/babel-node-modules-source-unlinked/index.js' ); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('class Foo {}')); assert(!file.includes('class Bar {}')); }); @@ -791,42 +791,42 @@ describe('javascript', function() { it('should support compiling JSX', async function() { await bundle(__dirname + '/integration/jsx/index.jsx'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('React.createElement("div"')); }); it('should support compiling JSX in JS files with React dependency', async function() { await bundle(__dirname + '/integration/jsx-react/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('React.createElement("div"')); }); it('should support compiling JSX in JS files with Preact dependency', async function() { await bundle(__dirname + '/integration/jsx-preact/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('h("div"')); }); it('should support compiling JSX in JS files with Nerv dependency', async function() { await bundle(__dirname + '/integration/jsx-nervjs/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('Nerv.createElement("div"')); }); it('should support compiling JSX in JS files with Hyperapp dependency', async function() { await bundle(__dirname + '/integration/jsx-hyperapp/index.js'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('h("div"')); }); it('should support optional dependencies in try...catch blocks', async function() { let b = await bundle(__dirname + '/integration/optional-dep/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js'], childBundles: [ @@ -836,7 +836,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); let err = new Error('Cannot find module "optional-dep"'); err.code = 'MODULE_NOT_FOUND'; @@ -847,7 +847,7 @@ describe('javascript', function() { it('should support excluding dependencies in falsy branches', async function() { let b = await bundle(__dirname + '/integration/falsy-dep/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'true-alternate.js', 'true-consequent.js'], childBundles: [ @@ -857,7 +857,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(output, 2); }); @@ -896,7 +896,7 @@ describe('javascript', function() { it('should ignore require if it is defined in the scope', async function() { let b = await bundle(__dirname + '/integration/require-scope/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js'], childBundles: [ @@ -906,7 +906,7 @@ describe('javascript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.test, 'object'); @@ -921,7 +921,7 @@ describe('javascript', function() { let b = await bundle(__dirname + '/integration/entry-point/index.js'); let module = {}; - run(b, {module, exports: {}}); + await run(b, {module, exports: {}}); assert.equal(module.exports(), 'Test!'); }); @@ -933,7 +933,7 @@ describe('javascript', function() { }; mockDefine.amd = true; - run(b, {define: mockDefine}); + await run(b, {define: mockDefine}); assert.equal(test(), 'Test!'); }); @@ -942,7 +942,7 @@ describe('javascript', function() { global: 'testing' }); - const ctx = run(b, null, {require: false}); + const ctx = await run(b, null, {require: false}); assert.equal(ctx.window.testing(), 'Test!'); }); @@ -954,7 +954,7 @@ describe('javascript', function() { }; mockDefine.amd = true; - run(b, {define: mockDefine}); + await run(b, {define: mockDefine}); assert.equal(test, 2); }); }); diff --git a/test/less.js b/test/less.js index b42caaf660f..7bd170cd89b 100644 --- a/test/less.js +++ b/test/less.js @@ -1,12 +1,12 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, run, assertBundleTree} = require('./utils'); describe('less', function() { it('should support requiring less files', async function() { let b = await bundle(__dirname + '/integration/less/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.less'], childBundles: [ @@ -21,18 +21,18 @@ describe('less', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.index')); }); it('should support less imports', async function() { let b = await bundle(__dirname + '/integration/less-import/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.less'], childBundles: [ @@ -47,11 +47,11 @@ describe('less', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.index')); assert(css.includes('.base')); }); @@ -61,7 +61,7 @@ describe('less', function() { __dirname + '/integration/less-advanced-import/index.js' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.less'], childBundles: [ @@ -76,11 +76,11 @@ describe('less', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.index')); assert(css.includes('.base')); }); @@ -88,7 +88,7 @@ describe('less', function() { it('should support requiring empty less files', async function() { let b = await bundle(__dirname + '/integration/less-empty/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.less'], childBundles: [ @@ -103,18 +103,18 @@ describe('less', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert.equal(css, ''); }); it('should support linking to assets with url() from less', async function() { let b = await bundle(__dirname + '/integration/less-url/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.less'], childBundles: [ @@ -134,17 +134,17 @@ describe('less', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(/url\("test\.[0-9a-f]+\.woff2"\)/.test(css)); assert(css.includes('url("http://google.com")')); assert(css.includes('.index')); assert( - fs.existsSync( + await fs.exists( __dirname + '/dist/' + css.match(/url\("(test\.[0-9a-f]+\.woff2)"\)/)[1] ) ); @@ -153,7 +153,7 @@ describe('less', function() { it('should support transforming less with postcss', async function() { let b = await bundle(__dirname + '/integration/less-postcss/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.less'], childBundles: [ @@ -168,11 +168,11 @@ describe('less', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), '_index_ku5n8_1'); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('._index_ku5n8_1')); }); }); diff --git a/test/parser.js b/test/parser.js index 05676789a66..7d5ab3b6766 100644 --- a/test/parser.js +++ b/test/parser.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, assertBundleTree} = require('./utils'); describe('parser', function() { @@ -8,7 +8,7 @@ describe('parser', function() { __dirname + '/integration/parser-case-insensitive-ext/index.html' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -40,8 +40,8 @@ describe('parser', function() { ] }); - let files = fs.readdirSync(__dirname + '/dist'); - let html = fs.readFileSync(__dirname + '/dist/index.html'); + let files = await fs.readdir(__dirname + '/dist'); + let html = await fs.readFile(__dirname + '/dist/index.html'); for (let file of files) { let ext = file.match(/\.([0-9a-z]+)(?:[?#]|$)/i)[0]; if (file !== 'index.html' && ext !== '.map') { diff --git a/test/plugins.js b/test/plugins.js index 1daefc95018..76ede040b4c 100644 --- a/test/plugins.js +++ b/test/plugins.js @@ -5,7 +5,7 @@ describe('plugins', function() { it('should load plugins and apply custom asset type', async function() { let b = await bundle(__dirname + '/integration/plugins/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'test.txt'], childBundles: [ @@ -15,7 +15,7 @@ describe('plugins', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(output, 'hello world'); }); @@ -24,7 +24,7 @@ describe('plugins', function() { __dirname + '/integration/plugins/sub-folder/index.js' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'test.txt'], childBundles: [ @@ -34,7 +34,7 @@ describe('plugins', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(output, 'hello world'); }); }); diff --git a/test/pug.js b/test/pug.js index c9a578ad014..49cfdb8ad49 100644 --- a/test/pug.js +++ b/test/pug.js @@ -1,12 +1,12 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, assertBundleTree} = require('./utils'); describe('pug', function() { it('should support bundling HTML', async function() { const b = await bundle(__dirname + '/integration/pug/index.pug'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.pug'], childBundles: [ @@ -37,8 +37,8 @@ describe('pug', function() { ] }); - const files = fs.readdirSync(__dirname + '/dist'); - const html = fs.readFileSync(__dirname + '/dist/index.html'); + const files = await fs.readdir(__dirname + '/dist'); + const html = await fs.readFile(__dirname + '/dist/index.html'); for (const file of files) { const ext = file.match(/\.([0-9a-z]+)(?:[?#]|$)/i)[0]; if (file !== 'index.html' && ext !== '.map') { @@ -52,13 +52,13 @@ describe('pug', function() { __dirname + '/integration/pug-include-extends/index.pug' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.pug'] }); - const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); - const expect = fs.readFileSync( + const html = await fs.readFile(__dirname + '/dist/index.html', 'utf-8'); + const expect = await fs.readFile( __dirname + '/integration/pug-include-extends/expect.html', 'utf-8' ); @@ -69,12 +69,12 @@ describe('pug', function() { it('should support variables', async function() { const b = await bundle(__dirname + '/integration/pug-var/index.pug'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.pug'] }); - const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); + const html = await fs.readFile(__dirname + '/dist/index.html', 'utf-8'); assert(/src="\/?100x100.*.png"/.test(html)); }); @@ -82,24 +82,24 @@ describe('pug', function() { it('should support mixins', async function() { const b = await bundle(__dirname + '/integration/pug-mixins/index.pug'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.pug'] }); - const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); + const html = await fs.readFile(__dirname + '/dist/index.html', 'utf-8'); assert(html.includes('Greetings, Parcel')); }); it('should support filters', async function() { const b = await bundle(__dirname + '/integration/pug-filters/index.pug'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.pug'] }); - const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); + const html = await fs.readFile(__dirname + '/dist/index.html', 'utf-8'); assert(html.includes('FILTERED: Hello!')); }); @@ -108,12 +108,12 @@ describe('pug', function() { production: true }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.pug'] }); - const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); + const html = await fs.readFile(__dirname + '/dist/index.html', 'utf-8'); assert(html.includes('Minified')); }); diff --git a/test/reason.js b/test/reason.js index 70ee039319b..b6a0e944093 100644 --- a/test/reason.js +++ b/test/reason.js @@ -8,7 +8,7 @@ describe('reason', function() { assert.equal(b.assets.size, 2); assert.equal(b.childBundles.size, 1); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 3); }); diff --git a/test/rust.js b/test/rust.js index 6673b442210..69232368b0f 100644 --- a/test/rust.js +++ b/test/rust.js @@ -1,6 +1,6 @@ const assert = require('assert'); const {bundle, bundler, run, assertBundleTree} = require('./utils'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const commandExists = require('command-exists'); describe('rust', function() { @@ -16,7 +16,7 @@ describe('rust', function() { this.timeout(500000); let b = await bundle(__dirname + '/integration/rust/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: [ 'bundle-loader.js', @@ -36,11 +36,11 @@ describe('rust', function() { ] }); - var res = await run(b); + var res = await await run(b); assert.equal(res, 5); // not minified - assert(fs.statSync(Array.from(b.childBundles)[0].name).size > 500); + assert((await fs.stat(Array.from(b.childBundles)[0].name)).size > 500); }); it('should generate a wasm file from a rust file with rustc with --target=node', async function() { @@ -49,7 +49,7 @@ describe('rust', function() { target: 'node' }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: [ 'bundle-loader.js', @@ -73,7 +73,7 @@ describe('rust', function() { assert.equal(res, 5); // not minified - assert(fs.statSync(Array.from(b.childBundles)[0].name).size > 500); + assert((await fs.stat(Array.from(b.childBundles)[0].name)).size > 500); }); it('should support rust files with dependencies via rustc', async function() { @@ -81,7 +81,7 @@ describe('rust', function() { let b = bundler(__dirname + '/integration/rust-deps/index.js'); let bundle = await b.bundle(); - assertBundleTree(bundle, { + await assertBundleTree(bundle, { name: 'index.js', assets: [ 'bundle-loader.js', @@ -109,7 +109,7 @@ describe('rust', function() { this.timeout(500000); let b = await bundle(__dirname + '/integration/rust-cargo/src/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: [ 'bundle-loader.js', @@ -142,7 +142,7 @@ describe('rust', function() { minify: false, sourceMaps: false }); - const size = fs.statSync(Array.from(b.childBundles)[0].name).size; + const size = (await fs.stat(Array.from(b.childBundles)[0].name)).size; let bMinified = await bundle(__dirname + '/integration/rust/index.js', { minify: true, @@ -166,14 +166,15 @@ describe('rust', function() { ] }; - assertBundleTree(b, bundleTree); - assertBundleTree(bMinified, bundleTree); + await assertBundleTree(b, bundleTree); + await assertBundleTree(bMinified, bundleTree); var res = await run(bMinified); assert.equal(res, 5); - const sizeMinified = fs.statSync(Array.from(bMinified.childBundles)[0].name) - .size; + const sizeMinified = (await fs.stat( + Array.from(bMinified.childBundles)[0].name + )).size; assert(sizeMinified < size); }); }); diff --git a/test/sass.js b/test/sass.js index 9be0fde884f..a99b638ab07 100644 --- a/test/sass.js +++ b/test/sass.js @@ -1,12 +1,12 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, run, assertBundleTree} = require('./utils'); describe('sass', function() { it('should support requiring sass files', async function() { let b = await bundle(__dirname + '/integration/sass/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.sass'], childBundles: [ @@ -21,18 +21,18 @@ describe('sass', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.index')); }); it('should support requiring scss files', async function() { let b = await bundle(__dirname + '/integration/scss/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.scss'], childBundles: [ @@ -47,18 +47,18 @@ describe('sass', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.index')); }); it('should support scss imports', async function() { let b = await bundle(__dirname + '/integration/scss-import/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.scss'], childBundles: [ @@ -73,11 +73,11 @@ describe('sass', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.index')); assert(css.includes('.foo')); assert(css.includes('.bar')); @@ -86,7 +86,7 @@ describe('sass', function() { it('should support requiring empty scss files', async function() { let b = await bundle(__dirname + '/integration/scss-empty/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.scss'], childBundles: [ @@ -101,18 +101,18 @@ describe('sass', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert.equal(css, ''); }); it('should support linking to assets with url() from scss', async function() { let b = await bundle(__dirname + '/integration/scss-url/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.scss'], childBundles: [ @@ -132,17 +132,17 @@ describe('sass', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(/url\("test\.[0-9a-f]+\.woff2"\)/.test(css)); assert(css.includes('url("http://google.com")')); assert(css.includes('.index')); assert( - fs.existsSync( + await fs.exists( __dirname + '/dist/' + css.match(/url\("(test\.[0-9a-f]+\.woff2)"\)/)[1] ) ); @@ -151,7 +151,7 @@ describe('sass', function() { it('should support transforming scss with postcss', async function() { let b = await bundle(__dirname + '/integration/scss-postcss/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.scss'], childBundles: [ @@ -166,11 +166,11 @@ describe('sass', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), '_index_1a1ih_1'); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('._index_1a1ih_1')); }); @@ -179,14 +179,15 @@ describe('sass', function() { __dirname + '/integration/sass-advanced-import/index.sass' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.css', assets: ['index.sass'] }); - let css = fs - .readFileSync(__dirname + '/dist/index.css', 'utf8') - .replace(/\s+/g, ' '); + let css = (await fs.readFile( + __dirname + '/dist/index.css', + 'utf8' + )).replace(/\s+/g, ' '); assert(css.includes('.foo { color: blue;')); assert(css.includes('.bar { color: green;')); }); diff --git a/test/server.js b/test/server.js index 3a1fbb38576..40cea6b06ab 100644 --- a/test/server.js +++ b/test/server.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundler} = require('./utils'); const http = require('http'); const https = require('https'); @@ -43,7 +43,7 @@ describe('server', function() { server = await b.serve(0); let data = await get('/index.js'); - assert.equal(data, fs.readFileSync(__dirname + '/dist/index.js', 'utf8')); + assert.equal(data, await fs.readFile(__dirname + '/dist/index.js', 'utf8')); }); it('should serve a default page if the main bundle is an HTML asset', async function() { @@ -51,10 +51,16 @@ describe('server', function() { server = await b.serve(0); let data = await get('/'); - assert.equal(data, fs.readFileSync(__dirname + '/dist/index.html', 'utf8')); + assert.equal( + data, + await fs.readFile(__dirname + '/dist/index.html', 'utf8') + ); data = await get('/foo/bar'); - assert.equal(data, fs.readFileSync(__dirname + '/dist/index.html', 'utf8')); + assert.equal( + data, + await fs.readFile(__dirname + '/dist/index.html', 'utf8') + ); }); it('should serve a 404 if the file does not exist', async function() { @@ -93,7 +99,7 @@ describe('server', function() { server = await b.serve(0, true); let data = await get('/index.js', https); - assert.equal(data, fs.readFileSync(__dirname + '/dist/index.js', 'utf8')); + assert.equal(data, await fs.readFile(__dirname + '/dist/index.js', 'utf8')); }); it('should support HTTPS via custom certificate', async function() { @@ -104,7 +110,7 @@ describe('server', function() { }); let data = await get('/index.js', https); - assert.equal(data, fs.readFileSync(__dirname + '/dist/index.js', 'utf8')); + assert.equal(data, await fs.readFile(__dirname + '/dist/index.js', 'utf8')); }); it('should support setting a public url', async function() { @@ -114,7 +120,7 @@ describe('server', function() { server = await b.serve(0); let data = await get('/dist/index.js'); - assert.equal(data, fs.readFileSync(__dirname + '/dist/index.js', 'utf8')); + assert.equal(data, await fs.readFile(__dirname + '/dist/index.js', 'utf8')); }); it('should serve static assets as well as html', async function() { @@ -124,9 +130,12 @@ describe('server', function() { server = await b.serve(0); // When accessing / we should get the index page. let data = await get('/'); - assert.equal(data, fs.readFileSync(__dirname + '/dist/index.html', 'utf8')); + assert.equal( + data, + await fs.readFile(__dirname + '/dist/index.html', 'utf8') + ); // When accessing /hello.txt we should get txt document. - fs.writeFileSync(__dirname + '/dist/hello.txt', 'hello'); + await fs.writeFile(__dirname + '/dist/hello.txt', 'hello'); data = await get('/hello.txt'); assert.equal(data, 'hello'); }); @@ -138,6 +147,9 @@ describe('server', function() { server = await b.serve(0); let data = await get('/?foo=bar.baz'); - assert.equal(data, fs.readFileSync(__dirname + '/dist/index.html', 'utf8')); + assert.equal( + data, + await fs.readFile(__dirname + '/dist/index.html', 'utf8') + ); }); }); diff --git a/test/sourcemaps.js b/test/sourcemaps.js index f9218a5e172..f1f6242f495 100644 --- a/test/sourcemaps.js +++ b/test/sourcemaps.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const path = require('path'); const mapValidator = require('sourcemap-validator'); const {bundler, bundle, run, assertBundleTree} = require('./utils'); @@ -9,7 +9,7 @@ describe('sourcemaps', function() { let b = bundler(__dirname + '/integration/sourcemap/index.js'); let bu = await b.bundle(); - assertBundleTree(bu, { + await assertBundleTree(bu, { name: 'index.js', assets: ['index.js'], childBundles: [ @@ -20,12 +20,12 @@ describe('sourcemaps', function() { ] }); - let raw = fs - .readFileSync(path.join(__dirname, '/dist/index.js')) - .toString(); - let map = fs - .readFileSync(path.join(__dirname, '/dist/index.map')) - .toString(); + let raw = (await fs.readFile( + path.join(__dirname, '/dist/index.js') + )).toString(); + let map = (await fs.readFile( + path.join(__dirname, '/dist/index.map') + )).toString(); mapValidator(raw, map); let mapObject = JSON.parse(map); assert( @@ -34,7 +34,7 @@ describe('sourcemaps', function() { 'sourceRoot should be the root of the source files, relative to the output directory.' ); assert( - fs.existsSync( + await fs.exists( path.resolve( b.options.outDir, mapObject.sourceRoot, @@ -44,7 +44,7 @@ describe('sourcemaps', function() { 'combining sourceRoot and sources object should resolve to the original file' ); - let output = run(bu); + let output = await run(bu); assert.equal(typeof output, 'function'); assert.equal(output(), 'hello world'); }); @@ -54,7 +54,7 @@ describe('sourcemaps', function() { __dirname + '/integration/sourcemap-typescript/index.ts' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.ts'], childBundles: [ @@ -65,15 +65,15 @@ describe('sourcemaps', function() { ] }); - let raw = fs - .readFileSync(path.join(__dirname, '/dist/index.js')) - .toString(); - let map = fs - .readFileSync(path.join(__dirname, '/dist/index.map')) - .toString(); + let raw = (await fs.readFile( + path.join(__dirname, '/dist/index.js') + )).toString(); + let map = (await fs.readFile( + path.join(__dirname, '/dist/index.map') + )).toString(); mapValidator(raw, map); - let output = run(b); + let output = await run(b); assert.equal(typeof output.env, 'function'); assert.equal(output.env(), process.env.NODE_ENV); }); @@ -83,7 +83,7 @@ describe('sourcemaps', function() { __dirname + '/integration/sourcemap-typescript-nested/index.ts' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.ts', 'local.ts'], childBundles: [ @@ -94,15 +94,15 @@ describe('sourcemaps', function() { ] }); - let raw = fs - .readFileSync(path.join(__dirname, '/dist/index.js')) - .toString(); - let map = fs - .readFileSync(path.join(__dirname, '/dist/index.map')) - .toString(); + let raw = (await fs.readFile( + path.join(__dirname, '/dist/index.js') + )).toString(); + let map = (await fs.readFile( + path.join(__dirname, '/dist/index.map') + )).toString(); mapValidator(raw, map); - let output = run(b); + let output = await run(b); assert.equal(typeof output.env, 'function'); assert.equal(output.env(), process.env.NODE_ENV); }); @@ -110,7 +110,7 @@ describe('sourcemaps', function() { it('should create a valid sourcemap for a js file with requires', async function() { let b = await bundle(__dirname + '/integration/sourcemap-nested/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.js', 'util.js'], childBundles: [ @@ -121,15 +121,15 @@ describe('sourcemaps', function() { ] }); - let raw = fs - .readFileSync(path.join(__dirname, '/dist/index.js')) - .toString(); - let map = fs - .readFileSync(path.join(__dirname, '/dist/index.map')) - .toString(); + let raw = (await fs.readFile( + path.join(__dirname, '/dist/index.js') + )).toString(); + let map = (await fs.readFile( + path.join(__dirname, '/dist/index.map') + )).toString(); mapValidator(raw, map); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 14); }); @@ -142,7 +142,7 @@ describe('sourcemaps', function() { } ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'local.js', 'util.js'], childBundles: [ @@ -153,15 +153,15 @@ describe('sourcemaps', function() { ] }); - let raw = fs - .readFileSync(path.join(__dirname, '/dist/index.js')) - .toString(); - let map = fs - .readFileSync(path.join(__dirname, '/dist/index.map')) - .toString(); + let raw = (await fs.readFile( + path.join(__dirname, '/dist/index.js') + )).toString(); + let map = (await fs.readFile( + path.join(__dirname, '/dist/index.map') + )).toString(); mapValidator(raw, map); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 14); }); @@ -171,7 +171,7 @@ describe('sourcemaps', function() { __dirname + '/integration/sourcemap-reference/index.html' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.html', assets: ['index.html'], childBundles: [ @@ -187,9 +187,9 @@ describe('sourcemaps', function() { ] }); - let jsOutput = fs - .readFileSync(Array.from(b.childBundles)[0].name) - .toString(); + let jsOutput = (await fs.readFile( + Array.from(b.childBundles)[0].name + )).toString(); let sourcemapReference = path.join( __dirname, @@ -197,11 +197,11 @@ describe('sourcemaps', function() { jsOutput.substring(jsOutput.lastIndexOf('//# sourceMappingURL') + 22) ); assert( - fs.existsSync(path.join(sourcemapReference)), + await fs.exists(path.join(sourcemapReference)), 'referenced sourcemap should exist' ); - let map = fs.readFileSync(path.join(sourcemapReference)).toString(); + let map = (await fs.readFile(path.join(sourcemapReference))).toString(); mapValidator(jsOutput, map); }); }); diff --git a/test/stylus.js b/test/stylus.js index 1623fa0cc55..fefc1734ab2 100644 --- a/test/stylus.js +++ b/test/stylus.js @@ -1,12 +1,12 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, run, assertBundleTree} = require('./utils'); describe('stylus', function() { it('should support requiring stylus files', async function() { let b = await bundle(__dirname + '/integration/stylus/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.styl'], childBundles: [ @@ -21,11 +21,11 @@ describe('stylus', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.index')); }); @@ -34,7 +34,7 @@ describe('stylus', function() { // a.styl shouldn't be included as a dependency that we can see. // stylus takes care of inlining it. - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.styl'], childBundles: [ @@ -49,11 +49,11 @@ describe('stylus', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('.index')); assert(css.includes('.a')); assert(css.includes('-webkit-box')); @@ -62,7 +62,7 @@ describe('stylus', function() { it('should support linking to assets with url() from stylus', async function() { let b = await bundle(__dirname + '/integration/stylus-url/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.styl'], childBundles: [ @@ -82,17 +82,17 @@ describe('stylus', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), 2); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(/url\("test\.[0-9a-f]+\.woff2"\)/.test(css)); assert(css.includes('url("http://google.com")')); assert(css.includes('.index')); assert( - fs.existsSync( + await fs.exists( __dirname + '/dist/' + css.match(/url\("(test\.[0-9a-f]+\.woff2)"\)/)[1] ) ); @@ -101,7 +101,7 @@ describe('stylus', function() { it('should support transforming stylus with postcss', async function() { let b = await bundle(__dirname + '/integration/stylus-postcss/index.js'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'index.styl'], childBundles: [ @@ -116,11 +116,11 @@ describe('stylus', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output, 'function'); assert.equal(output(), '_index_g9mqo_1'); - let css = fs.readFileSync(__dirname + '/dist/index.css', 'utf8'); + let css = await fs.readFile(__dirname + '/dist/index.css', 'utf8'); assert(css.includes('._index_g9mqo_1')); }); }); diff --git a/test/typescript.js b/test/typescript.js index 22869863072..ab8520b6c14 100644 --- a/test/typescript.js +++ b/test/typescript.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); const {bundle, run, assertBundleTree} = require('./utils'); describe('typescript', function() { @@ -9,7 +9,7 @@ describe('typescript', function() { assert.equal(b.assets.size, 2); assert.equal(b.childBundles.size, 1); - let output = run(b); + let output = await run(b); assert.equal(typeof output.count, 'function'); assert.equal(output.count(), 3); }); @@ -22,7 +22,7 @@ describe('typescript', function() { assert.equal(b.assets.size, 2); assert.equal(b.childBundles.size, 1); - let output = run(b); + let output = await run(b); assert.equal(typeof output.count, 'function'); assert.equal(output.count(), 3); }); @@ -33,7 +33,7 @@ describe('typescript', function() { assert.equal(b.assets.size, 2); assert.equal(b.childBundles.size, 1); - let output = run(b); + let output = await run(b); assert.equal(typeof output.count, 'function'); assert.equal(output.count(), 3); }); @@ -44,7 +44,7 @@ describe('typescript', function() { assert.equal(b.assets.size, 1); assert.equal(b.childBundles.size, 1); - let output = run(b); + let output = await run(b); assert.equal(typeof output.env, 'function'); assert.equal(output.env(), 'test'); }); @@ -52,7 +52,7 @@ describe('typescript', function() { it('should support importing a URL to a raw asset', async function() { let b = await bundle(__dirname + '/integration/typescript-raw/index.ts'); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.ts', 'test.txt'], childBundles: [ @@ -67,10 +67,10 @@ describe('typescript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.getRaw, 'function'); assert(/^\/test\.[0-9a-f]+\.txt$/.test(output.getRaw())); - assert(fs.existsSync(__dirname + '/dist/' + output.getRaw())); + assert(await fs.exists(__dirname + '/dist/' + output.getRaw())); }); it('should minify in production mode', async function() { @@ -82,28 +82,28 @@ describe('typescript', function() { assert.equal(b.assets.size, 2); assert.equal(b.childBundles.size, 1); - let output = run(b); + let output = await run(b); assert.equal(typeof output.count, 'function'); assert.equal(output.count(), 3); - let js = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let js = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!js.includes('local.a')); }); it('should support loading tsconfig.json', async function() { let b = await bundle(__dirname + '/integration/typescript-config/index.ts'); - let output = run(b); + let output = await run(b); assert.equal(output, 2); - let js = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let js = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!js.includes('/* test comment */')); }); it('should support compiling JSX', async function() { await bundle(__dirname + '/integration/typescript-jsx/index.tsx'); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('React.createElement("div"')); }); @@ -112,7 +112,7 @@ describe('typescript', function() { __dirname + '/integration/typescript-interop/index.ts' ); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: ['index.ts', 'commonjs-module.js'], childBundles: [ @@ -122,7 +122,7 @@ describe('typescript', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.test, 'function'); assert.equal(output.test(), 'test passed'); }); diff --git a/test/utils.js b/test/utils.js index 443fa865df8..b1ff392ec35 100644 --- a/test/utils.js +++ b/test/utils.js @@ -1,12 +1,16 @@ const Bundler = require('../src/Bundler'); -const rimraf = require('rimraf'); const assert = require('assert'); const vm = require('vm'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); +const nodeFS = require('fs'); const path = require('path'); const WebSocket = require('ws'); const Module = require('module'); +const promisify = require('../src/utils/promisify'); +const rimraf = promisify(require('rimraf')); +const ncp = promisify(require('ncp')); + beforeEach(async function() { // Test run in a single process, creating and deleting the same file(s) // Windows needs a delay for the file handles to be released before deleting @@ -16,7 +20,7 @@ beforeEach(async function() { } // Unix based systems also need a delay but only half as much as windows await sleep(50); - rimraf.sync(path.join(__dirname, 'dist')); + await rimraf(path.join(__dirname, 'dist')); }); function sleep(ms) { @@ -62,7 +66,7 @@ function prepareBrowserContext(bundle, globals) { setTimeout(function() { if (el.tag === 'script') { vm.runInContext( - fs.readFileSync(path.join(__dirname, 'dist', el.src)), + nodeFS.readFileSync(path.join(__dirname, 'dist', el.src)), ctx ); } @@ -95,8 +99,9 @@ function prepareBrowserContext(bundle, globals) { return Promise.resolve({ arrayBuffer() { return Promise.resolve( - new Uint8Array(fs.readFileSync(path.join(__dirname, 'dist', url))) - .buffer + new Uint8Array( + nodeFS.readFileSync(path.join(__dirname, 'dist', url)) + ).buffer ); } }); @@ -133,7 +138,7 @@ function prepareNodeContext(bundle, globals) { return ctx; } -function run(bundle, globals, opts = {}) { +async function run(bundle, globals, opts = {}) { var ctx; switch (bundle.entryAsset.options.target) { case 'browser': @@ -151,7 +156,7 @@ function run(bundle, globals, opts = {}) { } vm.createContext(ctx); - vm.runInContext(fs.readFileSync(bundle.name), ctx); + vm.runInContext(await fs.readFile(bundle.name), ctx); if (opts.require !== false) { return ctx.parcelRequire(bundle.entryAsset.id); @@ -160,7 +165,7 @@ function run(bundle, globals, opts = {}) { return ctx; } -function assertBundleTree(bundle, tree) { +async function assertBundleTree(bundle, tree) { if (tree.name) { assert.equal( path.basename(bundle.name), @@ -200,11 +205,13 @@ function assertBundleTree(bundle, tree) { childBundles.length, 'expected number of child bundles mismatched' ); - childBundles.forEach((b, i) => assertBundleTree(children[i], b)); + await Promise.all( + childBundles.map((b, i) => assertBundleTree(children[i], b)) + ); } if (/js|css/.test(bundle.type)) { - assert(fs.existsSync(bundle.name), 'expected file does not exist'); + assert(await fs.exists(bundle.name), 'expected file does not exist'); } } @@ -234,3 +241,5 @@ exports.run = run; exports.assertBundleTree = assertBundleTree; exports.nextBundle = nextBundle; exports.deferred = deferred; +exports.rimraf = rimraf; +exports.ncp = ncp; diff --git a/test/vue.js b/test/vue.js index 697af17f1de..b2f1343ee33 100644 --- a/test/vue.js +++ b/test/vue.js @@ -1,12 +1,12 @@ const assert = require('assert'); const {bundle, assertBundleTree, run} = require('./utils'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); describe('vue', function() { it('should produce a basic vue bundle', async function() { let b = await bundle(__dirname + '/integration/vue-basic/Basic.vue'); - assertBundleTree(b, { + await assertBundleTree(b, { type: 'js', assets: ['Basic.vue'], childBundles: [ @@ -19,7 +19,7 @@ describe('vue', function() { ] }); - let output = run(b).default; + let output = (await run(b)).default; assert.equal(typeof output.render, 'function'); assert.deepEqual(output.staticRenderFns, []); assert.equal(output._compiled, true); @@ -29,7 +29,7 @@ describe('vue', function() { it('should produce a vue bundle with dependencies', async function() { let b = await bundle(__dirname + '/integration/vue-dependencies/App.vue'); - assertBundleTree(b, { + await assertBundleTree(b, { type: 'js', assets: ['App.vue'], childBundles: [ @@ -46,7 +46,7 @@ describe('vue', function() { ] }); - let output = run(b).default; + let output = (await run(b)).default; assert.equal(typeof output.render, 'function'); assert.equal(output.staticRenderFns.length, 2); assert.deepEqual(output.data(), {msg: 'Welcome to Your Vue.js App!'}); @@ -57,7 +57,7 @@ describe('vue', function() { __dirname + '/integration/vue-preprocessors/pre-processors.vue' ); - assertBundleTree(b, { + await assertBundleTree(b, { type: 'js', assets: ['pre-processors.vue'], childBundles: [ @@ -70,12 +70,12 @@ describe('vue', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.render, 'function'); assert.deepEqual(output.staticRenderFns, []); assert.deepEqual(output.data(), {msg: 'Hello from coffee!'}); - let contents = fs.readFileSync( + let contents = await fs.readFile( __dirname + '/dist/pre-processors.css', 'utf8' ); @@ -89,7 +89,7 @@ describe('vue', function() { __dirname + '/integration/vue-functional/functional.vue' ); - assertBundleTree(b, { + await assertBundleTree(b, { type: 'js', assets: ['functional.vue'], childBundles: [ @@ -99,7 +99,7 @@ describe('vue', function() { ] }); - let output = run(b); + let output = await run(b); assert.equal(typeof output.render, 'function'); assert.equal(output.staticRenderFns.length, 1); assert.equal(output.functional, true); @@ -109,14 +109,17 @@ describe('vue', function() { output._injectStyles.call(ctx); assert.equal(typeof ctx.$style.red, 'string'); - let contents = fs.readFileSync(__dirname + '/dist/functional.css', 'utf8'); + let contents = await fs.readFile( + __dirname + '/dist/functional.css', + 'utf8' + ); assert(contents.includes('.' + ctx.$style.red)); }); it('should produce a vue bundle using scoped styles', async function() { let b = await bundle(__dirname + '/integration/vue-scoped/App.vue'); - assertBundleTree(b, { + await assertBundleTree(b, { type: 'js', assets: ['App.vue'], childBundles: [ @@ -129,20 +132,20 @@ describe('vue', function() { ] }); - let output = run(b).default; + let output = (await run(b)).default; assert.equal(typeof output.render, 'function'); assert.equal(output.staticRenderFns.length, 1); assert(/^data-v-[0-9a-h]{6}$/.test(output._scopeId)); assert.deepEqual(output.data(), {ok: true}); - let contents = fs.readFileSync(__dirname + '/dist/App.css', 'utf8'); + let contents = await fs.readFile(__dirname + '/dist/App.css', 'utf8'); assert(contents.includes(`.test[${output._scopeId}]`)); }); it('should produce a vue bundle using CSS modules', async function() { let b = await bundle(__dirname + '/integration/vue-css-modules/App.vue'); - assertBundleTree(b, { + await assertBundleTree(b, { type: 'js', assets: ['App.vue'], childBundles: [ @@ -155,7 +158,7 @@ describe('vue', function() { ] }); - let output = run(b).default; + let output = (await run(b)).default; assert.equal(typeof output.render, 'function'); assert.deepEqual(output.staticRenderFns, []); assert(Array.isArray(output.beforeCreate)); @@ -165,7 +168,7 @@ describe('vue', function() { output.beforeCreate[0].call(ctx); assert.equal(typeof ctx.$style.red, 'string'); - let contents = fs.readFileSync(__dirname + '/dist/App.css', 'utf8'); + let contents = await fs.readFile(__dirname + '/dist/App.css', 'utf8'); assert(contents.includes('.' + ctx.$style.red)); }); @@ -174,7 +177,7 @@ describe('vue', function() { __dirname + '/integration/vue-nested-components/testcomp.vue' ); - assertBundleTree(b, { + await assertBundleTree(b, { type: 'js', assets: [ 'testcomp.vue', @@ -202,7 +205,7 @@ describe('vue', function() { ] }); - let output = run(b).default; + let output = (await run(b)).default; assert.equal(typeof output.render, 'function'); assert.deepEqual(output.staticRenderFns, []); assert.equal(output._compiled, true); @@ -215,7 +218,7 @@ describe('vue', function() { production: true }); - assertBundleTree(b, { + await assertBundleTree(b, { type: 'js', assets: ['Basic.vue'], childBundles: [ @@ -228,7 +231,7 @@ describe('vue', function() { ] }); - let output = run(b).default; + let output = (await run(b)).default; assert.equal(typeof output.render, 'function'); assert.deepEqual(output.staticRenderFns, []); assert.equal(output._compiled, true); diff --git a/test/wasm.js b/test/wasm.js index 0a84fdbd9b6..7f5a64538df 100644 --- a/test/wasm.js +++ b/test/wasm.js @@ -13,7 +13,7 @@ describe('wasm', function() { target }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: [ 'index.js', @@ -34,7 +34,7 @@ describe('wasm', function() { }); let promise = deferred(); - run(b, {output: promise.resolve}, {require: false}); + await run(b, {output: promise.resolve}, {require: false}); assert.equal(await promise, 5); }); @@ -43,7 +43,7 @@ describe('wasm', function() { target }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: [ 'index.js', @@ -63,7 +63,7 @@ describe('wasm', function() { ] }); - var res = run(b); + var res = await run(b); assert.equal(await res, 5); }); @@ -72,7 +72,7 @@ describe('wasm', function() { target }); - assertBundleTree(b, { + await assertBundleTree(b, { name: 'index.js', assets: [ 'index.js', @@ -102,7 +102,7 @@ describe('wasm', function() { ] }); - var res = run(b); + var res = await run(b); assert.equal(await res, 5); }); }); diff --git a/test/watcher.js b/test/watcher.js index c6986720ed2..11ad0ec3b85 100644 --- a/test/watcher.js +++ b/test/watcher.js @@ -1,15 +1,21 @@ const assert = require('assert'); -const fs = require('fs'); +const fs = require('../src/utils/fs'); +const nodeFS = require('fs'); const path = require('path'); -const {bundler, run, assertBundleTree, sleep, nextBundle} = require('./utils'); -const rimraf = require('rimraf'); -const promisify = require('../src/utils/promisify'); -const ncp = promisify(require('ncp')); +const { + bundler, + run, + assertBundleTree, + sleep, + nextBundle, + rimraf, + ncp +} = require('./utils'); describe('watcher', function() { let b; - beforeEach(function() { - rimraf.sync(__dirname + '/input'); + beforeEach(async function() { + await rimraf(__dirname + '/input'); }); afterEach(function() { @@ -23,16 +29,16 @@ describe('watcher', function() { b = bundler(__dirname + '/input/index.js', {watch: true}); let bundle = await b.bundle(); - let output = run(bundle); + let output = await run(bundle); assert.equal(output(), 3); - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/local.js', 'exports.a = 5; exports.b = 5;' ); bundle = await nextBundle(b); - output = run(bundle); + output = await run(bundle); assert.equal(output(), 10); }); @@ -42,7 +48,7 @@ describe('watcher', function() { b = bundler(__dirname + '/input/index.js', {watch: true}); let bundle = await b.bundle(); - assertBundleTree(bundle, { + await assertBundleTree(bundle, { name: 'index.js', assets: [ 'index.js', @@ -75,15 +81,15 @@ describe('watcher', function() { ] }); - let output = run(bundle); + let output = await run(bundle); assert.equal(await output(), 7); // change b.js so that it no longer depends on common.js. // This should cause common.js and dependencies to no longer be hoisted to the root bundle. - fs.writeFileSync(__dirname + '/input/b.js', 'module.exports = 5;'); + await fs.writeFile(__dirname + '/input/b.js', 'module.exports = 5;'); bundle = await nextBundle(b); - assertBundleTree(bundle, { + await assertBundleTree(bundle, { name: 'index.js', assets: ['index.js', 'bundle-loader.js', 'bundle-url.js', 'js-loader.js'], childBundles: [ @@ -109,7 +115,7 @@ describe('watcher', function() { ] }); - output = run(bundle); + output = await run(bundle); assert.equal(await output(), 8); }); @@ -118,24 +124,22 @@ describe('watcher', function() { b = bundler(__dirname + '/input/index.js', {watch: true}); await b.bundle(); - let mtimes = fs - .readdirSync(__dirname + '/dist') - .map( - f => (fs.statSync(__dirname + '/dist/' + f).mtime.getTime() / 1000) | 0 - ); + let mtimes = (await fs.readdir(__dirname + '/dist')).map( + f => + (nodeFS.statSync(__dirname + '/dist/' + f).mtime.getTime() / 1000) | 0 + ); await sleep(1100); // mtime only has second level precision - fs.writeFileSync( + await fs.writeFile( __dirname + '/input/b.js', 'module.exports = require("./common")' ); await nextBundle(b); - let newMtimes = fs - .readdirSync(__dirname + '/dist') - .map( - f => (fs.statSync(__dirname + '/dist/' + f).mtime.getTime() / 1000) | 0 - ); + let newMtimes = (await fs.readdir(__dirname + '/dist')).map( + f => + (nodeFS.statSync(__dirname + '/dist/' + f).mtime.getTime() / 1000) | 0 + ); assert.deepEqual(mtimes.sort().slice(0, 2), newMtimes.sort().slice(0, 2)); assert.notEqual(mtimes[mtimes.length - 1], newMtimes[newMtimes.length - 1]); }); @@ -145,7 +149,7 @@ describe('watcher', function() { b = bundler(__dirname + '/input/index.js', {watch: true}); let bundle = await b.bundle(); - assertBundleTree(bundle, { + await assertBundleTree(bundle, { name: 'index.js', assets: [ 'index.js', @@ -178,16 +182,16 @@ describe('watcher', function() { ] }); - let output = run(bundle); + let output = await run(bundle); assert.equal(await output(), 7); assert(b.loadedAssets.has(path.join(__dirname, '/input/common-dep.js'))); // Get rid of common-dep.js - fs.writeFileSync(__dirname + '/input/common.js', 'module.exports = 5;'); + await fs.writeFile(__dirname + '/input/common.js', 'module.exports = 5;'); bundle = await nextBundle(b); - assertBundleTree(bundle, { + await assertBundleTree(bundle, { name: 'index.js', assets: [ 'index.js', @@ -219,7 +223,7 @@ describe('watcher', function() { ] }); - output = run(bundle); + output = await run(bundle); assert.equal(await output(), 13); assert(!b.loadedAssets.has(path.join(__dirname, '/input/common-dep.js'))); @@ -230,22 +234,22 @@ describe('watcher', function() { b = bundler(__dirname + '/input/index.js', {watch: true}); await b.bundle(); - let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + let file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(file.includes('class Foo {}')); assert(file.includes('class Bar {}')); // Change babelrc, should recompile both files let babelrc = JSON.parse( - fs.readFileSync(__dirname + '/input/.babelrc', 'utf8') + await fs.readFile(__dirname + '/input/.babelrc', 'utf8') ); babelrc.presets[0][1].targets.browsers.push('IE >= 11'); await sleep(100); - fs.writeFileSync(__dirname + '/input/.babelrc', JSON.stringify(babelrc)); + await fs.writeFile(__dirname + '/input/.babelrc', JSON.stringify(babelrc)); await nextBundle(b); - file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8'); + file = await fs.readFile(__dirname + '/dist/index.js', 'utf8'); assert(!file.includes('class Foo {}')); assert(!file.includes('class Bar {}')); });