feat(platform-server): add API to render Module and ModuleFactory to string (#14381)
- PlatformState provides an interface to serialize the current Platform State as a string or Document. - renderModule and renderModuleFactory are convenience methods to wait for Angular Application to stabilize and then render the state to a string. - refactor code to remove defaultDoc from DomAdapter and inject DOCUMENT where it's needed.
This commit is contained in:
@ -223,7 +223,7 @@ function _extractToken(
|
||||
|
||||
if (!Array.isArray(metadata)) {
|
||||
if (metadata instanceof Inject) {
|
||||
return _createDependency(metadata.token, optional, null);
|
||||
return _createDependency(metadata['token'], optional, null);
|
||||
} else {
|
||||
return _createDependency(metadata, optional, null);
|
||||
}
|
||||
@ -238,7 +238,7 @@ function _extractToken(
|
||||
token = paramMetadata;
|
||||
|
||||
} else if (paramMetadata instanceof Inject) {
|
||||
token = paramMetadata.token;
|
||||
token = paramMetadata['token'];
|
||||
|
||||
} else if (paramMetadata instanceof Optional) {
|
||||
optional = true;
|
||||
|
@ -12,6 +12,11 @@ import {el, stringifyElement} from '@angular/platform-browser/testing/browser_ut
|
||||
|
||||
export function main() {
|
||||
describe('dom adapter', () => {
|
||||
let defaultDoc: any;
|
||||
beforeEach(() => {
|
||||
defaultDoc = getDOM().supportsDOMEvents() ? document : getDOM().createHtmlDocument();
|
||||
});
|
||||
|
||||
it('should not coalesque text nodes', () => {
|
||||
const el1 = el('<div>a</div>');
|
||||
const el2 = el('<div>b</div>');
|
||||
@ -68,15 +73,15 @@ export function main() {
|
||||
beforeEach(() => getDOM().resetBaseElement());
|
||||
|
||||
it('should return null if base element is absent',
|
||||
() => { expect(getDOM().getBaseHref()).toBeNull(); });
|
||||
() => { expect(getDOM().getBaseHref(defaultDoc)).toBeNull(); });
|
||||
|
||||
it('should return the value of the base element', () => {
|
||||
const baseEl = getDOM().createElement('base');
|
||||
getDOM().setAttribute(baseEl, 'href', '/drop/bass/connon/');
|
||||
const headEl = getDOM().defaultDoc().head;
|
||||
const headEl = defaultDoc.head;
|
||||
getDOM().appendChild(headEl, baseEl);
|
||||
|
||||
const baseHref = getDOM().getBaseHref();
|
||||
const baseHref = getDOM().getBaseHref(defaultDoc);
|
||||
getDOM().removeChild(headEl, baseEl);
|
||||
getDOM().resetBaseElement();
|
||||
|
||||
@ -86,10 +91,10 @@ export function main() {
|
||||
it('should return a relative url', () => {
|
||||
const baseEl = getDOM().createElement('base');
|
||||
getDOM().setAttribute(baseEl, 'href', 'base');
|
||||
const headEl = getDOM().defaultDoc().head;
|
||||
const headEl = defaultDoc.head;
|
||||
getDOM().appendChild(headEl, baseEl);
|
||||
|
||||
const baseHref = getDOM().getBaseHref();
|
||||
const baseHref = getDOM().getBaseHref(defaultDoc);
|
||||
getDOM().removeChild(headEl, baseEl);
|
||||
getDOM().resetBaseElement();
|
||||
|
||||
|
@ -21,6 +21,7 @@ import {Attribute, Component, ContentChildren, Directive, HostBinding, HostListe
|
||||
import {Renderer} from '@angular/core/src/render';
|
||||
import {TestBed, async, fakeAsync, getTestBed, tick} from '@angular/core/testing';
|
||||
import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
|
||||
import {DOCUMENT} from '@angular/platform-browser/src/dom/dom_tokens';
|
||||
import {dispatchEvent, el} from '@angular/platform-browser/testing/browser_util';
|
||||
import {expect} from '@angular/platform-browser/testing/matchers';
|
||||
|
||||
@ -838,19 +839,20 @@ function declareTests({useJit, viewEngine}: {useJit: boolean, viewEngine: boolea
|
||||
const template = '<div listener></div>';
|
||||
TestBed.overrideComponent(MyComp, {set: {template}});
|
||||
const fixture = TestBed.createComponent(MyComp);
|
||||
const doc = TestBed.get(DOCUMENT);
|
||||
|
||||
const tc = fixture.debugElement.children[0];
|
||||
const listener = tc.injector.get(DirectiveListeningDomEvent);
|
||||
dispatchEvent(getDOM().getGlobalEventTarget('window'), 'domEvent');
|
||||
dispatchEvent(getDOM().getGlobalEventTarget(doc, 'window'), 'domEvent');
|
||||
expect(listener.eventTypes).toEqual(['window_domEvent']);
|
||||
|
||||
listener.eventTypes = [];
|
||||
dispatchEvent(getDOM().getGlobalEventTarget('document'), 'domEvent');
|
||||
dispatchEvent(getDOM().getGlobalEventTarget(doc, 'document'), 'domEvent');
|
||||
expect(listener.eventTypes).toEqual(['document_domEvent', 'window_domEvent']);
|
||||
|
||||
fixture.destroy();
|
||||
listener.eventTypes = [];
|
||||
dispatchEvent(getDOM().getGlobalEventTarget('body'), 'domEvent');
|
||||
dispatchEvent(getDOM().getGlobalEventTarget(doc, 'body'), 'domEvent');
|
||||
expect(listener.eventTypes).toEqual([]);
|
||||
});
|
||||
|
||||
@ -990,6 +992,7 @@ function declareTests({useJit, viewEngine}: {useJit: boolean, viewEngine: boolea
|
||||
const template = '<div *ngIf="ctxBoolProp" listener listenerother></div>';
|
||||
TestBed.overrideComponent(MyComp, {set: {template}});
|
||||
const fixture = TestBed.createComponent(MyComp);
|
||||
const doc = TestBed.get(DOCUMENT);
|
||||
|
||||
globalCounter = 0;
|
||||
fixture.componentInstance.ctxBoolProp = true;
|
||||
@ -999,7 +1002,7 @@ function declareTests({useJit, viewEngine}: {useJit: boolean, viewEngine: boolea
|
||||
|
||||
const listener = tc.injector.get(DirectiveListeningDomEvent);
|
||||
const listenerother = tc.injector.get(DirectiveListeningDomEventOther);
|
||||
dispatchEvent(getDOM().getGlobalEventTarget('window'), 'domEvent');
|
||||
dispatchEvent(getDOM().getGlobalEventTarget(doc, 'window'), 'domEvent');
|
||||
expect(listener.eventTypes).toEqual(['window_domEvent']);
|
||||
expect(listenerother.eventType).toEqual('other_domEvent');
|
||||
expect(globalCounter).toEqual(1);
|
||||
@ -1007,12 +1010,12 @@ function declareTests({useJit, viewEngine}: {useJit: boolean, viewEngine: boolea
|
||||
|
||||
fixture.componentInstance.ctxBoolProp = false;
|
||||
fixture.detectChanges();
|
||||
dispatchEvent(getDOM().getGlobalEventTarget('window'), 'domEvent');
|
||||
dispatchEvent(getDOM().getGlobalEventTarget(doc, 'window'), 'domEvent');
|
||||
expect(globalCounter).toEqual(1);
|
||||
|
||||
fixture.componentInstance.ctxBoolProp = true;
|
||||
fixture.detectChanges();
|
||||
dispatchEvent(getDOM().getGlobalEventTarget('window'), 'domEvent');
|
||||
dispatchEvent(getDOM().getGlobalEventTarget(doc, 'window'), 'domEvent');
|
||||
expect(globalCounter).toEqual(2);
|
||||
|
||||
// need to destroy to release all remaining global event listeners
|
||||
|
Reference in New Issue
Block a user