1'use strict'; 2 3require('../common'); 4const fixtures = require('../common/fixtures'); 5const tmpdir = require('../common/tmpdir'); 6const fs = require('fs'); 7const assert = require('assert'); 8const path = require('path'); 9const { execFileSync } = require('child_process'); 10 11const script = path.join(__dirname, '..', '..', 'tools', 'doc', 'apilinks.js'); 12const apilinks = fixtures.path('apilinks'); 13 14tmpdir.refresh(); 15 16fs.readdirSync(apilinks).forEach((fixture) => { 17 if (!fixture.endsWith('.js')) return; 18 const input = path.join(apilinks, fixture); 19 20 const expectedContent = fs.readFileSync(`${input}on`, 'utf8'); 21 const outputPath = path.join(tmpdir.path, `${fixture}on`); 22 execFileSync( 23 process.execPath, 24 [script, outputPath, input], 25 { encoding: 'utf-8' } 26 ); 27 28 const expectedLinks = JSON.parse(expectedContent); 29 const actualLinks = JSON.parse(fs.readFileSync(outputPath)); 30 31 for (const [k, v] of Object.entries(expectedLinks)) { 32 assert.ok(k in actualLinks, `link not found: ${k}`); 33 assert.ok(actualLinks[k].endsWith('/' + v), 34 `link ${actualLinks[k]} expected to end with ${v}`); 35 delete actualLinks[k]; 36 } 37 38 assert.strictEqual( 39 Object.keys(actualLinks).length, 0, 40 `unexpected links returned ${JSON.stringify(actualLinks)}` 41 ); 42}); 43