'use strict'; // This tests snapshot JS API using the example in the docs. require('../common'); const assert = require('assert'); const tmpdir = require('../common/tmpdir'); const fixtures = require('../common/fixtures'); const { spawnSyncAndAssert, spawnSyncAndExitWithoutError } = require('../common/child_process'); const fs = require('fs'); const v8 = require('v8'); // By default it should be false. We'll test that it's true in snapshot // building mode in the fixture. assert(!v8.startupSnapshot.isBuildingSnapshot()); tmpdir.refresh(); const blobPath = tmpdir.resolve('snapshot.blob'); const entry = fixtures.path('snapshot', 'v8-startup-snapshot-api.js'); { for (const book of [ 'book1.en_US.txt', 'book1.es_ES.txt', 'book2.zh_CN.txt', ]) { const content = `This is ${book}`; fs.writeFileSync(tmpdir.resolve(book), content, 'utf8'); } fs.copyFileSync(entry, tmpdir.resolve('entry.js')); spawnSyncAndExitWithoutError(process.execPath, [ '--snapshot-blob', blobPath, '--build-snapshot', 'entry.js', ], { cwd: tmpdir.path }); const stats = fs.statSync(tmpdir.resolve('snapshot.blob')); assert(stats.isFile()); } { spawnSyncAndAssert(process.execPath, [ '--snapshot-blob', blobPath, 'book1', ], { cwd: tmpdir.path, env: { ...process.env, BOOK_LANG: 'en_US', } }, { stderr: 'Reading book1.en_US.txt', stdout: 'This is book1.en_US.txt', trim: true }); }