From d1f038f62d808f63177a5ad084b02bc14b9b544c Mon Sep 17 00:00:00 2001 From: Julian Kniephoff Date: Mon, 15 Jul 2024 16:55:43 +0200 Subject: [PATCH] test_runner: fix escaping in snapshot tests Snapshotted values are escaped after serialization. This happens when serializing a value for comparison when snapshots already exist, and also when updating them. That is, snapshots are escaped in the internal storage, but when written to disk, one "level" of escaping is removed. That escaping is never added back when reading the snapshots back. This makes even the simplest test trying to serialize a string with an escape code in it fail, like the one I added here. PR-URL: https://github.com/nodejs/node/pull/53833 Reviewed-By: Colin Ihrig Reviewed-By: Yagiz Nizipli Reviewed-By: Moshe Atlow Reviewed-By: James M Snell --- lib/internal/test_runner/snapshot.js | 4 +++- test/fixtures/test-runner/snapshots/unit.js | 4 ++++ test/parallel/test-runner-snapshot-tests.js | 12 ++++++------ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/internal/test_runner/snapshot.js b/lib/internal/test_runner/snapshot.js index 16a994c02a6392..a2ab85239d7299 100644 --- a/lib/internal/test_runner/snapshot.js +++ b/lib/internal/test_runner/snapshot.js @@ -146,7 +146,9 @@ class SnapshotManager { ); } - this.snapshots = context.exports; + for (const key in context.exports) { + this.snapshots[key] = templateEscape(context.exports[key]); + } this.loaded = true; } catch (err) { let msg = `Cannot read snapshot file '${this.snapshotFile}.'`; diff --git a/test/fixtures/test-runner/snapshots/unit.js b/test/fixtures/test-runner/snapshots/unit.js index 0718314239eede..889b47f379a805 100644 --- a/test/fixtures/test-runner/snapshots/unit.js +++ b/test/fixtures/test-runner/snapshots/unit.js @@ -22,3 +22,7 @@ test('`${foo}`', async (t) => { const options = { serializers: [() => { return '***'; }]}; t.assert.snapshot('snapshotted string', options); }); + +test('escapes in `\\${foo}`\n', async (t) => { + t.assert.snapshot('`\\${foo}`\n'); +}); diff --git a/test/parallel/test-runner-snapshot-tests.js b/test/parallel/test-runner-snapshot-tests.js index ae4130190d6ee1..d3abf356821d56 100644 --- a/test/parallel/test-runner-snapshot-tests.js +++ b/test/parallel/test-runner-snapshot-tests.js @@ -296,9 +296,9 @@ test('t.assert.snapshot()', async (t) => { t.assert.strictEqual(child.code, 1); t.assert.strictEqual(child.signal, null); - t.assert.match(child.stdout, /# tests 3/); + t.assert.match(child.stdout, /# tests 4/); t.assert.match(child.stdout, /# pass 0/); - t.assert.match(child.stdout, /# fail 3/); + t.assert.match(child.stdout, /# fail 4/); t.assert.match(child.stdout, /Missing snapshots/); }); @@ -311,8 +311,8 @@ test('t.assert.snapshot()', async (t) => { t.assert.strictEqual(child.code, 0); t.assert.strictEqual(child.signal, null); - t.assert.match(child.stdout, /tests 3/); - t.assert.match(child.stdout, /pass 3/); + t.assert.match(child.stdout, /tests 4/); + t.assert.match(child.stdout, /pass 4/); t.assert.match(child.stdout, /fail 0/); }); @@ -325,8 +325,8 @@ test('t.assert.snapshot()', async (t) => { t.assert.strictEqual(child.code, 0); t.assert.strictEqual(child.signal, null); - t.assert.match(child.stdout, /tests 3/); - t.assert.match(child.stdout, /pass 3/); + t.assert.match(child.stdout, /tests 4/); + t.assert.match(child.stdout, /pass 4/); t.assert.match(child.stdout, /fail 0/); }); });