| 'use strict'; |
| |
| const common = require('../common'); |
| |
| const { |
| generateSEA, |
| skipIfSingleExecutableIsNotSupported, |
| } = require('../common/sea'); |
| |
| skipIfSingleExecutableIsNotSupported(); |
| |
| // This tests the snapshot support in single executable applications. |
| const tmpdir = require('../common/tmpdir'); |
| |
| const { copyFileSync, writeFileSync, existsSync } = require('fs'); |
| const { |
| spawnSyncAndAssert, |
| spawnSyncAndExit, |
| spawnSyncAndExitWithoutError, |
| } = require('../common/child_process'); |
| const assert = require('assert'); |
| const fixtures = require('../common/fixtures'); |
| |
| tmpdir.refresh(); |
| if (!tmpdir.hasEnoughSpace(120 * 1024 * 1024)) { |
| common.skip('Not enough disk space'); |
| } |
| |
| const configFile = tmpdir.resolve('sea-config.json'); |
| const seaPrepBlob = tmpdir.resolve('sea-prep.blob'); |
| const outputFile = tmpdir.resolve(process.platform === 'win32' ? 'sea.exe' : 'sea'); |
| |
| { |
| tmpdir.refresh(); |
| copyFileSync(fixtures.path('sea', 'get-asset.js'), tmpdir.resolve('sea.js')); |
| writeFileSync(configFile, ` |
| { |
| "main": "sea.js", |
| "output": "sea-prep.blob", |
| "assets": "invalid" |
| } |
| `); |
| |
| spawnSyncAndExit( |
| process.execPath, |
| ['--experimental-sea-config', 'sea-config.json'], |
| { |
| cwd: tmpdir.path |
| }, |
| { |
| status: 1, |
| signal: null, |
| stderr: /"assets" field of sea-config\.json is not a map of strings/ |
| }); |
| } |
| |
| { |
| tmpdir.refresh(); |
| copyFileSync(fixtures.path('sea', 'get-asset.js'), tmpdir.resolve('sea.js')); |
| writeFileSync(configFile, ` |
| { |
| "main": "sea.js", |
| "output": "sea-prep.blob", |
| "assets": { |
| "nonexistent": "nonexistent.txt" |
| } |
| } |
| `); |
| |
| spawnSyncAndExit( |
| process.execPath, |
| ['--experimental-sea-config', 'sea-config.json'], |
| { |
| cwd: tmpdir.path |
| }, |
| { |
| status: 1, |
| signal: null, |
| stderr: /Cannot read asset nonexistent\.txt: no such file or directory/ |
| }); |
| } |
| |
| { |
| tmpdir.refresh(); |
| copyFileSync(fixtures.path('sea', 'get-asset.js'), tmpdir.resolve('sea.js')); |
| copyFileSync(fixtures.utf8TestTextPath, tmpdir.resolve('utf8_test_text.txt')); |
| copyFileSync(fixtures.path('person.jpg'), tmpdir.resolve('person.jpg')); |
| writeFileSync(configFile, ` |
| { |
| "main": "sea.js", |
| "output": "sea-prep.blob", |
| "assets": { |
| "utf8_test_text.txt": "utf8_test_text.txt", |
| "person.jpg": "person.jpg" |
| } |
| } |
| `, 'utf8'); |
| |
| spawnSyncAndExitWithoutError( |
| process.execPath, |
| ['--experimental-sea-config', 'sea-config.json'], |
| { |
| env: { |
| NODE_DEBUG_NATIVE: 'SEA', |
| ...process.env, |
| }, |
| cwd: tmpdir.path |
| }); |
| |
| assert(existsSync(seaPrepBlob)); |
| |
| generateSEA(outputFile, process.execPath, seaPrepBlob); |
| |
| spawnSyncAndAssert( |
| outputFile, |
| { |
| env: { |
| ...process.env, |
| NODE_DEBUG_NATIVE: 'SEA', |
| __TEST_PERSON_JPG: fixtures.path('person.jpg'), |
| __TEST_UTF8_TEXT_PATH: fixtures.path('utf8_test_text.txt'), |
| } |
| }, |
| { |
| trim: true, |
| stdout: fixtures.utf8TestText, |
| } |
| ); |
| } |