From 944fb74aecfa2f3478097177390c0ffc2e6fdfb2 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sun, 29 Mar 2020 17:59:41 +0200 Subject: [PATCH] Improve coverage --- cli/run/watch.ts | 80 +++++++++---------- .../cli/samples/watch/bundle-error/_config.js | 22 +++++ .../watch/bundle-error/_expected/main.js | 3 + test/cli/samples/watch/bundle-error/main.js | 1 + .../watch/bundle-error/rollup.config.js | 7 ++ .../samples/watch/no-config-file/_config.js | 9 +++ .../watch/no-config-file/_expected/main.js | 3 + test/cli/samples/watch/no-config-file/main.js | 1 + .../samples/watch/node-config-file/_config.js | 10 +++ .../watch/node-config-file/_expected/main.js | 3 + .../samples/watch/node-config-file/main.js | 1 + 11 files changed, 98 insertions(+), 42 deletions(-) create mode 100644 test/cli/samples/watch/bundle-error/_config.js create mode 100644 test/cli/samples/watch/bundle-error/_expected/main.js create mode 100644 test/cli/samples/watch/bundle-error/main.js create mode 100644 test/cli/samples/watch/bundle-error/rollup.config.js create mode 100644 test/cli/samples/watch/no-config-file/_config.js create mode 100644 test/cli/samples/watch/no-config-file/_expected/main.js create mode 100644 test/cli/samples/watch/no-config-file/main.js create mode 100644 test/cli/samples/watch/node-config-file/_config.js create mode 100644 test/cli/samples/watch/node-config-file/_expected/main.js create mode 100644 test/cli/samples/watch/node-config-file/main.js diff --git a/cli/run/watch.ts b/cli/run/watch.ts index 6d59fdb9133..8562f218a81 100644 --- a/cli/run/watch.ts +++ b/cli/run/watch.ts @@ -32,50 +32,46 @@ export default async function watch(command: any) { } if (configFile) { - if (configFile.startsWith('node:')) { - ({ options: configs, warnings } = await loadAndParseConfigFile(configFile, command)); - } else { - let reloadingConfig = false; - let aborted = false; - let configFileData: string | null = null; - - configWatcher = fs.watch(configFile, (event: string) => { - if (event === 'change') reloadConfigFile(); - }); - - await reloadConfigFile(); - - async function reloadConfigFile() { - try { - const newConfigFileData = fs.readFileSync(configFile!, 'utf-8'); - if (newConfigFileData === configFileData) { - return; - } - if (reloadingConfig) { - aborted = true; - return; - } - if (configFileData) { - stderr(`\nReloading updated config...`); - } - configFileData = newConfigFileData; - reloadingConfig = true; - ({ options: configs, warnings } = await loadAndParseConfigFile(configFile!, command)); - reloadingConfig = false; - if (aborted) { - aborted = false; - reloadConfigFile(); - } else { - if (watcher) { - watcher.close(); - } - start(configs); + let reloadingConfig = false; + let aborted = false; + let configFileData: string | null = null; + + configWatcher = fs.watch(configFile, (event: string) => { + if (event === 'change') reloadConfigFile(); + }); + + await reloadConfigFile(); + + async function reloadConfigFile() { + try { + const newConfigFileData = fs.readFileSync(configFile!, 'utf-8'); + if (newConfigFileData === configFileData) { + return; + } + if (reloadingConfig) { + aborted = true; + return; + } + if (configFileData) { + stderr(`\nReloading updated config...`); + } + configFileData = newConfigFileData; + reloadingConfig = true; + ({ options: configs, warnings } = await loadAndParseConfigFile(configFile!, command)); + reloadingConfig = false; + if (aborted) { + aborted = false; + reloadConfigFile(); + } else { + if (watcher) { + watcher.close(); } - } catch (err) { - configs = []; - reloadingConfig = false; - handleError(err, true); + start(configs); } + } catch (err) { + configs = []; + reloadingConfig = false; + handleError(err, true); } } } else { diff --git a/test/cli/samples/watch/bundle-error/_config.js b/test/cli/samples/watch/bundle-error/_config.js new file mode 100644 index 00000000000..0d11603ff09 --- /dev/null +++ b/test/cli/samples/watch/bundle-error/_config.js @@ -0,0 +1,22 @@ +const fs = require('fs'); +const path = require('path'); + +let mainFile; + +module.exports = { + description: 'recovers from errors during bundling', + command: 'rollup -cw', + before() { + mainFile = path.resolve(__dirname, 'main.js'); + fs.writeFileSync(mainFile, '<=>'); + }, + abortOnStderr(data) { + if (data.includes('Error: Unexpected token')) { + fs.writeFileSync(mainFile, 'export default 42;'); + return false; + } + if (data.includes('created _actual')) { + return true; + } + }, +}; diff --git a/test/cli/samples/watch/bundle-error/_expected/main.js b/test/cli/samples/watch/bundle-error/_expected/main.js new file mode 100644 index 00000000000..d862de816a3 --- /dev/null +++ b/test/cli/samples/watch/bundle-error/_expected/main.js @@ -0,0 +1,3 @@ +var main = 42; + +export default main; diff --git a/test/cli/samples/watch/bundle-error/main.js b/test/cli/samples/watch/bundle-error/main.js new file mode 100644 index 00000000000..a4012bff06c --- /dev/null +++ b/test/cli/samples/watch/bundle-error/main.js @@ -0,0 +1 @@ +export default 42; \ No newline at end of file diff --git a/test/cli/samples/watch/bundle-error/rollup.config.js b/test/cli/samples/watch/bundle-error/rollup.config.js new file mode 100644 index 00000000000..0c8c1cb886e --- /dev/null +++ b/test/cli/samples/watch/bundle-error/rollup.config.js @@ -0,0 +1,7 @@ +export default { + input: 'main.js', + output: { + dir: "_actual", + format: "es" + } +}; diff --git a/test/cli/samples/watch/no-config-file/_config.js b/test/cli/samples/watch/no-config-file/_config.js new file mode 100644 index 00000000000..f3f030d4806 --- /dev/null +++ b/test/cli/samples/watch/no-config-file/_config.js @@ -0,0 +1,9 @@ +module.exports = { + description: 'watches without a config file', + command: 'rollup main.js --watch --format es --file _actual/main.js', + abortOnStderr(data) { + if (data.includes('created _actual/main.js')) { + return true; + } + }, +}; diff --git a/test/cli/samples/watch/no-config-file/_expected/main.js b/test/cli/samples/watch/no-config-file/_expected/main.js new file mode 100644 index 00000000000..b72a22eac84 --- /dev/null +++ b/test/cli/samples/watch/no-config-file/_expected/main.js @@ -0,0 +1,3 @@ +const foo = 42; + +export { foo }; diff --git a/test/cli/samples/watch/no-config-file/main.js b/test/cli/samples/watch/no-config-file/main.js new file mode 100644 index 00000000000..9d7381d29f6 --- /dev/null +++ b/test/cli/samples/watch/no-config-file/main.js @@ -0,0 +1 @@ +export const foo = 42; diff --git a/test/cli/samples/watch/node-config-file/_config.js b/test/cli/samples/watch/node-config-file/_config.js new file mode 100644 index 00000000000..0e05118eafd --- /dev/null +++ b/test/cli/samples/watch/node-config-file/_config.js @@ -0,0 +1,10 @@ +module.exports = { + solo: true, + description: 'watches using a node_modules config files', + command: 'rollup --watch --config node:custom', + abortOnStderr(data) { + if (data.includes('created _actual/main.js')) { + return true; + } + }, +}; diff --git a/test/cli/samples/watch/node-config-file/_expected/main.js b/test/cli/samples/watch/node-config-file/_expected/main.js new file mode 100644 index 00000000000..b72a22eac84 --- /dev/null +++ b/test/cli/samples/watch/node-config-file/_expected/main.js @@ -0,0 +1,3 @@ +const foo = 42; + +export { foo }; diff --git a/test/cli/samples/watch/node-config-file/main.js b/test/cli/samples/watch/node-config-file/main.js new file mode 100644 index 00000000000..9d7381d29f6 --- /dev/null +++ b/test/cli/samples/watch/node-config-file/main.js @@ -0,0 +1 @@ +export const foo = 42;