feat(core): speed up view creation via code gen for view factories.
BREAKING CHANGE: - Platform pipes can only contain types and arrays of types, but no bindings any more. - When using transformers, platform pipes need to be specified explicitly in the pubspec.yaml via the new config option `platform_pipes`. - `Compiler.compileInHost` now returns a `HostViewFactoryRef` - Component view is not yet created when component constructor is called. -> use `onInit` lifecycle callback to access the view of a component - `ViewRef#setLocal` has been moved to new type `EmbeddedViewRef` - `internalView` is gone, use `EmbeddedViewRef.rootNodes` to access the root nodes of an embedded view - `renderer.setElementProperty`, `..setElementStyle`, `..setElementAttribute` now take a native element instead of an ElementRef - `Renderer` interface now operates on plain native nodes, instead of `RenderElementRef`s or `RenderViewRef`s Closes #5993
This commit is contained in:
@@ -1,56 +0,0 @@
|
||||
import {
|
||||
AsyncTestCompleter,
|
||||
inject,
|
||||
describe,
|
||||
ddescribe,
|
||||
beforeEach,
|
||||
it,
|
||||
expect
|
||||
} from "angular2/testing_internal";
|
||||
import {RenderProtoViewRef} from "angular2/src/core/render/api";
|
||||
import {RenderProtoViewRefStore} from "angular2/src/web_workers/shared/render_proto_view_ref_store";
|
||||
import {
|
||||
WebWorkerRenderProtoViewRef
|
||||
} from "angular2/src/web_workers/shared/render_proto_view_ref_store";
|
||||
|
||||
export function main() {
|
||||
describe("RenderProtoViewRefStore", () => {
|
||||
describe("on WebWorker", () => {
|
||||
var store: RenderProtoViewRefStore;
|
||||
beforeEach(() => { store = new RenderProtoViewRefStore(true); });
|
||||
|
||||
it("should allocate refs", () => {
|
||||
expect((<WebWorkerRenderProtoViewRef>store.allocate()).refNumber).toBe(0);
|
||||
expect((<WebWorkerRenderProtoViewRef>store.allocate()).refNumber).toBe(1);
|
||||
});
|
||||
|
||||
it("should be serializable", () => {
|
||||
var protoView = store.allocate();
|
||||
expect(store.deserialize(store.serialize(protoView))).toEqual(protoView);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe("on UI", () => {
|
||||
var store: RenderProtoViewRefStore;
|
||||
beforeEach(() => { store = new RenderProtoViewRefStore(false); });
|
||||
|
||||
it("should associate views with the correct references", () => {
|
||||
var renderProtoViewRef = new RenderProtoViewRef();
|
||||
|
||||
store.store(renderProtoViewRef, 100);
|
||||
expect(store.deserialize(100)).toBe(renderProtoViewRef);
|
||||
});
|
||||
|
||||
it("should be serializable", () => {
|
||||
var renderProtoViewRef = new RenderProtoViewRef();
|
||||
store.store(renderProtoViewRef, 0);
|
||||
|
||||
var deserialized = store.deserialize(store.serialize(renderProtoViewRef));
|
||||
expect(deserialized).toBe(renderProtoViewRef);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import {
|
||||
AsyncTestCompleter,
|
||||
inject,
|
||||
describe,
|
||||
ddescribe,
|
||||
beforeEach,
|
||||
it,
|
||||
expect
|
||||
} from "angular2/testing_internal";
|
||||
import {RenderStore} from "angular2/src/web_workers/shared/render_store";
|
||||
|
||||
export function main() {
|
||||
describe("RenderStoreSpec", () => {
|
||||
var store: RenderStore;
|
||||
beforeEach(() => { store = new RenderStore(); });
|
||||
|
||||
it('should allocate ids', () => {
|
||||
expect(store.allocateId()).toBe(0);
|
||||
expect(store.allocateId()).toBe(1);
|
||||
});
|
||||
|
||||
it('should serialize objects', () => {
|
||||
var id = store.allocateId();
|
||||
var obj = 'testObject';
|
||||
store.store(obj, id);
|
||||
expect(store.serialize(obj)).toBe(id);
|
||||
});
|
||||
|
||||
it('should deserialize objects', () => {
|
||||
var id = store.allocateId();
|
||||
var obj = 'testObject';
|
||||
store.store(obj, id);
|
||||
expect(store.deserialize(id)).toBe(obj);
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
@@ -1,144 +0,0 @@
|
||||
import {
|
||||
AsyncTestCompleter,
|
||||
beforeEach,
|
||||
inject,
|
||||
describe,
|
||||
it,
|
||||
expect
|
||||
} from "angular2/testing_internal";
|
||||
import {
|
||||
RenderViewWithFragments,
|
||||
RenderViewRef,
|
||||
RenderFragmentRef
|
||||
} from "angular2/src/core/render/api";
|
||||
import {
|
||||
RenderViewWithFragmentsStore,
|
||||
WebWorkerRenderViewRef,
|
||||
WebWorkerRenderFragmentRef
|
||||
} from "angular2/src/web_workers/shared/render_view_with_fragments_store";
|
||||
import {ListWrapper} from "angular2/src/facade/collection";
|
||||
|
||||
export function main() {
|
||||
describe("RenderViewWithFragmentsStore", () => {
|
||||
describe("on WebWorker", () => {
|
||||
var store: RenderViewWithFragmentsStore;
|
||||
beforeEach(() => { store = new RenderViewWithFragmentsStore(true); });
|
||||
|
||||
it("should allocate fragmentCount + 1 refs", () => {
|
||||
var view: RenderViewWithFragments = store.allocate(10);
|
||||
|
||||
var viewRef: WebWorkerRenderViewRef = <WebWorkerRenderViewRef>view.viewRef;
|
||||
expect(viewRef.refNumber).toEqual(0);
|
||||
|
||||
var fragmentRefs: WebWorkerRenderFragmentRef[] =
|
||||
<WebWorkerRenderFragmentRef[]>view.fragmentRefs;
|
||||
expect(fragmentRefs.length).toEqual(10);
|
||||
|
||||
for (var i = 0; i < fragmentRefs.length; i++) {
|
||||
expect(fragmentRefs[i].refNumber).toEqual(i + 1);
|
||||
}
|
||||
});
|
||||
|
||||
it("should not reuse a reference", () => {
|
||||
store.allocate(10);
|
||||
var view = store.allocate(0);
|
||||
var viewRef = <WebWorkerRenderViewRef>view.viewRef;
|
||||
expect(viewRef.refNumber).toEqual(11);
|
||||
});
|
||||
|
||||
it("should be serializable", () => {
|
||||
var view = store.allocate(1);
|
||||
expect(store.deserializeViewWithFragments(store.serializeViewWithFragments(view)))
|
||||
.toEqual(view);
|
||||
});
|
||||
|
||||
it("should remove a view and all attached fragments", () => {
|
||||
const NUM_FRAGMENTS = 5;
|
||||
var view = store.allocate(NUM_FRAGMENTS);
|
||||
var viewRef = (<WebWorkerRenderViewRef>view.viewRef).refNumber;
|
||||
store.remove(view.viewRef);
|
||||
|
||||
expect(store.deserializeRenderViewRef(viewRef++)).toBeNull();
|
||||
for (var i = 0; i < NUM_FRAGMENTS; i++) {
|
||||
expect(store.deserializeRenderFragmentRef(viewRef++)).toBeNull();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe("on UI", () => {
|
||||
var store: RenderViewWithFragmentsStore;
|
||||
beforeEach(() => { store = new RenderViewWithFragmentsStore(false); });
|
||||
function createMockRenderViewWithFragments(): RenderViewWithFragments {
|
||||
var view = new MockRenderViewRef();
|
||||
var fragments = ListWrapper.createGrowableSize(20);
|
||||
for (var i = 0; i < 20; i++) {
|
||||
fragments[i] = new MockRenderFragmentRef();
|
||||
}
|
||||
|
||||
return new RenderViewWithFragments(view, fragments);
|
||||
}
|
||||
it("should associate views with the correct references", () => {
|
||||
var renderViewWithFragments = createMockRenderViewWithFragments();
|
||||
|
||||
store.store(renderViewWithFragments, 100);
|
||||
expect(store.deserializeRenderViewRef(100)).toBe(renderViewWithFragments.viewRef);
|
||||
|
||||
for (var i = 0; i < renderViewWithFragments.fragmentRefs.length; i++) {
|
||||
expect(store.deserializeRenderFragmentRef(101 + i))
|
||||
.toBe(renderViewWithFragments.fragmentRefs[i]);
|
||||
}
|
||||
});
|
||||
|
||||
describe("RenderViewWithFragments", () => {
|
||||
it("should be serializable", () => {
|
||||
var renderViewWithFragments = createMockRenderViewWithFragments();
|
||||
store.store(renderViewWithFragments, 0);
|
||||
|
||||
var deserialized = store.deserializeViewWithFragments(
|
||||
store.serializeViewWithFragments(renderViewWithFragments));
|
||||
expect(deserialized.viewRef).toBe(renderViewWithFragments.viewRef);
|
||||
|
||||
expect(deserialized.fragmentRefs.length)
|
||||
.toEqual(renderViewWithFragments.fragmentRefs.length);
|
||||
|
||||
for (var i = 0; i < deserialized.fragmentRefs.length; i++) {
|
||||
var val = deserialized.fragmentRefs[i];
|
||||
expect(val).toBe(renderViewWithFragments.fragmentRefs[i]);
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
describe("RenderViewRef", () => {
|
||||
it("should be serializable", () => {
|
||||
var renderViewWithFragments = createMockRenderViewWithFragments();
|
||||
store.store(renderViewWithFragments, 0);
|
||||
|
||||
var deserialized = store.deserializeRenderViewRef(
|
||||
store.serializeRenderViewRef(renderViewWithFragments.viewRef));
|
||||
expect(deserialized).toBe(renderViewWithFragments.viewRef);
|
||||
});
|
||||
});
|
||||
|
||||
describe("RenderFragmentRef", () => {
|
||||
it("should be serializable", () => {
|
||||
var renderViewWithFragments = createMockRenderViewWithFragments();
|
||||
store.store(renderViewWithFragments, 0);
|
||||
|
||||
var serialized =
|
||||
store.serializeRenderFragmentRef(renderViewWithFragments.fragmentRefs[0]);
|
||||
var deserialized = store.deserializeRenderFragmentRef(serialized);
|
||||
|
||||
expect(deserialized).toBe(renderViewWithFragments.fragmentRefs[0]);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
class MockRenderViewRef extends RenderViewRef {
|
||||
constructor() { super(); }
|
||||
}
|
||||
|
||||
class MockRenderFragmentRef extends RenderFragmentRef {
|
||||
constructor() { super(); }
|
||||
}
|
||||
@@ -18,10 +18,7 @@ import {
|
||||
import {ObservableWrapper, PromiseWrapper} from 'angular2/src/facade/async';
|
||||
import {provide} from 'angular2/core';
|
||||
import {ON_WEB_WORKER} from 'angular2/src/web_workers/shared/api';
|
||||
import {RenderProtoViewRefStore} from 'angular2/src/web_workers/shared/render_proto_view_ref_store';
|
||||
import {
|
||||
RenderViewWithFragmentsStore
|
||||
} from 'angular2/src/web_workers/shared/render_view_with_fragments_store';
|
||||
import {RenderStore} from 'angular2/src/web_workers/shared/render_store';
|
||||
|
||||
export function main() {
|
||||
const CHANNEL = "UIMessageBroker Test Channel";
|
||||
@@ -31,11 +28,7 @@ export function main() {
|
||||
const RESULT = 20;
|
||||
const ID = "methodId";
|
||||
|
||||
beforeEachProviders(() => [
|
||||
provide(ON_WEB_WORKER, {useValue: true}),
|
||||
RenderProtoViewRefStore,
|
||||
RenderViewWithFragmentsStore
|
||||
]);
|
||||
beforeEachProviders(() => [provide(ON_WEB_WORKER, {useValue: true}), RenderStore]);
|
||||
|
||||
describe("UIMessageBroker", () => {
|
||||
var messageBuses;
|
||||
|
||||
Reference in New Issue
Block a user