text: /**
   * @license Angular v8.2.6
   * (c) 2010-2019 Google LLC. https://angular.io/
   * License: MIT
   */
  
  import { __values, __decorate, __metadata } from 'tslib';
  import { Location, LocationStrategy } from '@angular/common';
  import { SpyLocation, MockLocationStrategy } from '@angular/common/testing';
  import { Injectable, Compiler, NgModule, NgModuleFactoryLoader, Injector, Optional } from '@angular/core';
  import { Router, ɵflatten, provideRoutes, ROUTER_CONFIGURATION, RouterModule, ɵROUTER_PROVIDERS, UrlSerializer, ChildrenOutletContexts, ROUTES, UrlHandlingStrategy, PreloadingStrategy, NoPreloading } from '@angular/router';
  
  /**
   * @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
   */
  /**
   * @description
   *
   * Allows to simulate the loading of ng modules in tests.
   *
   * ```
   * const loader = TestBed.get(NgModuleFactoryLoader);
   *
   * @Component({template: 'lazy-loaded'})
   * class LazyLoadedComponent {}
   * @NgModule({
   *   declarations: [LazyLoadedComponent],
   *   imports: [RouterModule.forChild([{path: 'loaded', component: LazyLoadedComponent}])]
   * })
   *
   * class LoadedModule {}
   *
   * // sets up stubbedModules
   * loader.stubbedModules = {lazyModule: LoadedModule};
   *
   * router.resetConfig([
   *   {path: 'lazy', loadChildren: 'lazyModule'},
   * ]);
   *
   * router.navigateByUrl('/lazy/loaded');
   * ```
   *
   * @publicApi
   */
  var SpyNgModuleFactoryLoader = /** @class */ (function () {
      function SpyNgModuleFactoryLoader(compiler) {
          this.compiler = compiler;
          /**
           * @docsNotRequired
           */
          this._stubbedModules = {};
      }
      Object.defineProperty(SpyNgModuleFactoryLoader.prototype, "stubbedModules", {
          /**
           * @docsNotRequired
           */
          get: function () { return this._stubbedModules; },
          /**
           * @docsNotRequired
           */
          set: function (modules) {
              var e_1, _a;
              var res = {};
              try {
                  for (var _b = __values(Object.keys(modules)), _c = _b.next(); !_c.done; _c = _b.next()) {
                      var t = _c.value;
                      res[t] = this.compiler.compileModuleAsync(modules[t]);
                  }
              }
              catch (e_1_1) { e_1 = { error: e_1_1 }; }
              finally {
                  try {
                      if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
                  }
                  finally { if (e_1) throw e_1.error; }
              }
              this._stubbedModules = res;
          },
          enumerable: true,
          configurable: true
      });
      SpyNgModuleFactoryLoader.prototype.load = function (path) {
          if (this._stubbedModules[path]) {
              return this._stubbedModules[path];
          }
          else {
              return Promise.reject(new Error("Cannot find module " + path));
          }
      };
      SpyNgModuleFactoryLoader = __decorate([
          Injectable(),
          __metadata("design:paramtypes", [Compiler])
      ], SpyNgModuleFactoryLoader);
      return SpyNgModuleFactoryLoader;
  }());
  function isUrlHandlingStrategy(opts) {
      // This property check is needed because UrlHandlingStrategy is an interface and doesn't exist at
      // runtime.
      return 'shouldProcessUrl' in opts;
  }
  /**
   * Router setup factory function used for testing.
   *
   * @publicApi
   */
  function setupTestingRouter(urlSerializer, contexts, location, loader, compiler, injector, routes, opts, urlHandlingStrategy) {
      var router = new Router(null, urlSerializer, contexts, location, injector, loader, compiler, ɵflatten(routes));
      if (opts) {
          // Handle deprecated argument ordering.
          if (isUrlHandlingStrategy(opts)) {
              router.urlHandlingStrategy = opts;
          }
          else {
              // Handle ExtraOptions
              if (opts.malformedUriErrorHandler) {
                  router.malformedUriErrorHandler = opts.malformedUriErrorHandler;
              }
              if (opts.paramsInheritanceStrategy) {
                  router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;
              }
          }
      }
      if (urlHandlingStrategy) {
          router.urlHandlingStrategy = urlHandlingStrategy;
      }
      return router;
  }
  /**
   * @description
   *
   * Sets up the router to be used for testing.
   *
   * The modules sets up the router to be used for testing.
   * It provides spy implementations of `Location`, `LocationStrategy`, and {@link
   * NgModuleFactoryLoader}.
   *
   * @usageNotes
   * ### Example
   *
   * ```
   * beforeEach(() => {
   *   TestBed.configureTestModule({
   *     imports: [
   *       RouterTestingModule.withRoutes(
   *         [{path: '', component: BlankCmp}, {path: 'simple', component: SimpleCmp}]
   *       )
   *     ]
   *   });
   * });
   * ```
   *
   * @publicApi
   */
  var RouterTestingModule = /** @class */ (function () {
      function RouterTestingModule() {
      }
      RouterTestingModule_1 = RouterTestingModule;
      RouterTestingModule.withRoutes = function (routes, config) {
          return {
              ngModule: RouterTestingModule_1,
              providers: [
                  provideRoutes(routes),
                  { provide: ROUTER_CONFIGURATION, useValue: config ? config : {} },
              ]
          };
      };
      var RouterTestingModule_1;
      RouterTestingModule = RouterTestingModule_1 = __decorate([
          NgModule({
              exports: [RouterModule],
              providers: [
                  ɵROUTER_PROVIDERS, { provide: Location, useClass: SpyLocation },
                  { provide: LocationStrategy, useClass: MockLocationStrategy },
                  { provide: NgModuleFactoryLoader, useClass: SpyNgModuleFactoryLoader }, {
                      provide: Router,
                      useFactory: setupTestingRouter,
                      deps: [
                          UrlSerializer, ChildrenOutletContexts, Location, NgModuleFactoryLoader, Compiler, Injector,
                          ROUTES, ROUTER_CONFIGURATION, [UrlHandlingStrategy, new Optional()]
                      ]
                  },
                  { provide: PreloadingStrategy, useExisting: NoPreloading }, provideRoutes([])
              ]
          })
      ], RouterTestingModule);
      return RouterTestingModule;
  }());
  
  /**
   * @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
   */
  
  /**
   * @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
   */
  // This file only reexports content of the `src` folder. Keep it that way.
  
  /**
   * @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
   */
  
  /**
   * Generated bundle index. Do not edit.
   */
  
  export { SpyNgModuleFactoryLoader, setupTestingRouter, RouterTestingModule };
  //# sourceMappingURL=testing.js.map
  