build(aio): add new post-process dgeni package
This package will allow us to do complex post-processing on the HTML that is rendered by Nunjucks.
This commit is contained in:

committed by
Miško Hevery

parent
fbde2a8010
commit
1ceb2f9c79
@ -0,0 +1,62 @@
|
||||
const testPackage = require('../../helpers/test-package');
|
||||
const Dgeni = require('dgeni');
|
||||
|
||||
describe('postProcessHtml', function() {
|
||||
let dgeni, injector, processor;
|
||||
|
||||
beforeEach(function() {
|
||||
dgeni = new Dgeni([testPackage('post-process-package', true)]);
|
||||
injector = dgeni.configureInjector();
|
||||
processor = injector.get('postProcessHtml');
|
||||
processor.docTypes = ['a', 'b'];
|
||||
});
|
||||
|
||||
it('should be available from the injector', () => {
|
||||
expect(processor).toBeDefined();
|
||||
});
|
||||
|
||||
it('should only process docs that match the specified docTypes', () => {
|
||||
const elements = [];
|
||||
const captureFirstElement = ast => {
|
||||
elements.push(ast.children[0].tagName);
|
||||
};
|
||||
processor.plugins = [() => captureFirstElement];
|
||||
|
||||
const docs = [
|
||||
{ docType: 'a', renderedContent: '<a></a>' },
|
||||
{ docType: 'b', renderedContent: '<b></b>' },
|
||||
{ docType: 'c', renderedContent: '<c></c>' },
|
||||
{ docType: 'd', renderedContent: '<d></d>' },
|
||||
];
|
||||
processor.$process(docs);
|
||||
expect(elements).toEqual(['a', 'b']);
|
||||
});
|
||||
|
||||
it('should run all the plugins on each doc', () => {
|
||||
const capitalizeFirstElement = ast => {
|
||||
ast.children[0].tagName = ast.children[0].tagName.toUpperCase();
|
||||
};
|
||||
const addOneToFirstElement = ast => {
|
||||
ast.children[0].tagName = ast.children[0].tagName + '1';
|
||||
};
|
||||
const elements = [];
|
||||
const captureFirstElement = ast => {
|
||||
elements.push(ast.children[0].tagName);
|
||||
};
|
||||
|
||||
const docs = [
|
||||
{ docType: 'a', renderedContent: '<a></a>' },
|
||||
{ docType: 'b', renderedContent: '<b></b>' },
|
||||
{ docType: 'c', renderedContent: '<c></c>' },
|
||||
{ docType: 'd', renderedContent: '<d></d>' },
|
||||
];
|
||||
|
||||
processor.plugins = [
|
||||
() => capitalizeFirstElement,
|
||||
() => addOneToFirstElement,
|
||||
() => captureFirstElement
|
||||
];
|
||||
processor.$process(docs);
|
||||
expect(elements).toEqual(['A1', 'B1']);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user