summaryrefslogtreecommitdiff
path: root/test/sequential
diff options
context:
space:
mode:
authorJeremiah Senkpiel <fishrock123@rocketmail.com>2015-10-06 23:00:31 -0700
committerJeremiah Senkpiel <fishrock123@rocketmail.com>2015-10-19 11:53:54 -0400
commit286ef1daca1c1f3e3363ee162fb97fb823632352 (patch)
tree3959be76840a2b1408a20356be37b8b9aefe3364 /test/sequential
parentd8db75730f528cdd0e4629f528c97dc3de0543d6 (diff)
downloadnode-new-286ef1daca1c1f3e3363ee162fb97fb823632352.tar.gz
test: cleanup, improve repl-persistent-history
- Now cleans up the history file unless told otherwise. - Now also logs which test case failed. - Waits for flush after repl close if necessary. Fixes: https://github.com/nodejs/node/issues/2319 PR-URL: https://github.com/nodejs/node/pull/2356 Reviewed-By: Roman Reiss <me@silverwind.io> Reviewed By: Evan Lucas <evanlucas@me.com>
Diffstat (limited to 'test/sequential')
-rw-r--r--test/sequential/test-repl-persistent-history.js83
1 files changed, 68 insertions, 15 deletions
diff --git a/test/sequential/test-repl-persistent-history.js b/test/sequential/test-repl-persistent-history.js
index ef433912da..7cebddbd6c 100644
--- a/test/sequential/test-repl-persistent-history.js
+++ b/test/sequential/test-repl-persistent-history.js
@@ -70,6 +70,7 @@ const historyFixturePath = path.join(fixtures, '.node_repl_history');
const historyPath = path.join(common.tmpDir, '.fixture_copy_repl_history');
const oldHistoryPath = path.join(fixtures, 'old-repl-history-file.json');
const enoentHistoryPath = path.join(fixtures, 'enoent-repl-history-file.json');
+const defaultHistoryPath = path.join(common.tmpDir, '.node_repl_history');
const tests = [{
@@ -113,11 +114,7 @@ const tests = [{
},
{
env: { NODE_REPL_HISTORY_FILE: oldHistoryPath },
- test: [UP, CLEAR, '\'42\'', ENTER/*, function(cb) {
- // XXX(Fishrock123) Allow the REPL to save to disk.
- // There isn't a way to do this programmatically right now.
- setTimeout(cb, 50);
- }*/],
+ test: [UP, CLEAR, '\'42\'', ENTER],
expected: [prompt, convertMsg, prompt, prompt + '\'=^.^=\'', prompt, '\'',
'4', '2', '\'', '\'42\'\n', prompt, prompt],
after: function ensureHistoryFixture() {
@@ -132,7 +129,7 @@ const tests = [{
'\'Stay Fresh~\'' + os.EOL);
}
},
-{
+{ // Requires the above testcase
env: {},
test: [UP, UP, ENTER],
expected: [prompt, prompt + '\'42\'', prompt + '\'=^.^=\'', '\'=^.^=\'\n',
@@ -149,16 +146,45 @@ const tests = [{
test: [UP],
expected: [prompt, homedirErr, prompt, replDisabled, prompt]
}];
+const numtests = tests.length;
+
+
+var testsNotRan = tests.length;
+process.on('beforeExit', () =>
+ assert.strictEqual(testsNotRan, 0)
+);
+
+function cleanupTmpFile() {
+ try {
+ // Write over the file, clearing any history
+ fs.writeFileSync(defaultHistoryPath, '');
+ } catch (err) {
+ if (err.code === 'ENOENT') return true;
+ throw err;
+ }
+ return true;
+}
// Copy our fixture to the tmp directory
fs.createReadStream(historyFixturePath)
- .pipe(fs.createWriteStream(historyPath)).on('unpipe', runTest);
+ .pipe(fs.createWriteStream(historyPath)).on('unpipe', () => runTest());
-function runTest() {
+function runTest(assertCleaned) {
const opts = tests.shift();
if (!opts) return; // All done
+ if (assertCleaned) {
+ try {
+ assert.strictEqual(fs.readFileSync(defaultHistoryPath, 'utf8'), '');
+ } catch (e) {
+ if (e.code !== 'ENOENT') {
+ console.error(`Failed test # ${numtests - tests.length}`);
+ throw e;
+ }
+ }
+ }
+
const env = opts.env;
const test = opts.test;
const expected = opts.expected;
@@ -177,7 +203,12 @@ function runTest() {
if (output.charCodeAt(0) === 27 || /^[\r\n]+$/.test(output))
return next();
- assert.strictEqual(output, expected.shift());
+ try {
+ assert.strictEqual(output, expected.shift());
+ } catch (err) {
+ console.error(`Failed test # ${numtests - tests.length}`);
+ throw err;
+ }
next();
}
}),
@@ -185,16 +216,38 @@ function runTest() {
useColors: false,
terminal: true
}, function(err, repl) {
- if (err) throw err;
+ if (err) {
+ console.error(`Failed test # ${numtests - tests.length}`);
+ throw err;
+ }
- if (after) repl.on('close', after);
+ repl.once('close', () => {
+ if (repl._flushing) {
+ repl.once('flushHistory', onClose);
+ return;
+ }
- repl.on('close', function() {
- // Ensure everything that we expected was output
- assert.strictEqual(expected.length, 0);
- setImmediate(runTest);
+ onClose();
});
+ function onClose() {
+ if (after) {
+ var cleaned = after();
+ } else {
+ var cleaned = cleanupTmpFile();
+ }
+
+ try {
+ // Ensure everything that we expected was output
+ assert.strictEqual(expected.length, 0);
+ testsNotRan--;
+ setImmediate(runTest, cleaned);
+ } catch (err) {
+ console.error(`Failed test # ${numtests - tests.length}`);
+ throw err;
+ }
+ }
+
repl.inputStream.run(test);
});
}