text: /**
   * @license Angular v5.1.0
   * (c) 2010-2017 Google, Inc. https://angular.io/
   * License: MIT
   */
  (function (global, factory) {
  	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common')) :
  	typeof define === 'function' && define.amd ? define('@angular/common/testing', ['exports', '@angular/core', '@angular/common'], factory) :
  	(factory((global.ng = global.ng || {}, global.ng.common = global.ng.common || {}, global.ng.common.testing = {}),global.ng.core,global.ng.common));
  }(this, (function (exports,_angular_core,_angular_common) { 'use strict';
  
  /*! *****************************************************************************
  Copyright (c) Microsoft Corporation. All rights reserved.
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
  this file except in compliance with the License. You may obtain a copy of the
  License at http://www.apache.org/licenses/LICENSE-2.0
  
  THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
  WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
  MERCHANTABLITY OR NON-INFRINGEMENT.
  
  See the Apache Version 2.0 License for specific language governing permissions
  and limitations under the License.
  ***************************************************************************** */
  /* global Reflect, Promise */
  
  var extendStatics = Object.setPrototypeOf ||
      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
      function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  
  function __extends(d, b) {
      extendStatics(d, b);
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  }
  
  /**
   * @license Angular v5.1.0
   * (c) 2010-2017 Google, Inc. https://angular.io/
   * License: MIT
   */
  /**
   * @fileoverview added by tsickle
   * @suppress {checkTypes} checked by tsc
   */
  /**
   * @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
   */
  /**
   * A spy for {\@link Location} that allows tests to fire simulated location events.
   *
   * \@experimental
   */
  var SpyLocation = /** @class */ (function () {
      function SpyLocation() {
          this.urlChanges = [];
          this._history = [new LocationState('', '')];
          this._historyIndex = 0;
          /**
           * \@internal
           */
          this._subject = new _angular_core.EventEmitter();
          /**
           * \@internal
           */
          this._baseHref = '';
          /**
           * \@internal
           */
          this._platformStrategy = /** @type {?} */ ((null));
      }
      /**
       * @param {?} url
       * @return {?}
       */
      SpyLocation.prototype.setInitialPath = /**
       * @param {?} url
       * @return {?}
       */
      function (url) { this._history[this._historyIndex].path = url; };
      /**
       * @param {?} url
       * @return {?}
       */
      SpyLocation.prototype.setBaseHref = /**
       * @param {?} url
       * @return {?}
       */
      function (url) { this._baseHref = url; };
      /**
       * @return {?}
       */
      SpyLocation.prototype.path = /**
       * @return {?}
       */
      function () { return this._history[this._historyIndex].path; };
      /**
       * @param {?} path
       * @param {?=} query
       * @return {?}
       */
      SpyLocation.prototype.isCurrentPathEqualTo = /**
       * @param {?} path
       * @param {?=} query
       * @return {?}
       */
      function (path, query) {
          if (query === void 0) { query = ''; }
          var /** @type {?} */ givenPath = path.endsWith('/') ? path.substring(0, path.length - 1) : path;
          var /** @type {?} */ currPath = this.path().endsWith('/') ? this.path().substring(0, this.path().length - 1) : this.path();
          return currPath == givenPath + (query.length > 0 ? ('?' + query) : '');
      };
      /**
       * @param {?} pathname
       * @return {?}
       */
      SpyLocation.prototype.simulateUrlPop = /**
       * @param {?} pathname
       * @return {?}
       */
      function (pathname) {
          this._subject.emit({ 'url': pathname, 'pop': true, 'type': 'popstate' });
      };
      /**
       * @param {?} pathname
       * @return {?}
       */
      SpyLocation.prototype.simulateHashChange = /**
       * @param {?} pathname
       * @return {?}
       */
      function (pathname) {
          // Because we don't prevent the native event, the browser will independently update the path
          this.setInitialPath(pathname);
          this.urlChanges.push('hash: ' + pathname);
          this._subject.emit({ 'url': pathname, 'pop': true, 'type': 'hashchange' });
      };
      /**
       * @param {?} url
       * @return {?}
       */
      SpyLocation.prototype.prepareExternalUrl = /**
       * @param {?} url
       * @return {?}
       */
      function (url) {
          if (url.length > 0 && !url.startsWith('/')) {
              url = '/' + url;
          }
          return this._baseHref + url;
      };
      /**
       * @param {?} path
       * @param {?=} query
       * @return {?}
       */
      SpyLocation.prototype.go = /**
       * @param {?} path
       * @param {?=} query
       * @return {?}
       */
      function (path, query) {
          if (query === void 0) { query = ''; }
          path = this.prepareExternalUrl(path);
          if (this._historyIndex > 0) {
              this._history.splice(this._historyIndex + 1);
          }
          this._history.push(new LocationState(path, query));
          this._historyIndex = this._history.length - 1;
          var /** @type {?} */ locationState = this._history[this._historyIndex - 1];
          if (locationState.path == path && locationState.query == query) {
              return;
          }
          var /** @type {?} */ url = path + (query.length > 0 ? ('?' + query) : '');
          this.urlChanges.push(url);
          this._subject.emit({ 'url': url, 'pop': false });
      };
      /**
       * @param {?} path
       * @param {?=} query
       * @return {?}
       */
      SpyLocation.prototype.replaceState = /**
       * @param {?} path
       * @param {?=} query
       * @return {?}
       */
      function (path, query) {
          if (query === void 0) { query = ''; }
          path = this.prepareExternalUrl(path);
          var /** @type {?} */ history = this._history[this._historyIndex];
          if (history.path == path && history.query == query) {
              return;
          }
          history.path = path;
          history.query = query;
          var /** @type {?} */ url = path + (query.length > 0 ? ('?' + query) : '');
          this.urlChanges.push('replace: ' + url);
      };
      /**
       * @return {?}
       */
      SpyLocation.prototype.forward = /**
       * @return {?}
       */
      function () {
          if (this._historyIndex < (this._history.length - 1)) {
              this._historyIndex++;
              this._subject.emit({ 'url': this.path(), 'pop': true });
          }
      };
      /**
       * @return {?}
       */
      SpyLocation.prototype.back = /**
       * @return {?}
       */
      function () {
          if (this._historyIndex > 0) {
              this._historyIndex--;
              this._subject.emit({ 'url': this.path(), 'pop': true });
          }
      };
      /**
       * @param {?} onNext
       * @param {?=} onThrow
       * @param {?=} onReturn
       * @return {?}
       */
      SpyLocation.prototype.subscribe = /**
       * @param {?} onNext
       * @param {?=} onThrow
       * @param {?=} onReturn
       * @return {?}
       */
      function (onNext, onThrow, onReturn) {
          return this._subject.subscribe({ next: onNext, error: onThrow, complete: onReturn });
      };
      /**
       * @param {?} url
       * @return {?}
       */
      SpyLocation.prototype.normalize = /**
       * @param {?} url
       * @return {?}
       */
      function (url) { return /** @type {?} */ ((null)); };
      SpyLocation.decorators = [
          { type: _angular_core.Injectable },
      ];
      /** @nocollapse */
      SpyLocation.ctorParameters = function () { return []; };
      return SpyLocation;
  }());
  var LocationState = /** @class */ (function () {
      function LocationState(path, query) {
          this.path = path;
          this.query = query;
      }
      return LocationState;
  }());
  
  /**
   * @fileoverview added by tsickle
   * @suppress {checkTypes} checked by tsc
   */
  /**
   * @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
   */
  /**
   * A mock implementation of {\@link LocationStrategy} that allows tests to fire simulated
   * location events.
   *
   * \@stable
   */
  var MockLocationStrategy = /** @class */ (function (_super) {
      __extends(MockLocationStrategy, _super);
      function MockLocationStrategy() {
          var _this = _super.call(this) || this;
          _this.internalBaseHref = '/';
          _this.internalPath = '/';
          _this.internalTitle = '';
          _this.urlChanges = [];
          /**
           * \@internal
           */
          _this._subject = new _angular_core.EventEmitter();
          return _this;
      }
      /**
       * @param {?} url
       * @return {?}
       */
      MockLocationStrategy.prototype.simulatePopState = /**
       * @param {?} url
       * @return {?}
       */
      function (url) {
          this.internalPath = url;
          this._subject.emit(new _MockPopStateEvent(this.path()));
      };
      /**
       * @param {?=} includeHash
       * @return {?}
       */
      MockLocationStrategy.prototype.path = /**
       * @param {?=} includeHash
       * @return {?}
       */
      function (includeHash) {
          if (includeHash === void 0) { includeHash = false; }
          return this.internalPath;
      };
      /**
       * @param {?} internal
       * @return {?}
       */
      MockLocationStrategy.prototype.prepareExternalUrl = /**
       * @param {?} internal
       * @return {?}
       */
      function (internal) {
          if (internal.startsWith('/') && this.internalBaseHref.endsWith('/')) {
              return this.internalBaseHref + internal.substring(1);
          }
          return this.internalBaseHref + internal;
      };
      /**
       * @param {?} ctx
       * @param {?} title
       * @param {?} path
       * @param {?} query
       * @return {?}
       */
      MockLocationStrategy.prototype.pushState = /**
       * @param {?} ctx
       * @param {?} title
       * @param {?} path
       * @param {?} query
       * @return {?}
       */
      function (ctx, title, path, query) {
          this.internalTitle = title;
          var /** @type {?} */ url = path + (query.length > 0 ? ('?' + query) : '');
          this.internalPath = url;
          var /** @type {?} */ externalUrl = this.prepareExternalUrl(url);
          this.urlChanges.push(externalUrl);
      };
      /**
       * @param {?} ctx
       * @param {?} title
       * @param {?} path
       * @param {?} query
       * @return {?}
       */
      MockLocationStrategy.prototype.replaceState = /**
       * @param {?} ctx
       * @param {?} title
       * @param {?} path
       * @param {?} query
       * @return {?}
       */
      function (ctx, title, path, query) {
          this.internalTitle = title;
          var /** @type {?} */ url = path + (query.length > 0 ? ('?' + query) : '');
          this.internalPath = url;
          var /** @type {?} */ externalUrl = this.prepareExternalUrl(url);
          this.urlChanges.push('replace: ' + externalUrl);
      };
      /**
       * @param {?} fn
       * @return {?}
       */
      MockLocationStrategy.prototype.onPopState = /**
       * @param {?} fn
       * @return {?}
       */
      function (fn) { this._subject.subscribe({ next: fn }); };
      /**
       * @return {?}
       */
      MockLocationStrategy.prototype.getBaseHref = /**
       * @return {?}
       */
      function () { return this.internalBaseHref; };
      /**
       * @return {?}
       */
      MockLocationStrategy.prototype.back = /**
       * @return {?}
       */
      function () {
          if (this.urlChanges.length > 0) {
              this.urlChanges.pop();
              var /** @type {?} */ nextUrl = this.urlChanges.length > 0 ? this.urlChanges[this.urlChanges.length - 1] : '';
              this.simulatePopState(nextUrl);
          }
      };
      /**
       * @return {?}
       */
      MockLocationStrategy.prototype.forward = /**
       * @return {?}
       */
      function () { throw 'not implemented'; };
      MockLocationStrategy.decorators = [
          { type: _angular_core.Injectable },
      ];
      /** @nocollapse */
      MockLocationStrategy.ctorParameters = function () { return []; };
      return MockLocationStrategy;
  }(_angular_common.LocationStrategy));
  var _MockPopStateEvent = /** @class */ (function () {
      function _MockPopStateEvent(newUrl) {
          this.newUrl = newUrl;
          this.pop = true;
          this.type = 'popstate';
      }
      return _MockPopStateEvent;
  }());
  
  exports.SpyLocation = SpyLocation;
  exports.MockLocationStrategy = MockLocationStrategy;
  
  Object.defineProperty(exports, '__esModule', { value: true });
  
  })));
  //# sourceMappingURL=common-testing.umd.js.map
  