UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

144 lines 6.3 kB
'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { if (typeof Reflect === "object" && typeof Reflect.decorate === "function") return Reflect.decorate(decorators, target, key, desc); switch (arguments.length) { case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target); case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0); case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc); } }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var di_1 = require('angular2/src/core/di'); var dom_adapter_1 = require('angular2/src/core/dom/dom_adapter'); var collection_1 = require('angular2/src/facade/collection'); var lang_1 = require('angular2/src/facade/lang'); var exceptions_1 = require('angular2/src/facade/exceptions'); var ng_zone_1 = require('../zone/ng_zone'); var async_1 = require('angular2/src/facade/async'); /** * The Testability service provides testing hooks that can be accessed from * the browser and by services such as Protractor. Each bootstrapped Angular * application on the page will have an instance of Testability. */ var Testability = (function () { function Testability(_ngZone) { /** @internal */ this._pendingCount = 0; /** @internal */ this._callbacks = []; /** @internal */ this._isAngularEventPending = false; this._watchAngularEvents(_ngZone); } /** @internal */ Testability.prototype._watchAngularEvents = function (_ngZone) { var _this = this; async_1.ObservableWrapper.subscribe(_ngZone.onTurnStart, function (_) { _this._isAngularEventPending = true; }); _ngZone.runOutsideAngular(function () { async_1.ObservableWrapper.subscribe(_ngZone.onEventDone, function (_) { if (!_ngZone.hasPendingTimers) { _this._isAngularEventPending = false; _this._runCallbacksIfReady(); } }); }); }; Testability.prototype.increasePendingRequestCount = function () { this._pendingCount += 1; return this._pendingCount; }; Testability.prototype.decreasePendingRequestCount = function () { this._pendingCount -= 1; if (this._pendingCount < 0) { throw new exceptions_1.BaseException('pending async requests below zero'); } this._runCallbacksIfReady(); return this._pendingCount; }; Testability.prototype.isStable = function () { return this._pendingCount == 0 && !this._isAngularEventPending; }; /** @internal */ Testability.prototype._runCallbacksIfReady = function () { var _this = this; if (!this.isStable()) { return; // Not ready } // Schedules the call backs in a new frame so that it is always async. async_1.PromiseWrapper.resolve(null).then(function (_) { while (_this._callbacks.length !== 0) { (_this._callbacks.pop())(); } }); }; Testability.prototype.whenStable = function (callback) { this._callbacks.push(callback); this._runCallbacksIfReady(); }; Testability.prototype.getPendingRequestCount = function () { return this._pendingCount; }; // This only accounts for ngZone, and not pending counts. Use `whenStable` to // check for stability. Testability.prototype.isAngularEventPending = function () { return this._isAngularEventPending; }; Testability.prototype.findBindings = function (using, provider, exactMatch) { // TODO(juliemr): implement. return []; }; Testability.prototype.findProviders = function (using, provider, exactMatch) { // TODO(juliemr): implement. return []; }; Testability = __decorate([ di_1.Injectable(), __metadata('design:paramtypes', [ng_zone_1.NgZone]) ], Testability); return Testability; })(); exports.Testability = Testability; var TestabilityRegistry = (function () { function TestabilityRegistry() { /** @internal */ this._applications = new collection_1.Map(); testabilityGetter.addToWindow(this); } TestabilityRegistry.prototype.registerApplication = function (token, testability) { this._applications.set(token, testability); }; TestabilityRegistry.prototype.getAllTestabilities = function () { return collection_1.MapWrapper.values(this._applications); }; TestabilityRegistry.prototype.findTestabilityInTree = function (elem, findInAncestors) { if (findInAncestors === void 0) { findInAncestors = true; } if (elem == null) { return null; } if (this._applications.has(elem)) { return this._applications.get(elem); } else if (!findInAncestors) { return null; } if (dom_adapter_1.DOM.isShadowRoot(elem)) { return this.findTestabilityInTree(dom_adapter_1.DOM.getHost(elem)); } return this.findTestabilityInTree(dom_adapter_1.DOM.parentElement(elem)); }; TestabilityRegistry = __decorate([ di_1.Injectable(), __metadata('design:paramtypes', []) ], TestabilityRegistry); return TestabilityRegistry; })(); exports.TestabilityRegistry = TestabilityRegistry; var NoopGetTestability = (function () { function NoopGetTestability() { } NoopGetTestability.prototype.addToWindow = function (registry) { }; NoopGetTestability = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', []) ], NoopGetTestability); return NoopGetTestability; })(); function setTestabilityGetter(getter) { testabilityGetter = getter; } exports.setTestabilityGetter = setTestabilityGetter; var testabilityGetter = lang_1.CONST_EXPR(new NoopGetTestability()); //# sourceMappingURL=testability.js.map