blob: c0f766b5e8c9c3580dd85d64355793b0e23ca030 [file] [log] [blame]
{"version":3,"file":"testing.js","sources":["../../../../../../packages/common/testing/src/location_mock.ts","../../../../../../packages/common/testing/src/mock_location_strategy.ts","../../../../../../packages/common/testing/src/mock_platform_location.ts","../../../../../../packages/common/testing/src/testing.ts","../../../../../../packages/common/testing/public_api.ts","../../../../../../packages/common/testing/index.ts","../../../../../../packages/common/testing/testing.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Location, LocationStrategy, PlatformLocation} from '@angular/common';\nimport {EventEmitter, Injectable} from '@angular/core';\nimport {SubscriptionLike} from 'rxjs';\n\n/**\n * A spy for {@link Location} that allows tests to fire simulated location events.\n *\n * @publicApi\n */\n@Injectable()\nexport class SpyLocation implements Location {\n urlChanges: string[] = [];\n private _history: LocationState[] = [new LocationState('', '', null)];\n private _historyIndex: number = 0;\n /** @internal */\n _subject: EventEmitter<any> = new EventEmitter();\n /** @internal */\n _baseHref: string = '';\n /** @internal */\n _platformStrategy: LocationStrategy = null !;\n /** @internal */\n _platformLocation: PlatformLocation = null !;\n /** @internal */\n _urlChangeListeners: ((url: string, state: unknown) => void)[] = [];\n\n setInitialPath(url: string) { this._history[this._historyIndex].path = url; }\n\n setBaseHref(url: string) { this._baseHref = url; }\n\n path(): string { return this._history[this._historyIndex].path; }\n\n getState(): unknown { return this._history[this._historyIndex].state; }\n\n isCurrentPathEqualTo(path: string, query: string = ''): boolean {\n const givenPath = path.endsWith('/') ? path.substring(0, path.length - 1) : path;\n const currPath =\n this.path().endsWith('/') ? this.path().substring(0, this.path().length - 1) : this.path();\n\n return currPath == givenPath + (query.length > 0 ? ('?' + query) : '');\n }\n\n simulateUrlPop(pathname: string) {\n this._subject.emit({'url': pathname, 'pop': true, 'type': 'popstate'});\n }\n\n simulateHashChange(pathname: string) {\n // Because we don't prevent the native event, the browser will independently update the path\n this.setInitialPath(pathname);\n this.urlChanges.push('hash: ' + pathname);\n this._subject.emit({'url': pathname, 'pop': true, 'type': 'hashchange'});\n }\n\n prepareExternalUrl(url: string): string {\n if (url.length > 0 && !url.startsWith('/')) {\n url = '/' + url;\n }\n return this._baseHref + url;\n }\n\n go(path: string, query: string = '', state: any = null) {\n path = this.prepareExternalUrl(path);\n\n if (this._historyIndex > 0) {\n this._history.splice(this._historyIndex + 1);\n }\n this._history.push(new LocationState(path, query, state));\n this._historyIndex = this._history.length - 1;\n\n const locationState = this._history[this._historyIndex - 1];\n if (locationState.path == path && locationState.query == query) {\n return;\n }\n\n const url = path + (query.length > 0 ? ('?' + query) : '');\n this.urlChanges.push(url);\n this._subject.emit({'url': url, 'pop': false});\n }\n\n replaceState(path: string, query: string = '', state: any = null) {\n path = this.prepareExternalUrl(path);\n\n const history = this._history[this._historyIndex];\n if (history.path == path && history.query == query) {\n return;\n }\n\n history.path = path;\n history.query = query;\n history.state = state;\n\n const url = path + (query.length > 0 ? ('?' + query) : '');\n this.urlChanges.push('replace: ' + url);\n }\n\n forward() {\n if (this._historyIndex < (this._history.length - 1)) {\n this._historyIndex++;\n this._subject.emit({'url': this.path(), 'state': this.getState(), 'pop': true});\n }\n }\n\n back() {\n if (this._historyIndex > 0) {\n this._historyIndex--;\n this._subject.emit({'url': this.path(), 'state': this.getState(), 'pop': true});\n }\n }\n onUrlChange(fn: (url: string, state: unknown) => void) {\n this._urlChangeListeners.push(fn);\n this.subscribe(v => { this._notifyUrlChangeListeners(v.url, v.state); });\n }\n\n /** @internal */\n _notifyUrlChangeListeners(url: string = '', state: unknown) {\n this._urlChangeListeners.forEach(fn => fn(url, state));\n }\n\n subscribe(\n onNext: (value: any) => void, onThrow?: ((error: any) => void)|null,\n onReturn?: (() => void)|null): SubscriptionLike {\n return this._subject.subscribe({next: onNext, error: onThrow, complete: onReturn});\n }\n\n normalize(url: string): string { return null !; }\n}\n\nclass LocationState {\n constructor(public path: string, public query: string, public state: any) {}\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {LocationStrategy} from '@angular/common';\nimport {EventEmitter, Injectable} from '@angular/core';\n\n\n\n/**\n * A mock implementation of {@link LocationStrategy} that allows tests to fire simulated\n * location events.\n *\n * @publicApi\n */\n@Injectable()\nexport class MockLocationStrategy extends LocationStrategy {\n internalBaseHref: string = '/';\n internalPath: string = '/';\n internalTitle: string = '';\n urlChanges: string[] = [];\n /** @internal */\n _subject: EventEmitter<any> = new EventEmitter();\n private stateChanges: any[] = [];\n constructor() { super(); }\n\n simulatePopState(url: string): void {\n this.internalPath = url;\n this._subject.emit(new _MockPopStateEvent(this.path()));\n }\n\n path(includeHash: boolean = false): string { return this.internalPath; }\n\n prepareExternalUrl(internal: string): string {\n if (internal.startsWith('/') && this.internalBaseHref.endsWith('/')) {\n return this.internalBaseHref + internal.substring(1);\n }\n return this.internalBaseHref + internal;\n }\n\n pushState(ctx: any, title: string, path: string, query: string): void {\n // Add state change to changes array\n this.stateChanges.push(ctx);\n\n this.internalTitle = title;\n\n const url = path + (query.length > 0 ? ('?' + query) : '');\n this.internalPath = url;\n\n const externalUrl = this.prepareExternalUrl(url);\n this.urlChanges.push(externalUrl);\n }\n\n replaceState(ctx: any, title: string, path: string, query: string): void {\n // Reset the last index of stateChanges to the ctx (state) object\n this.stateChanges[(this.stateChanges.length || 1) - 1] = ctx;\n\n this.internalTitle = title;\n\n const url = path + (query.length > 0 ? ('?' + query) : '');\n this.internalPath = url;\n\n const externalUrl = this.prepareExternalUrl(url);\n this.urlChanges.push('replace: ' + externalUrl);\n }\n\n onPopState(fn: (value: any) => void): void { this._subject.subscribe({next: fn}); }\n\n getBaseHref(): string { return this.internalBaseHref; }\n\n back(): void {\n if (this.urlChanges.length > 0) {\n this.urlChanges.pop();\n this.stateChanges.pop();\n const nextUrl = this.urlChanges.length > 0 ? this.urlChanges[this.urlChanges.length - 1] : '';\n this.simulatePopState(nextUrl);\n }\n }\n\n forward(): void { throw 'not implemented'; }\n\n getState(): unknown { return this.stateChanges[(this.stateChanges.length || 1) - 1]; }\n}\n\nclass _MockPopStateEvent {\n pop: boolean = true;\n type: string = 'popstate';\n constructor(public newUrl: string) {}\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {LocationChangeEvent, LocationChangeListener, PlatformLocation} from '@angular/common';\nimport {Inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n/**\n * Parser from https://tools.ietf.org/html/rfc3986#appendix-B\n * ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?\n * 12 3 4 5 6 7 8 9\n *\n * Example: http://www.ics.uci.edu/pub/ietf/uri/#Related\n *\n * Results in:\n *\n * $1 = http:\n * $2 = http\n * $3 = //www.ics.uci.edu\n * $4 = www.ics.uci.edu\n * $5 = /pub/ietf/uri/\n * $6 = <undefined>\n * $7 = <undefined>\n * $8 = #Related\n * $9 = Related\n */\nconst urlParse = /^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n\nfunction parseUrl(urlStr: string, baseHref: string) {\n const verifyProtocol = /^((http[s]?|ftp):\\/\\/)/;\n let serverBase: string|undefined;\n\n // URL class requires full URL. If the URL string doesn't start with protocol, we need to add\n // an arbitrary base URL which can be removed afterward.\n if (!verifyProtocol.test(urlStr)) {\n serverBase = 'http://empty.com/';\n }\n let parsedUrl: {\n protocol: string,\n hostname: string,\n port: string,\n pathname: string,\n search: string,\n hash: string\n };\n try {\n parsedUrl = new URL(urlStr, serverBase);\n } catch (e) {\n const result = urlParse.exec(serverBase || '' + urlStr);\n if (!result) {\n throw new Error(`Invalid URL: ${urlStr} with base: ${baseHref}`);\n }\n const hostSplit = result[4].split(':');\n parsedUrl = {\n protocol: result[1],\n hostname: hostSplit[0],\n port: hostSplit[1] || '',\n pathname: result[5],\n search: result[6],\n hash: result[8],\n };\n }\n if (parsedUrl.pathname && parsedUrl.pathname.indexOf(baseHref) === 0) {\n parsedUrl.pathname = parsedUrl.pathname.substring(baseHref.length);\n }\n return {\n hostname: !serverBase && parsedUrl.hostname || '',\n protocol: !serverBase && parsedUrl.protocol || '',\n port: !serverBase && parsedUrl.port || '',\n pathname: parsedUrl.pathname || '/',\n search: parsedUrl.search || '',\n hash: parsedUrl.hash || '',\n };\n}\n\n/**\n * Mock platform location config\n *\n * @publicApi\n */\nexport interface MockPlatformLocationConfig {\n startUrl?: string;\n appBaseHref?: string;\n}\n\n/**\n * Provider for mock platform location config\n *\n * @publicApi\n */\nexport const MOCK_PLATFORM_LOCATION_CONFIG = new InjectionToken('MOCK_PLATFORM_LOCATION_CONFIG');\n\n/**\n * Mock implementation of URL state.\n *\n * @publicApi\n */\n@Injectable()\nexport class MockPlatformLocation implements PlatformLocation {\n private baseHref: string = '';\n private hashUpdate = new Subject<LocationChangeEvent>();\n private urlChanges: {\n hostname: string,\n protocol: string,\n port: string,\n pathname: string,\n search: string,\n hash: string,\n state: unknown\n }[] = [{hostname: '', protocol: '', port: '', pathname: '/', search: '', hash: '', state: null}];\n\n constructor(@Inject(MOCK_PLATFORM_LOCATION_CONFIG) @Optional() config?:\n MockPlatformLocationConfig) {\n if (config) {\n this.baseHref = config.appBaseHref || '';\n\n const parsedChanges =\n this.parseChanges(null, config.startUrl || 'http://<empty>/', this.baseHref);\n this.urlChanges[0] = {...parsedChanges};\n }\n }\n\n get hostname() { return this.urlChanges[0].hostname; }\n get protocol() { return this.urlChanges[0].protocol; }\n get port() { return this.urlChanges[0].port; }\n get pathname() { return this.urlChanges[0].pathname; }\n get search() { return this.urlChanges[0].search; }\n get hash() { return this.urlChanges[0].hash; }\n get state() { return this.urlChanges[0].state; }\n\n\n getBaseHrefFromDOM(): string { return this.baseHref; }\n\n onPopState(fn: LocationChangeListener): void {\n // No-op: a state stack is not implemented, so\n // no events will ever come.\n }\n\n onHashChange(fn: LocationChangeListener): void { this.hashUpdate.subscribe(fn); }\n\n get href(): string {\n let url = `${this.protocol}//${this.hostname}${this.port ? ':' + this.port : ''}`;\n url += `${this.pathname === '/' ? '' : this.pathname}${this.search}${this.hash}`;\n return url;\n }\n\n get url(): string { return `${this.pathname}${this.search}${this.hash}`; }\n\n private parseChanges(state: unknown, url: string, baseHref: string = '') {\n // When the `history.state` value is stored, it is always copied.\n state = JSON.parse(JSON.stringify(state));\n return {...parseUrl(url, baseHref), state};\n }\n\n replaceState(state: any, title: string, newUrl: string): void {\n const {pathname, search, state: parsedState, hash} = this.parseChanges(state, newUrl);\n\n this.urlChanges[0] = {...this.urlChanges[0], pathname, search, hash, state: parsedState};\n }\n\n pushState(state: any, title: string, newUrl: string): void {\n const {pathname, search, state: parsedState, hash} = this.parseChanges(state, newUrl);\n this.urlChanges.unshift({...this.urlChanges[0], pathname, search, hash, state: parsedState});\n }\n\n forward(): void { throw new Error('Not implemented'); }\n\n back(): void {\n const oldUrl = this.url;\n const oldHash = this.hash;\n this.urlChanges.shift();\n const newHash = this.hash;\n\n if (oldHash !== newHash) {\n scheduleMicroTask(() => this.hashUpdate.next({\n type: 'hashchange', state: null, oldUrl, newUrl: this.url\n } as LocationChangeEvent));\n }\n }\n\n getState(): unknown { return this.state; }\n}\n\nexport function scheduleMicroTask(cb: () => any) {\n Promise.resolve(null).then(cb);\n}","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common/testing package.\n */\nexport {SpyLocation} from './location_mock';\nexport {MockLocationStrategy} from './mock_location_strategy';\nexport {MOCK_PLATFORM_LOCATION_CONFIG, MockPlatformLocation, MockPlatformLocationConfig} from './mock_platform_location';\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport * from './src/testing';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tslib_1.__extends","tslib_1.__param"],"mappings":"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"}