1'use strict'; 2 3// This tests that weak references work across serialization. 4 5require('../common'); 6const assert = require('assert'); 7const { spawnSync } = require('child_process'); 8const tmpdir = require('../common/tmpdir'); 9const fixtures = require('../common/fixtures'); 10const path = require('path'); 11const fs = require('fs'); 12 13tmpdir.refresh(); 14const blobPath = path.join(tmpdir.path, 'snapshot.blob'); 15 16function runTest(entry) { 17 console.log('running test with', entry); 18 { 19 const child = spawnSync(process.execPath, [ 20 '--expose-internals', 21 '--expose-gc', 22 '--snapshot-blob', 23 blobPath, 24 '--build-snapshot', 25 entry, 26 ], { 27 cwd: tmpdir.path 28 }); 29 if (child.status !== 0) { 30 console.log(child.stderr.toString()); 31 console.log(child.stdout.toString()); 32 assert.strictEqual(child.status, 0); 33 } 34 const stats = fs.statSync(path.join(tmpdir.path, 'snapshot.blob')); 35 assert(stats.isFile()); 36 } 37 38 { 39 const child = spawnSync(process.execPath, [ 40 '--expose-internals', 41 '--expose-gc', 42 '--snapshot-blob', 43 blobPath, 44 ], { 45 cwd: tmpdir.path, 46 env: { 47 ...process.env, 48 } 49 }); 50 51 const stdout = child.stdout.toString().trim(); 52 const stderr = child.stderr.toString().trim(); 53 console.log(`[stdout]:\n${stdout}\n`); 54 console.log(`[stderr]:\n${stderr}\n`); 55 assert.strictEqual(child.status, 0); 56 } 57} 58 59runTest(fixtures.path('snapshot', 'weak-reference.js')); 60runTest(fixtures.path('snapshot', 'weak-reference-gc.js')); 61