@microsoft/api-extractor
Version:
Validatation, documentation, and auditing for the exported API of a TypeScript package
104 lines (102 loc) • 4.93 kB
JavaScript
/// <reference types="mocha" />
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var chai_1 = require("chai");
var ts = require("typescript");
var fsx = require("fs-extra");
var path = require("path");
var Extractor_1 = require("../../Extractor");
var ApiFileGenerator_1 = require("../../generators/ApiFileGenerator");
/* tslint:disable:no-function-expression - Mocha uses a poorly scoped "this" pointer */
function assertFileMatchesExpected(actualFilename, expectedFilename) {
var actualContent = fsx.readFileSync(actualFilename).toString('utf8');
var expectedContent = fsx.readFileSync(expectedFilename).toString('utf8');
chai_1.assert(ApiFileGenerator_1.default.areEquivalentApiFileContents(actualContent, expectedContent), 'The file content does not match the expected value:'
+ '\nEXPECTED: ' + expectedFilename
+ '\nACTUAL: ' + actualFilename);
}
var capturedErrors = [];
function testErrorHandler(message, fileName, lineNumber) {
capturedErrors.push({ message: message, fileName: fileName, lineNumber: lineNumber });
}
describe('ApiFileGenerator tests', function () {
this.timeout(10000);
describe('Basic Tests', function () {
it('Example 1', function () {
var inputFolder = './testInputs/example1';
var outputFile = './lib/example1-output.ts';
var expectedFile = path.join(inputFolder, 'example1-output.ts');
var compilerOptions = {
target: ts.ScriptTarget.ES5,
module: ts.ModuleKind.CommonJS,
moduleResolution: ts.ModuleResolutionKind.NodeJs,
rootDir: inputFolder,
typeRoots: ['./'] // We need to ignore @types in these tests
};
var extractor = new Extractor_1.default({
compilerOptions: compilerOptions,
errorHandler: testErrorHandler
});
extractor.analyze({
entryPointFile: path.join(inputFolder, 'index.ts')
});
var apiFileGenerator = new ApiFileGenerator_1.default();
apiFileGenerator.writeApiFile(outputFile, extractor);
assertFileMatchesExpected(outputFile, expectedFile);
/**
* Errors can be found in testInputs/folder/MyClass
*/
chai_1.assert.equal(capturedErrors.length, 2);
chai_1.assert.equal(capturedErrors[0].message, 'Unknown JSDoc tag "@badjsdoctag"');
chai_1.assert.equal(capturedErrors[1].message, 'Unexpected text in JSDoc comment: '
+ '"(Error #1 is the bad tag) Text can no..."');
});
it('Example 2', function () {
var inputFolder = './testInputs/example2';
var outputFile = './lib/example2-output.api.ts';
var expectedFile = path.join(inputFolder, 'example2-output.api.ts');
var compilerOptions = {
target: ts.ScriptTarget.ES5,
module: ts.ModuleKind.CommonJS,
moduleResolution: ts.ModuleResolutionKind.NodeJs,
rootDir: inputFolder,
typeRoots: ['./'] // We need to ignore @types in these tests
};
var extractor = new Extractor_1.default({
compilerOptions: compilerOptions,
errorHandler: testErrorHandler
});
extractor.analyze({
entryPointFile: path.join(inputFolder, 'src/index.ts')
});
var apiFileGenerator = new ApiFileGenerator_1.default();
apiFileGenerator.writeApiFile(outputFile, extractor);
assertFileMatchesExpected(outputFile, expectedFile);
});
it('Example 4', function () {
capturedErrors = [];
var inputFolder = './testInputs/example4';
var outputFile = './lib/example4-output.api.ts';
var expectedFile = path.join(inputFolder, 'example4-output.api.ts');
var compilerOptions = {
target: ts.ScriptTarget.ES5,
module: ts.ModuleKind.CommonJS,
moduleResolution: ts.ModuleResolutionKind.NodeJs,
rootDir: inputFolder,
typeRoots: ['./'] // We need to ignore @types in these tests
};
var extractor = new Extractor_1.default({
compilerOptions: compilerOptions,
errorHandler: testErrorHandler
});
extractor.analyze({
entryPointFile: path.join(inputFolder, 'src/index.ts')
});
var apiFileGenerator = new ApiFileGenerator_1.default();
apiFileGenerator.writeApiFile(outputFile, extractor);
assertFileMatchesExpected(outputFile, expectedFile);
chai_1.assert.equal(capturedErrors.length, 0);
});
});
});
//# sourceMappingURL=ApiFileGenerator.test.js.map