1'use strict'; 2 3// This tests snapshot JS API using the example in the docs. 4 5require('../common'); 6const assert = require('assert'); 7const { spawnSync } = require('child_process'); 8const tmpdir = require('../common/tmpdir'); 9const path = require('path'); 10const fs = require('fs'); 11 12tmpdir.refresh(); 13const blobPath = path.join(tmpdir.path, 'snapshot.blob'); 14const code = ` 15require('v8').startupSnapshot.setDeserializeMainFunction(() => { 16 console.log(JSON.stringify(process.argv)); 17}); 18`; 19{ 20 fs.writeFileSync(path.join(tmpdir.path, 'entry.js'), code, 'utf8'); 21 const child = spawnSync(process.execPath, [ 22 '--snapshot-blob', 23 blobPath, 24 '--build-snapshot', 25 'entry.js', 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 '--snapshot-blob', 41 blobPath, 42 'argv1', 43 'argv2', 44 ], { 45 cwd: tmpdir.path, 46 env: { 47 ...process.env, 48 } 49 }); 50 51 const stdout = JSON.parse(child.stdout.toString().trim()); 52 assert.deepStrictEqual(stdout, [ 53 process.execPath, 54 'argv1', 55 'argv2', 56 ]); 57 assert.strictEqual(child.status, 0); 58} 59