| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (factory());
- }(this, (function () { 'use strict';
- /**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Promise for async/fakeAsync zoneSpec test
- * can support async operation which not supported by zone.js
- * such as
- * it ('test jsonp in AsyncZone', async() => {
- * new Promise(res => {
- * jsonp(url, (data) => {
- * // success callback
- * res(data);
- * });
- * }).then((jsonpResult) => {
- * // get jsonp result.
- *
- * // user will expect AsyncZoneSpec wait for
- * // then, but because jsonp is not zone aware
- * // AsyncZone will finish before then is called.
- * });
- * });
- */
- Zone.__load_patch('promisefortest', function (global, Zone, api) {
- var symbolState = api.symbol('state');
- var UNRESOLVED = null;
- var symbolParentUnresolved = api.symbol('parentUnresolved');
- // patch Promise.prototype.then to keep an internal
- // number for tracking unresolved chained promise
- // we will decrease this number when the parent promise
- // being resolved/rejected and chained promise was
- // scheduled as a microTask.
- // so we can know such kind of chained promise still
- // not resolved in AsyncTestZone
- Promise[api.symbol('patchPromiseForTest')] = function patchPromiseForTest() {
- var oriThen = Promise[Zone.__symbol__('ZonePromiseThen')];
- if (oriThen) {
- return;
- }
- oriThen = Promise[Zone.__symbol__('ZonePromiseThen')] = Promise.prototype.then;
- Promise.prototype.then = function () {
- var chained = oriThen.apply(this, arguments);
- if (this[symbolState] === UNRESOLVED) {
- // parent promise is unresolved.
- var asyncTestZoneSpec = Zone.current.get('AsyncTestZoneSpec');
- if (asyncTestZoneSpec) {
- asyncTestZoneSpec.unresolvedChainedPromiseCount++;
- chained[symbolParentUnresolved] = true;
- }
- }
- return chained;
- };
- };
- Promise[api.symbol('unPatchPromiseForTest')] = function unpatchPromiseForTest() {
- // restore origin then
- var oriThen = Promise[Zone.__symbol__('ZonePromiseThen')];
- if (oriThen) {
- Promise.prototype.then = oriThen;
- Promise[Zone.__symbol__('ZonePromiseThen')] = undefined;
- }
- };
- });
- })));
|