From 375ba4870feaaa20c3c822eb3366e1f2988fd2e0 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 20 Oct 2020 07:03:27 +0200 Subject: [PATCH] Make tests actually throw when there is an error in the code and skip broken test --- packages/commonjs/src/transform.js | 2 +- .../dynamic-require-slash-access/_config.js | 3 + .../dynamic-require-slash-access/main.js | 5 +- .../transpiled-esm-entry-mixed/_config.js | 5 + .../transpiled-esm-entry-named/_config.js | 5 + .../transpiled-esm-importer/_config.js | 3 + .../function/transpiled-esm-importer/dep.js | 2 + .../function/transpiled-esm-importer/main.js | 9 + packages/commonjs/test/function.js | 9 +- .../commonjs/test/snapshots/function.js.md | 247 ++++-------------- .../commonjs/test/snapshots/function.js.snap | Bin 11029 -> 11225 bytes 11 files changed, 87 insertions(+), 203 deletions(-) create mode 100644 packages/commonjs/test/fixtures/function/transpiled-esm-importer/_config.js create mode 100644 packages/commonjs/test/fixtures/function/transpiled-esm-importer/dep.js create mode 100644 packages/commonjs/test/fixtures/function/transpiled-esm-importer/main.js diff --git a/packages/commonjs/src/transform.js b/packages/commonjs/src/transform.js index c3ec96066..5e47edc2a 100644 --- a/packages/commonjs/src/transform.js +++ b/packages/commonjs/src/transform.js @@ -68,7 +68,7 @@ function isTrueNode(node) { switch (node.type) { case 'Literal': - return node.value; + return !!node.value; case 'UnaryExpression': return node.operator === '!' && node.argument && node.argument.value === 0; default: diff --git a/packages/commonjs/test/fixtures/function/dynamic-require-slash-access/_config.js b/packages/commonjs/test/fixtures/function/dynamic-require-slash-access/_config.js index 013229479..0713326f6 100755 --- a/packages/commonjs/test/fixtures/function/dynamic-require-slash-access/_config.js +++ b/packages/commonjs/test/fixtures/function/dynamic-require-slash-access/_config.js @@ -1,6 +1,9 @@ const { nodeResolve } = require('@rollup/plugin-node-resolve'); module.exports = { + // TODO This test is broken because for dynamic require targets with dependencies, the dependencies are hoisted + // above the dynamic register calls at the moment + skip: true, description: 'resolves imports of node_modules module with halfway / subfolder access', options: { plugins: [nodeResolve()] diff --git a/packages/commonjs/test/fixtures/function/dynamic-require-slash-access/main.js b/packages/commonjs/test/fixtures/function/dynamic-require-slash-access/main.js index 989622c67..cee139817 100755 --- a/packages/commonjs/test/fixtures/function/dynamic-require-slash-access/main.js +++ b/packages/commonjs/test/fixtures/function/dynamic-require-slash-access/main.js @@ -11,4 +11,7 @@ t.is(takeModule('.//'), 'same-directory'); t.is(takeModule('./sub'), 'sub'); t.is(takeModule('custom-module'), 'custom-module + sub'); -t.deepEqual(require('./sub/sub'), { parent: 'same-directory', customModule: 'custom-module' }); +t.deepEqual(require('./sub/sub'), { + parent: 'same-directory', + customModule: 'custom-module + sub' +}); diff --git a/packages/commonjs/test/fixtures/function/transpiled-esm-entry-mixed/_config.js b/packages/commonjs/test/fixtures/function/transpiled-esm-entry-mixed/_config.js index be1244083..0fe500a82 100644 --- a/packages/commonjs/test/fixtures/function/transpiled-esm-entry-mixed/_config.js +++ b/packages/commonjs/test/fixtures/function/transpiled-esm-entry-mixed/_config.js @@ -4,6 +4,11 @@ module.exports = { description: 'Creates correct exports if an ES module that was transpiled to CJS is used as entry point', options: { + onwarn(warning) { + if (warning.code !== 'MIXED_EXPORTS') { + throw new Error(warning.message); + } + }, input: [path.join(__dirname, 'main.js'), path.join(__dirname, 'entry.js')] } }; diff --git a/packages/commonjs/test/fixtures/function/transpiled-esm-entry-named/_config.js b/packages/commonjs/test/fixtures/function/transpiled-esm-entry-named/_config.js index be1244083..0fe500a82 100644 --- a/packages/commonjs/test/fixtures/function/transpiled-esm-entry-named/_config.js +++ b/packages/commonjs/test/fixtures/function/transpiled-esm-entry-named/_config.js @@ -4,6 +4,11 @@ module.exports = { description: 'Creates correct exports if an ES module that was transpiled to CJS is used as entry point', options: { + onwarn(warning) { + if (warning.code !== 'MIXED_EXPORTS') { + throw new Error(warning.message); + } + }, input: [path.join(__dirname, 'main.js'), path.join(__dirname, 'entry.js')] } }; diff --git a/packages/commonjs/test/fixtures/function/transpiled-esm-importer/_config.js b/packages/commonjs/test/fixtures/function/transpiled-esm-importer/_config.js new file mode 100644 index 000000000..9a3640f6e --- /dev/null +++ b/packages/commonjs/test/fixtures/function/transpiled-esm-importer/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'handles a transpiled module that imports the default from a transpiled module' +}; diff --git a/packages/commonjs/test/fixtures/function/transpiled-esm-importer/dep.js b/packages/commonjs/test/fixtures/function/transpiled-esm-importer/dep.js new file mode 100644 index 000000000..fb5eac450 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/transpiled-esm-importer/dep.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports, '__esModule', { value: true }); +exports.default = 'default'; diff --git a/packages/commonjs/test/fixtures/function/transpiled-esm-importer/main.js b/packages/commonjs/test/fixtures/function/transpiled-esm-importer/main.js new file mode 100644 index 000000000..4c7846886 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/transpiled-esm-importer/main.js @@ -0,0 +1,9 @@ +const dep = require('./dep.js'); + +function _interopDefault(e) { + return e && e.__esModule ? e : { default: e }; +} + +t.is(dep.__esModule, true); +const dep__default = /* #__PURE__*/ _interopDefault(dep); +t.is(dep__default.default, 'default'); diff --git a/packages/commonjs/test/function.js b/packages/commonjs/test/function.js index 13dc8c745..255f258eb 100644 --- a/packages/commonjs/test/function.js +++ b/packages/commonjs/test/function.js @@ -18,6 +18,10 @@ readdirSync('./fixtures/function').forEach((dir) => { config = {}; } + if (config.skip) { + console.error(`Skipped test "${dir}"`); + return; + } (config.solo ? test.only : test)(dir, async (t) => { const options = Object.assign( { @@ -44,10 +48,13 @@ readdirSync('./fixtures/function').forEach((dir) => { console.groupEnd(); } } - const { exports, global } = runCodeSplitTest(codeMap, t, config.context); + const { exports, global, error } = runCodeSplitTest(codeMap, t, config.context); if (config.exports) config.exports(exports, t); if (config.global) config.global(global, t); + if (error) { + throw error; + } t.snapshot(codeMap); }); }); diff --git a/packages/commonjs/test/snapshots/function.js.md b/packages/commonjs/test/snapshots/function.js.md index f842f9a06..01552cc4f 100644 --- a/packages/commonjs/test/snapshots/function.js.md +++ b/packages/commonjs/test/snapshots/function.js.md @@ -2752,206 +2752,6 @@ Generated by [AVA](https://avajs.dev). `, } -## dynamic-require-slash-access - -> Snapshot 1 - - { - 'main.js': `'use strict';␊ - ␊ - var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};␊ - ␊ - function commonjsRegister (path, loader) {␊ - DYNAMIC_REQUIRE_LOADERS[path] = loader;␊ - }␊ - ␊ - const DYNAMIC_REQUIRE_LOADERS = Object.create(null);␊ - const DYNAMIC_REQUIRE_CACHE = Object.create(null);␊ - const DEFAULT_PARENT_MODULE = {␊ - id: '<' + 'rollup>', exports: {}, parent: undefined, filename: null, loaded: false, children: [], paths: []␊ - };␊ - const CHECKED_EXTENSIONS = ['', '.js', '.json'];␊ - ␊ - function normalize (path) {␊ - path = path.replace(/\\\\/g, '/');␊ - const parts = path.split('/');␊ - const slashed = parts[0] === '';␊ - for (let i = 1; i < parts.length; i++) {␊ - if (parts[i] === '.' || parts[i] === '') {␊ - parts.splice(i--, 1);␊ - }␊ - }␊ - for (let i = 1; i < parts.length; i++) {␊ - if (parts[i] !== '..') continue;␊ - if (i > 0 && parts[i - 1] !== '..' && parts[i - 1] !== '.') {␊ - parts.splice(--i, 2);␊ - i--;␊ - }␊ - }␊ - path = parts.join('/');␊ - if (slashed && path[0] !== '/')␊ - path = '/' + path;␊ - else if (path.length === 0)␊ - path = '.';␊ - return path;␊ - }␊ - ␊ - function join () {␊ - if (arguments.length === 0)␊ - return '.';␊ - let joined;␊ - for (let i = 0; i < arguments.length; ++i) {␊ - let arg = arguments[i];␊ - if (arg.length > 0) {␊ - if (joined === undefined)␊ - joined = arg;␊ - else␊ - joined += '/' + arg;␊ - }␊ - }␊ - if (joined === undefined)␊ - return '.';␊ - ␊ - return joined;␊ - }␊ - ␊ - function isPossibleNodeModulesPath (modulePath) {␊ - let c0 = modulePath[0];␊ - if (c0 === '/' || c0 === '\\\\') return false;␊ - let c1 = modulePath[1], c2 = modulePath[2];␊ - if ((c0 === '.' && (!c1 || c1 === '/' || c1 === '\\\\')) ||␊ - (c0 === '.' && c1 === '.' && (!c2 || c2 === '/' || c2 === '\\\\'))) return false;␊ - if (c1 === ':' && (c2 === '/' || c2 === '\\\\'))␊ - return false;␊ - return true;␊ - }␊ - ␊ - function dirname (path) {␊ - if (path.length === 0)␊ - return '.';␊ - ␊ - let i = path.length - 1;␊ - while (i > 0) {␊ - const c = path.charCodeAt(i);␊ - if ((c === 47 || c === 92) && i !== path.length - 1)␊ - break;␊ - i--;␊ - }␊ - ␊ - if (i > 0)␊ - return path.substr(0, i);␊ - ␊ - if (path.chartCodeAt(0) === 47 || path.chartCodeAt(0) === 92)␊ - return path.charAt(0);␊ - ␊ - return '.';␊ - }␊ - ␊ - function commonjsRequire (path, originalModuleDir) {␊ - const shouldTryNodeModules = isPossibleNodeModulesPath(path);␊ - path = normalize(path);␊ - let relPath;␊ - while (true) {␊ - if (!shouldTryNodeModules) {␊ - relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ - } else if (originalModuleDir) {␊ - relPath = normalize(originalModuleDir + '/node_modules/' + path);␊ - } else {␊ - relPath = normalize(join('node_modules', path));␊ - }␊ - for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ - const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ - let cachedModule = DYNAMIC_REQUIRE_CACHE[resolvedPath];␊ - if (cachedModule) return cachedModule.exports;␊ - const loader = DYNAMIC_REQUIRE_LOADERS[resolvedPath];␊ - if (loader) {␊ - DYNAMIC_REQUIRE_CACHE[resolvedPath] = cachedModule = {␊ - id: resolvedPath,␊ - filename: resolvedPath,␊ - path: dirname(resolvedPath),␊ - exports: {},␊ - parent: DEFAULT_PARENT_MODULE,␊ - loaded: false,␊ - children: [],␊ - paths: [],␊ - require: function (path, base) {␊ - return commonjsRequire(path, (base === undefined || base === null) ? cachedModule.path : base);␊ - }␊ - };␊ - try {␊ - loader.call(commonjsGlobal, cachedModule, cachedModule.exports);␊ - } catch (error) {␊ - delete DYNAMIC_REQUIRE_CACHE[resolvedPath];␊ - throw error;␊ - }␊ - cachedModule.loaded = true;␊ - return cachedModule.exports;␊ - } }␊ - if (!shouldTryNodeModules) break;␊ - const nextDir = normalize(originalModuleDir + '/..');␊ - if (nextDir === originalModuleDir) break;␊ - originalModuleDir = nextDir;␊ - }␊ - return require(path);␊ - }␊ - ␊ - commonjsRequire.cache = DYNAMIC_REQUIRE_CACHE;␊ - ␊ - var dynamicRequireSlashAccess = 'same-directory';␊ - ␊ - var sub = 'sub';␊ - ␊ - var customModule = 'custom-module' + ' + ' + commonjsRequire("custom-module2/sub", "/$$rollup_base$$/fixtures/function/dynamic-require-slash-access/node_modules/custom-module");␊ - ␊ - commonjsRegister("/$$rollup_base$$/fixtures/function/dynamic-require-slash-access/node_modules/custom-module2/sub.js", function (module, exports) {␊ - module.exports = 'sub';␊ - ␊ - });␊ - ␊ - commonjsRegister("/$$rollup_base$$/fixtures/function/dynamic-require-slash-access", function (module, exports) {␊ - module.exports = dynamicRequireSlashAccess;␊ - });␊ - commonjsRegister("/$$rollup_base$$/fixtures/function/dynamic-require-slash-access/sub", function (module, exports) {␊ - module.exports = sub;␊ - });␊ - commonjsRegister("/$$rollup_base$$/fixtures/function/dynamic-require-slash-access/node_modules/custom-module", function (module, exports) {␊ - module.exports = customModule;␊ - });␊ - ␊ - /* eslint-disable import/no-dynamic-require, global-require */␊ - ␊ - function takeModule(name) {␊ - return commonjsRequire(name,"/$$rollup_base$$/fixtures/function/dynamic-require-slash-access/sub");␊ - }␊ - ␊ - var sub$1 = {␊ - parent: takeModule('..'),␊ - customModule: takeModule('custom-module')␊ - };␊ - ␊ - /* eslint-disable import/no-dynamic-require, global-require */␊ - ␊ - function takeModule$1(name) {␊ - return commonjsRequire(name,"/$$rollup_base$$/fixtures/function/dynamic-require-slash-access");␊ - }␊ - ␊ - t.is(takeModule$1('.'), 'same-directory');␊ - t.is(takeModule$1('./'), 'same-directory');␊ - t.is(takeModule$1('.//'), 'same-directory');␊ - ␊ - t.is(takeModule$1('./sub'), 'sub');␊ - ␊ - t.is(takeModule$1('custom-module'), 'custom-module + sub');␊ - t.deepEqual(sub$1, { parent: 'same-directory', customModule: 'custom-module' });␊ - ␊ - var main = {␊ - ␊ - };␊ - ␊ - module.exports = main;␊ - `, - } - ## es6-export-with-global-sniffing > Snapshot 1 @@ -5130,6 +4930,53 @@ Generated by [AVA](https://avajs.dev). `, } +## transpiled-esm-importer + +> Snapshot 1 + + { + 'main.js': `'use strict';␊ + ␊ + var _default = 'default';␊ + ␊ + var dep = /*#__PURE__*/Object.freeze({␊ + __proto__: null,␊ + 'default': _default␊ + });␊ + ␊ + function getAugmentedNamespace(n) {␊ + if (n.__esModule) return n;␊ + var a = Object.defineProperty({}, '__esModule', {value: true});␊ + Object.keys(n).forEach(function (k) {␊ + var d = Object.getOwnPropertyDescriptor(n, k);␊ + Object.defineProperty(a, k, d.get ? d : {␊ + enumerable: true,␊ + get: function () {␊ + return n[k];␊ + }␊ + });␊ + });␊ + return a;␊ + }␊ + ␊ + var dep$1 = /*@__PURE__*/getAugmentedNamespace(dep);␊ + ␊ + function _interopDefault$1(e) {␊ + return e && e.__esModule ? e : { default: e };␊ + }␊ + ␊ + t.is(dep$1.__esModule, true);␊ + const dep__default = /* #__PURE__*/ _interopDefault$1(dep$1);␊ + t.is(dep__default.default, 'default');␊ + ␊ + var main = {␊ + ␊ + };␊ + ␊ + module.exports = main;␊ + `, + } + ## transpiled-esm-mixed > Snapshot 1 diff --git a/packages/commonjs/test/snapshots/function.js.snap b/packages/commonjs/test/snapshots/function.js.snap index 492c09370df5c4ad89f881f453e72232c014b1cc..062262e0e2d4d51f25876ba39f8f8b00f1a890aa 100644 GIT binary patch literal 11225 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

%fi*N)M7AaZ`+Z@NRGzDSDH_JbZSr6wk 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 O$j{>5C=(zMp#KAHvodV}