Before this PR there were only 2 zones: root zone = outer zone > inner
zone.
This PR creates the outer zone as a fork of the root zone: root > outer
> inner.
By doing this it is possible to detected microtasks scheduling in the
outer zone and run the change detection less often (no more than one
time per VM turn).
The PR also introduce a Promise monkey patch for the JS implementation.
It makes Promises aware of microtasks and again allow running the change
detection only once per turn.
AppViewManager is the single entry point to changing the view hierarchy.
It is split between the manager itself which does coordination and
helper methods, so both are easily testable in isolation.
Also, ViewContainer is now only a pure reference to a bound element
with the previous functionality but does not contain the list of views
any more.
Part of #1477
fixes#614
Asynchronous test should inject an AsyncTestCompleter:
Before:
it("async test", (done) => {
// ...
done();
});
After:
it("async test", inject([AsyncTestCompleter], (async) => {
// ...
async.done();
}));
Note: inject() is currently a function and the first parameter is the
array of DI tokens to inject as the test function parameters. This
construct is linked to Traceur limitations. The planned syntax is:
it("async test", @Inject (async: AsyncTestCompleter) => {
// ...
async.done();
});