build(aio): move doc-gen stuff from angular.io (#14097)
This commit is contained in:

committed by
Igor Minar

parent
d1d0ce7613
commit
b7763559cd
193
tools/docs/examples-package/processors/collect-examples.spec.js
Normal file
193
tools/docs/examples-package/processors/collect-examples.spec.js
Normal file
@ -0,0 +1,193 @@
|
||||
var testPackage = require('../../helpers/test-package');
|
||||
var Dgeni = require('dgeni');
|
||||
var path = require('path');
|
||||
|
||||
describe('collectExampleRegions processor', () => {
|
||||
var injector, processor, exampleMap, regionParser;
|
||||
|
||||
beforeEach(function() {
|
||||
|
||||
regionParser = jasmine.createSpy('regionParser').and.callFake(function(contents, extension) {
|
||||
return { contents: 'PARSED:' + contents, regions: {dummy: extension} }
|
||||
});
|
||||
|
||||
const dgeni =
|
||||
new Dgeni([testPackage('examples-package', true).factory('regionParser', function() {
|
||||
return regionParser;
|
||||
})]);
|
||||
|
||||
injector = dgeni.configureInjector();
|
||||
exampleMap = injector.get('exampleMap');
|
||||
processor = injector.get('collectExamples');
|
||||
|
||||
processor.exampleFolders = ['examples-1', 'examples-2'];
|
||||
});
|
||||
|
||||
it('should identify example files that are in the exampleFolders', () => {
|
||||
const docs = [
|
||||
createDoc('A', 'examples-1/x/app.js'), createDoc('B', 'examples-1/y/index.html'),
|
||||
createDoc('C', 'examples-2/s/app.js'), createDoc('D', 'examples-2/t/style.css'),
|
||||
createDoc('E', 'other/b/c.js')
|
||||
];
|
||||
|
||||
processor.$process(docs);
|
||||
|
||||
expect(exampleMap['examples-1']['x/app.js']).toBeDefined();
|
||||
expect(exampleMap['examples-1']['y/index.html']).toBeDefined();
|
||||
expect(exampleMap['examples-2']['s/app.js']).toBeDefined();
|
||||
expect(exampleMap['examples-2']['t/style.css']).toBeDefined();
|
||||
|
||||
expect(exampleMap['other']).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should remove example files from the docs collection', () => {
|
||||
const docs = [
|
||||
createDoc('Example A', 'examples-1/x/app.js'),
|
||||
createDoc('Example B', 'examples-1/y/index.html'),
|
||||
createDoc('Other doc 1', 'examples-2/t/style.css', 'content'),
|
||||
createDoc('Example C', 'examples-2/s/app.js'),
|
||||
createDoc('Other doc 2', 'other/b/c.js', 'content')
|
||||
];
|
||||
|
||||
const processedDocs = processor.$process(docs);
|
||||
|
||||
expect(processedDocs.filter(doc => doc.docType === 'example-file')).toEqual([]);
|
||||
});
|
||||
|
||||
it('should not remove docs from the docs collection that are not example files', () => {
|
||||
const docs = [
|
||||
createDoc('Example A', 'examples-1/x/app.js'),
|
||||
createDoc('Example B', 'examples-1/y/index.html'),
|
||||
createDoc('Other doc 1', 'examples-2/t/style.css', 'content'),
|
||||
createDoc('Example C', 'examples-2/s/app.js'),
|
||||
createDoc('Other doc 2', 'other/b/c.js', 'content')
|
||||
];
|
||||
|
||||
const processedDocs = processor.$process(docs);
|
||||
|
||||
expect(processedDocs.filter(doc => doc.docType !== 'example-file'))
|
||||
.toEqual(jasmine.objectContaining([
|
||||
createDoc('Other doc 1', 'examples-2/t/style.css', 'content'),
|
||||
createDoc('Other doc 2', 'other/b/c.js', 'content')
|
||||
]));
|
||||
});
|
||||
|
||||
it('should call `regionParser` from with the content and file extension of each example doc',
|
||||
() => {
|
||||
const docs = [
|
||||
createDoc('Example A', 'examples-1/x/app.js'),
|
||||
createDoc('Example B', 'examples-1/y/index.html'),
|
||||
createDoc('Other doc 1', 'examples-2/t/style.css', 'content'),
|
||||
createDoc('Example C', 'examples-2/s/app.js'),
|
||||
createDoc('Other doc 2', 'other/b/c.js', 'content')
|
||||
];
|
||||
|
||||
const processedDocs = processor.$process(docs);
|
||||
|
||||
expect(regionParser).toHaveBeenCalledTimes(3);
|
||||
expect(regionParser).toHaveBeenCalledWith('Example A', 'js');
|
||||
expect(regionParser).toHaveBeenCalledWith('Example B', 'html');
|
||||
expect(regionParser).toHaveBeenCalledWith('Example C', 'js');
|
||||
});
|
||||
|
||||
|
||||
it('should attach parsed content as renderedContent to the example file docs', () => {
|
||||
const docs = [
|
||||
createDoc('A', 'examples-1/x/app.js'),
|
||||
createDoc('B', 'examples-1/y/index.html'),
|
||||
createDoc('C', 'examples-2/s/app.js'),
|
||||
createDoc('D', 'examples-2/t/style.css'),
|
||||
];
|
||||
|
||||
processor.$process(docs);
|
||||
|
||||
expect(exampleMap['examples-1']['x/app.js'].renderedContent).toEqual('PARSED:A');
|
||||
expect(exampleMap['examples-1']['y/index.html'].renderedContent).toEqual('PARSED:B');
|
||||
expect(exampleMap['examples-2']['s/app.js'].renderedContent).toEqual('PARSED:C');
|
||||
expect(exampleMap['examples-2']['t/style.css'].renderedContent).toEqual('PARSED:D');
|
||||
|
||||
});
|
||||
|
||||
it('should create region docs for each region in the example file docs', () => {
|
||||
const docs = [
|
||||
createDoc('/* #docregion X */\nA', 'examples-1/x/app.js'),
|
||||
createDoc('<!-- #docregion Y -->\nB', 'examples-1/y/index.html'),
|
||||
createDoc('/* #docregion Z */\nC', 'examples-2/t/style.css'),
|
||||
];
|
||||
|
||||
const newDocs = processor.$process(docs);
|
||||
|
||||
expect(newDocs.length).toEqual(3);
|
||||
expect(newDocs).toEqual([
|
||||
jasmine.objectContaining({
|
||||
docType: 'example-region',
|
||||
name: 'dummy',
|
||||
id: 'examples-1/x/app.js#dummy',
|
||||
contents: 'js'
|
||||
}),
|
||||
jasmine.objectContaining({
|
||||
docType: 'example-region',
|
||||
name: 'dummy',
|
||||
id: 'examples-1/y/index.html#dummy',
|
||||
contents: 'html'
|
||||
}),
|
||||
jasmine.objectContaining({
|
||||
docType: 'example-region',
|
||||
name: 'dummy',
|
||||
id: 'examples-2/t/style.css#dummy',
|
||||
contents: 'css'
|
||||
})
|
||||
]);
|
||||
});
|
||||
|
||||
it('should attach region docs to the example file docs', () => {
|
||||
const docs = [
|
||||
createDoc('/* #docregion X */\nA', 'examples-1/x/app.js'),
|
||||
createDoc('<!-- #docregion Y -->\nB', 'examples-1/y/index.html'),
|
||||
createDoc('/* #docregion Z */\nC', 'examples-2/t/style.css'),
|
||||
];
|
||||
|
||||
processor.$process(docs);
|
||||
|
||||
expect(exampleMap['examples-1']['x/app.js'].regions).toEqual({
|
||||
dummy: {
|
||||
docType: 'example-region',
|
||||
path: 'examples-1/x/app.js',
|
||||
name: 'dummy',
|
||||
id: 'examples-1/x/app.js#dummy',
|
||||
aliases: ['examples-1/x/app.js#dummy'],
|
||||
contents: 'js'
|
||||
}
|
||||
});
|
||||
expect(exampleMap['examples-1']['y/index.html'].regions).toEqual({
|
||||
dummy: {
|
||||
docType: 'example-region',
|
||||
path: 'examples-1/y/index.html',
|
||||
name: 'dummy',
|
||||
id: 'examples-1/y/index.html#dummy',
|
||||
aliases: ['examples-1/y/index.html#dummy'],
|
||||
contents: 'html'
|
||||
}
|
||||
});
|
||||
expect(exampleMap['examples-2']['t/style.css'].regions).toEqual({
|
||||
dummy: {
|
||||
docType: 'example-region',
|
||||
path: 'examples-2/t/style.css',
|
||||
name: 'dummy',
|
||||
id: 'examples-2/t/style.css#dummy',
|
||||
aliases: ['examples-2/t/style.css#dummy'],
|
||||
contents: 'css'
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
function createDoc(content, relativePath, docType) {
|
||||
return {
|
||||
fileInfo: {relativePath: relativePath, extension: path.extname(relativePath).substr(1)},
|
||||
content: content,
|
||||
docType: docType || 'example-file',
|
||||
startingLine: 1
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user