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