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 fixtures = require('../common/fixtures'); 10const path = require('path'); 11const fs = require('fs'); 12 13const v8 = require('v8'); 14 15// By default it should be false. We'll test that it's true in snapshot 16// building mode in the fixture. 17assert(!v8.startupSnapshot.isBuildingSnapshot()); 18 19tmpdir.refresh(); 20const blobPath = path.join(tmpdir.path, 'snapshot.blob'); 21const entry = fixtures.path('snapshot', 'v8-startup-snapshot-api.js'); 22{ 23 for (const book of [ 24 'book1.en_US.txt', 25 'book1.es_ES.txt', 26 'book2.zh_CN.txt', 27 ]) { 28 const content = `This is ${book}`; 29 fs.writeFileSync(path.join(tmpdir.path, book), content, 'utf8'); 30 } 31 fs.copyFileSync(entry, path.join(tmpdir.path, 'entry.js')); 32 const child = spawnSync(process.execPath, [ 33 '--snapshot-blob', 34 blobPath, 35 '--build-snapshot', 36 'entry.js', 37 ], { 38 cwd: tmpdir.path 39 }); 40 if (child.status !== 0) { 41 console.log(child.stderr.toString()); 42 console.log(child.stdout.toString()); 43 assert.strictEqual(child.status, 0); 44 } 45 const stats = fs.statSync(path.join(tmpdir.path, 'snapshot.blob')); 46 assert(stats.isFile()); 47} 48 49{ 50 const child = spawnSync(process.execPath, [ 51 '--snapshot-blob', 52 blobPath, 53 'book1', 54 ], { 55 cwd: tmpdir.path, 56 env: { 57 ...process.env, 58 BOOK_LANG: 'en_US', 59 } 60 }); 61 62 const stdout = child.stdout.toString().trim(); 63 const stderr = child.stderr.toString().trim(); 64 assert.strictEqual(stderr, 'Reading book1.en_US.txt'); 65 assert.strictEqual(stdout, 'This is book1.en_US.txt'); 66 assert.strictEqual(child.status, 0); 67} 68