UNPKG

@angular/common

Version:

Angular - commonly needed directives and services

1 lines 41 kB
{"version":3,"file":"testing.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/mock_platform_location.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/navigation/provide_fake_platform_navigation.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/location_mock.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/mock_location_strategy.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/provide_location_mocks.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC 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.dev/license\n */\n\nimport {\n LocationChangeEvent,\n LocationChangeListener,\n PlatformLocation,\n PlatformNavigation,\n} from '../../index';\nimport {Inject, inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {FakeNavigation} from './navigation/fake_navigation';\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<MockPlatformLocationConfig>(\n 'MOCK_PLATFORM_LOCATION_CONFIG',\n);\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 popStateSubject = new Subject<LocationChangeEvent>();\n private urlChangeIndex: number = 0;\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(\n @Inject(MOCK_PLATFORM_LOCATION_CONFIG) @Optional() config?: MockPlatformLocationConfig,\n ) {\n if (config) {\n this.baseHref = config.appBaseHref || '';\n\n const parsedChanges = this.parseChanges(\n null,\n config.startUrl || 'http://_empty_/',\n this.baseHref,\n );\n this.urlChanges[0] = {...parsedChanges};\n }\n }\n\n get hostname() {\n return this.urlChanges[this.urlChangeIndex].hostname;\n }\n get protocol() {\n return this.urlChanges[this.urlChangeIndex].protocol;\n }\n get port() {\n return this.urlChanges[this.urlChangeIndex].port;\n }\n get pathname() {\n return this.urlChanges[this.urlChangeIndex].pathname;\n }\n get search() {\n return this.urlChanges[this.urlChangeIndex].search;\n }\n get hash() {\n return this.urlChanges[this.urlChangeIndex].hash;\n }\n get state() {\n return this.urlChanges[this.urlChangeIndex].state;\n }\n\n getBaseHrefFromDOM(): string {\n return this.baseHref;\n }\n\n onPopState(fn: LocationChangeListener): VoidFunction {\n const subscription = this.popStateSubject.subscribe(fn);\n return () => subscription.unsubscribe();\n }\n\n onHashChange(fn: LocationChangeListener): VoidFunction {\n const subscription = this.hashUpdate.subscribe(fn);\n return () => subscription.unsubscribe();\n }\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 {\n return `${this.pathname}${this.search}${this.hash}`;\n }\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[this.urlChangeIndex] = {\n ...this.urlChanges[this.urlChangeIndex],\n pathname,\n search,\n hash,\n state: parsedState,\n };\n }\n\n pushState(state: any, title: string, newUrl: string): void {\n const {pathname, search, state: parsedState, hash} = this.parseChanges(state, newUrl);\n if (this.urlChangeIndex > 0) {\n this.urlChanges.splice(this.urlChangeIndex + 1);\n }\n this.urlChanges.push({\n ...this.urlChanges[this.urlChangeIndex],\n pathname,\n search,\n hash,\n state: parsedState,\n });\n this.urlChangeIndex = this.urlChanges.length - 1;\n }\n\n forward(): void {\n const oldUrl = this.url;\n const oldHash = this.hash;\n if (this.urlChangeIndex < this.urlChanges.length) {\n this.urlChangeIndex++;\n }\n this.emitEvents(oldHash, oldUrl);\n }\n\n back(): void {\n const oldUrl = this.url;\n const oldHash = this.hash;\n if (this.urlChangeIndex > 0) {\n this.urlChangeIndex--;\n }\n this.emitEvents(oldHash, oldUrl);\n }\n\n historyGo(relativePosition: number = 0): void {\n const oldUrl = this.url;\n const oldHash = this.hash;\n const nextPageIndex = this.urlChangeIndex + relativePosition;\n if (nextPageIndex >= 0 && nextPageIndex < this.urlChanges.length) {\n this.urlChangeIndex = nextPageIndex;\n }\n this.emitEvents(oldHash, oldUrl);\n }\n\n getState(): unknown {\n return this.state;\n }\n\n /**\n * Browsers are inconsistent in when they fire events and perform the state updates\n * The most easiest thing to do in our mock is synchronous and that happens to match\n * Firefox and Chrome, at least somewhat closely\n *\n * https://github.com/WICG/navigation-api#watching-for-navigations\n * https://docs.google.com/document/d/1Pdve-DJ1JCGilj9Yqf5HxRJyBKSel5owgOvUJqTauwU/edit#heading=h.3ye4v71wsz94\n * popstate is always sent before hashchange:\n * https://developer.mozilla.org/en-US/docs/Web/API/Window/popstate_event#when_popstate_is_sent\n */\n private emitEvents(oldHash: string, oldUrl: string) {\n this.popStateSubject.next({\n type: 'popstate',\n state: this.getState(),\n oldUrl,\n newUrl: this.url,\n } as LocationChangeEvent);\n if (oldHash !== this.hash) {\n this.hashUpdate.next({\n type: 'hashchange',\n state: null,\n oldUrl,\n newUrl: this.url,\n } as LocationChangeEvent);\n }\n }\n}\n\n/**\n * Mock implementation of URL state.\n */\n@Injectable()\nexport class FakeNavigationPlatformLocation implements PlatformLocation {\n private readonly _platformNavigation: FakeNavigation;\n\n constructor() {\n const platformNavigation = inject(PlatformNavigation);\n if (!(platformNavigation instanceof FakeNavigation)) {\n throw new Error(\n 'FakePlatformNavigation cannot be used without FakeNavigation. Use ' +\n '`provideFakeNavigation` to have all these services provided together.',\n );\n }\n this._platformNavigation = platformNavigation;\n }\n\n private config = inject(MOCK_PLATFORM_LOCATION_CONFIG, {optional: true});\n getBaseHrefFromDOM(): string {\n return this.config?.appBaseHref ?? '';\n }\n\n // window, addEventListener, removeEventListener might be undefined due to test mocks\n onPopState(fn: LocationChangeListener): VoidFunction {\n this._platformNavigation.window?.addEventListener?.('popstate', fn);\n return () => this._platformNavigation.window?.removeEventListener?.('popstate', fn);\n }\n\n onHashChange(fn: LocationChangeListener): VoidFunction {\n this._platformNavigation.window?.addEventListener?.('hashchange', fn as any);\n return () => this._platformNavigation.window?.removeEventListener?.('hashchange', fn as any);\n }\n\n get href(): string {\n return this._platformNavigation.currentEntry.url!;\n }\n get protocol(): string {\n return new URL(this._platformNavigation.currentEntry.url!).protocol;\n }\n get hostname(): string {\n return new URL(this._platformNavigation.currentEntry.url!).hostname;\n }\n get port(): string {\n return new URL(this._platformNavigation.currentEntry.url!).port;\n }\n get pathname(): string {\n return new URL(this._platformNavigation.currentEntry.url!).pathname;\n }\n get search(): string {\n return new URL(this._platformNavigation.currentEntry.url!).search;\n }\n get hash(): string {\n return new URL(this._platformNavigation.currentEntry.url!).hash;\n }\n\n pushState(state: any, title: string, url: string): void {\n this._platformNavigation.pushState(state, title, url);\n }\n\n replaceState(state: any, title: string, url: string): void {\n this._platformNavigation.replaceState(state, title, url);\n }\n\n forward(): void {\n this._platformNavigation.forward();\n }\n\n back(): void {\n this._platformNavigation.back();\n }\n\n historyGo(relativePosition: number = 0): void {\n this._platformNavigation.go(relativePosition);\n }\n\n getState(): unknown {\n return this._platformNavigation.currentEntry.getHistoryState();\n }\n}\n","/**\n * @license\n * Copyright Google LLC 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.dev/license\n */\n\nimport {DOCUMENT, PlatformLocation, PlatformNavigation} from '../../../index';\nimport {inject, InjectionToken, Provider} from '@angular/core';\nimport {PRECOMMIT_HANDLER_SUPPORTED} from '../../../src/navigation/platform_navigation';\n\nimport {\n FakeNavigationPlatformLocation,\n MOCK_PLATFORM_LOCATION_CONFIG,\n} from '../mock_platform_location';\n\nimport {FakeNavigation} from './fake_navigation';\n\nconst FAKE_NAVIGATION = new InjectionToken<FakeNavigation>('fakeNavigation', {\n // Providing a factory implies that the token is provided in root by default\n factory: () => {\n const config = inject(MOCK_PLATFORM_LOCATION_CONFIG, {optional: true});\n const baseFallback = 'http://_empty_/';\n const startUrl = new URL(config?.startUrl || baseFallback, baseFallback);\n const fakeNavigation = new FakeNavigation(inject(DOCUMENT), startUrl.href as `http${string}`);\n fakeNavigation.setSynchronousTraversalsForTesting(true);\n return fakeNavigation;\n },\n});\n\n/**\n * Return a provider for the `FakeNavigation` in place of the real Navigation API.\n */\nexport function provideFakePlatformNavigation(): Provider[] {\n return [\n {\n provide: PlatformNavigation,\n useFactory: () => inject(FAKE_NAVIGATION),\n },\n {provide: PlatformLocation, useClass: FakeNavigationPlatformLocation},\n {provide: PRECOMMIT_HANDLER_SUPPORTED, useValue: true},\n ];\n}\n","/**\n * @license\n * Copyright Google LLC 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.dev/license\n */\n\nimport {\n Location,\n LocationStrategy,\n PopStateEvent,\n ɵnormalizeQueryParams as normalizeQueryParams,\n} from '@angular/common';\nimport {Injectable} from '@angular/core';\nimport {Subject, 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 = new Subject<PopStateEvent>();\n /** @internal */\n _basePath: string = '';\n /** @internal */\n _locationStrategy: LocationStrategy = null!;\n /** @internal */\n _urlChangeListeners: ((url: string, state: unknown) => void)[] = [];\n /** @internal */\n _urlChangeSubscription: SubscriptionLike | null = null;\n\n /** @docs-private */\n ngOnDestroy(): void {\n this._urlChangeSubscription?.unsubscribe();\n this._urlChangeListeners = [];\n }\n\n setInitialPath(url: string) {\n this._history[this._historyIndex].path = url;\n }\n\n setBaseHref(url: string) {\n this._basePath = url;\n }\n\n path(): string {\n return this._history[this._historyIndex].path;\n }\n\n getState(): unknown {\n return this._history[this._historyIndex].state;\n }\n\n isCurrentPathEqualTo(path: string, query: string = ''): boolean {\n const givenPath = path.endsWith('/') ? path.substring(0, path.length - 1) : path;\n const currPath = this.path().endsWith('/')\n ? this.path().substring(0, this.path().length - 1)\n : this.path();\n\n return currPath == givenPath + (query.length > 0 ? '?' + query : '');\n }\n\n simulateUrlPop(pathname: string) {\n this._subject.next({'url': pathname, 'pop': true, 'type': 'popstate'});\n }\n\n simulateHashChange(pathname: string) {\n const path = this.prepareExternalUrl(pathname);\n this.pushHistory(path, '', null);\n\n this.urlChanges.push('hash: ' + pathname);\n // the browser will automatically fire popstate event before each `hashchange` event, so we need\n // to simulate it.\n this._subject.next({'url': pathname, 'pop': true, 'type': 'popstate'});\n this._subject.next({'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._basePath + url;\n }\n\n go(path: string, query: string = '', state: any = null) {\n path = this.prepareExternalUrl(path);\n\n this.pushHistory(path, query, state);\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._notifyUrlChangeListeners(path + normalizeQueryParams(query), state);\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\n history.state = state;\n\n if (history.path == path && history.query == query) {\n return;\n }\n\n history.path = path;\n history.query = query;\n\n const url = path + (query.length > 0 ? '?' + query : '');\n this.urlChanges.push('replace: ' + url);\n this._notifyUrlChangeListeners(path + normalizeQueryParams(query), state);\n }\n\n forward() {\n if (this._historyIndex < this._history.length - 1) {\n this._historyIndex++;\n this._subject.next({\n 'url': this.path(),\n 'state': this.getState(),\n 'pop': true,\n 'type': 'popstate',\n });\n }\n }\n\n back() {\n if (this._historyIndex > 0) {\n this._historyIndex--;\n this._subject.next({\n 'url': this.path(),\n 'state': this.getState(),\n 'pop': true,\n 'type': 'popstate',\n });\n }\n }\n\n historyGo(relativePosition: number = 0): void {\n const nextPageIndex = this._historyIndex + relativePosition;\n if (nextPageIndex >= 0 && nextPageIndex < this._history.length) {\n this._historyIndex = nextPageIndex;\n this._subject.next({\n 'url': this.path(),\n 'state': this.getState(),\n 'pop': true,\n 'type': 'popstate',\n });\n }\n }\n\n onUrlChange(fn: (url: string, state: unknown) => void): VoidFunction {\n this._urlChangeListeners.push(fn);\n\n this._urlChangeSubscription ??= this.subscribe((v) => {\n this._notifyUrlChangeListeners(v.url, v.state);\n });\n\n return () => {\n const fnIndex = this._urlChangeListeners.indexOf(fn);\n this._urlChangeListeners.splice(fnIndex, 1);\n\n if (this._urlChangeListeners.length === 0) {\n this._urlChangeSubscription?.unsubscribe();\n this._urlChangeSubscription = null;\n }\n };\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,\n onThrow?: ((error: any) => void) | null,\n onReturn?: (() => void) | null,\n ): SubscriptionLike {\n return this._subject.subscribe({\n next: onNext,\n error: onThrow ?? undefined,\n complete: onReturn ?? undefined,\n });\n }\n\n normalize(url: string): string {\n return null!;\n }\n\n private pushHistory(path: string, query: string, state: any) {\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}\n\nclass LocationState {\n constructor(\n public path: string,\n public query: string,\n public state: any,\n ) {}\n}\n","/**\n * @license\n * Copyright Google LLC 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.dev/license\n */\n\nimport {LocationStrategy} from '@angular/common';\nimport {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\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 = new Subject<_MockPopStateEvent>();\n private stateChanges: any[] = [];\n constructor() {\n super();\n }\n\n simulatePopState(url: string): void {\n this.internalPath = url;\n this._subject.next(new _MockPopStateEvent(this.path()));\n }\n\n override path(includeHash: boolean = false): string {\n return this.internalPath;\n }\n\n override 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 override 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 override 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 override onPopState(fn: (value: any) => void): void {\n this._subject.subscribe({next: fn});\n }\n\n override getBaseHref(): string {\n return this.internalBaseHref;\n }\n\n override 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 override forward(): void {\n throw 'not implemented';\n }\n\n override getState(): unknown {\n return this.stateChanges[(this.stateChanges.length || 1) - 1];\n }\n}\n\nclass _MockPopStateEvent {\n pop: boolean = true;\n type: string = 'popstate';\n constructor(public newUrl: string) {}\n}\n","/**\n * @license\n * Copyright Google LLC 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.dev/license\n */\n\nimport {Location, LocationStrategy} from '../../index';\nimport {Provider} from '@angular/core';\n\nimport {SpyLocation} from './location_mock';\nimport {MockLocationStrategy} from './mock_location_strategy';\n\n/**\n * Returns mock providers for the `Location` and `LocationStrategy` classes.\n * The mocks are helpful in tests to fire simulated location events.\n *\n * @publicApi\n */\nexport function provideLocationMocks(): Provider[] {\n return [\n {provide: Location, useClass: SpyLocation},\n {provide: LocationStrategy, useClass: MockLocationStrategy},\n ];\n}\n"],"names":["FakeNavigation","normalizeQueryParams","LocationStrategy"],"mappings":"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"}