Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
src/generators/api-links/test/fixtures/
3 changes: 3 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,7 @@ export default [
// @see https://eslint.org/docs/latest/rules to learn more about these rules
pluginJs.configs.recommended,
eslintConfigPrettier,
{
ignores: ['src/generators/api-links/test/fixtures/**'],
},
];
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"url": "git+https://github.com/nodejs/api-docs-tooling.git"
},
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint --fix .",
"lint": "eslint . --no-warn-ignored",
"lint:fix": "eslint --fix . --no-warn-ignored",
"format": "prettier .",
"format:write": "prettier --write .",
"test": "node --test",
Expand Down
47 changes: 47 additions & 0 deletions src/generators/api-links/test/fixtures.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { equal, notStrictEqual, ok } from 'node:assert';
import { describe, it } from 'node:test';
import { readFile, readdir } from 'node:fs/promises';
import { basename, extname, join } from 'node:path';
import astJs from '../../ast-js/index.mjs';
import apiLinks from '../index.mjs';

const FIXTURES_DIRECTORY = join(import.meta.dirname, 'fixtures');
const fixtures = await readdir(FIXTURES_DIRECTORY);

const sourceFiles = fixtures
.filter(fixture => extname(fixture) === '.js')
.map(fixture => join(FIXTURES_DIRECTORY, fixture));

describe('api links', () => {
describe('should work correctly for all fixtures', () => {
sourceFiles.forEach(sourceFile => {
it(`${basename(sourceFile)}`, async () => {
const astJsResult = await astJs.generate(undefined, {
input: [sourceFile],
});

const actualOutput = await apiLinks.generate(astJsResult, {});

const expectedOutput = JSON.parse(
await readFile(sourceFile.replace('.js', '.json'), 'utf8')
);
Comment thread
AugustinMauroy marked this conversation as resolved.
Outdated

for (const [k, v] of Object.entries(expectedOutput)) {
notStrictEqual(actualOutput[k], undefined, `missing ${k}`);
ok(
actualOutput[k].endsWith(`/${v}`),
`expected ${v}, got ${actualOutput[k]}`
);

delete actualOutput[k];
}

equal(
Object.keys(actualOutput).length,
0,
'actual output has extra keys'
);
});
});
});
});
12 changes: 12 additions & 0 deletions src/generators/api-links/test/fixtures/buffer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use strict';

// Buffer instance methods are exported as 'buf'.

function Buffer() {
}

Buffer.prototype.instanceMethod = function() {}

module.exports = {
Buffer
};
4 changes: 4 additions & 0 deletions src/generators/api-links/test/fixtures/buffer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"buffer.Buffer": "buffer.js#L5",
"buf.instanceMethod": "buffer.js#L8"
}
12 changes: 12 additions & 0 deletions src/generators/api-links/test/fixtures/class.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use strict';

// An exported class using ES2015 class syntax.

class Class {
constructor() {};
method() {};
}

module.exports = {
Class
};
5 changes: 5 additions & 0 deletions src/generators/api-links/test/fixtures/class.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"Class": "class.js#L5",
"new Class": "class.js#L6",
"class.method": "class.js#L7"
}
13 changes: 13 additions & 0 deletions src/generators/api-links/test/fixtures/exports.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'use strict';

// Support `exports` as an alternative to `module.exports`.

function Buffer() {};

exports.Buffer = Buffer;
exports.fn1 = function fn1() {};

var fn2 = exports.fn2 = function() {};

function fn3() {};
exports.fn3 = fn3;
6 changes: 6 additions & 0 deletions src/generators/api-links/test/fixtures/exports.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"exports.Buffer": "exports.js#L5",
"exports.fn1": "exports.js#L8",
"exports.fn2": "exports.js#L10",
"exports.fn3": "exports.js#L12"
}
11 changes: 11 additions & 0 deletions src/generators/api-links/test/fixtures/mod.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict';

// A module may export one or more methods.

function foo() {
}


module.exports = {
foo
};
3 changes: 3 additions & 0 deletions src/generators/api-links/test/fixtures/mod.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"mod.foo": "mod.js#L5"
}
13 changes: 13 additions & 0 deletions src/generators/api-links/test/fixtures/prototype.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'use strict';

// An exported class using classic prototype syntax.

function Class() {
}

Class.classMethod = function() {}
Class.prototype.instanceMethod = function() {}

module.exports = {
Class
};
5 changes: 5 additions & 0 deletions src/generators/api-links/test/fixtures/prototype.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"prototype.Class": "prototype.js#L5",
"Class.classMethod": "prototype.js#L8",
"class.instanceMethod": "prototype.js#L9"
}
13 changes: 13 additions & 0 deletions src/generators/api-links/test/fixtures/reverse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'use strict';

// Parallel assignment to the exported variable and module.exports.

function ok() {
}

const asserts = module.exports = ok;

asserts.ok = ok;

asserts.strictEqual = function() {
}
5 changes: 5 additions & 0 deletions src/generators/api-links/test/fixtures/reverse.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"asserts": "reverse.js#L8",
"asserts.ok": "reverse.js#L5",
"asserts.strictEqual": "reverse.js#L12"
}
10 changes: 10 additions & 0 deletions src/generators/api-links/test/fixtures/root.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
'use strict';

// Set root member
let foo = true;
foo = false;

// Return outside of function
if (!foo) {
return;
}
2 changes: 2 additions & 0 deletions src/generators/api-links/test/fixtures/root.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
2 changes: 1 addition & 1 deletion src/generators/api-links/utils/extractExports.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ function handleVariableDeclaration(node, basename, nameToLineNumberMap) {
switch (lhs.object.name) {
case 'exports': {
nameToLineNumberMap[`${basename}.${lhs.property.name}`] =
node.start.line;
node.loc.start.line;

break;
}
Expand Down