blob: 7949a0928ec359b085ed261b99285fb01d31a8b7 [file] [log] [blame]
{"version":3,"file":"testing.js","sources":["../../../packages/common/testing/src/location_mock.js","../../../packages/common/testing/src/mock_location_strategy.js","../../../packages/common/testing/src/testing.js","../../../packages/common/testing/public_api.js","../../../packages/common/testing/testing.js"],"sourcesContent":["/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nimport { EventEmitter, Injectable } from '@angular/core';\n/**\n * A spy for {\\@link Location} that allows tests to fire simulated location events.\n *\n * \\@experimental\n */\nexport class SpyLocation {\n constructor() {\n this.urlChanges = [];\n this._history = [new LocationState('', '')];\n this._historyIndex = 0;\n /**\n * \\@internal\n */\n this._subject = new EventEmitter();\n /**\n * \\@internal\n */\n this._baseHref = '';\n /**\n * \\@internal\n */\n this._platformStrategy = /** @type {?} */ ((null));\n }\n /**\n * @param {?} url\n * @return {?}\n */\n setInitialPath(url) { this._history[this._historyIndex].path = url; }\n /**\n * @param {?} url\n * @return {?}\n */\n setBaseHref(url) { this._baseHref = url; }\n /**\n * @return {?}\n */\n path() { return this._history[this._historyIndex].path; }\n /**\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\n isCurrentPathEqualTo(path, query = '') {\n const /** @type {?} */ givenPath = path.endsWith('/') ? path.substring(0, path.length - 1) : path;\n const /** @type {?} */ currPath = this.path().endsWith('/') ? this.path().substring(0, this.path().length - 1) : this.path();\n return currPath == givenPath + (query.length > 0 ? ('?' + query) : '');\n }\n /**\n * @param {?} pathname\n * @return {?}\n */\n simulateUrlPop(pathname) {\n this._subject.emit({ 'url': pathname, 'pop': true, 'type': 'popstate' });\n }\n /**\n * @param {?} pathname\n * @return {?}\n */\n simulateHashChange(pathname) {\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 * @param {?} url\n * @return {?}\n */\n prepareExternalUrl(url) {\n if (url.length > 0 && !url.startsWith('/')) {\n url = '/' + url;\n }\n return this._baseHref + url;\n }\n /**\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\n go(path, query = '') {\n path = this.prepareExternalUrl(path);\n if (this._historyIndex > 0) {\n this._history.splice(this._historyIndex + 1);\n }\n this._history.push(new LocationState(path, query));\n this._historyIndex = this._history.length - 1;\n const /** @type {?} */ locationState = this._history[this._historyIndex - 1];\n if (locationState.path == path && locationState.query == query) {\n return;\n }\n const /** @type {?} */ url = path + (query.length > 0 ? ('?' + query) : '');\n this.urlChanges.push(url);\n this._subject.emit({ 'url': url, 'pop': false });\n }\n /**\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\n replaceState(path, query = '') {\n path = this.prepareExternalUrl(path);\n const /** @type {?} */ history = this._history[this._historyIndex];\n if (history.path == path && history.query == query) {\n return;\n }\n history.path = path;\n history.query = query;\n const /** @type {?} */ url = path + (query.length > 0 ? ('?' + query) : '');\n this.urlChanges.push('replace: ' + url);\n }\n /**\n * @return {?}\n */\n forward() {\n if (this._historyIndex < (this._history.length - 1)) {\n this._historyIndex++;\n this._subject.emit({ 'url': this.path(), 'pop': true });\n }\n }\n /**\n * @return {?}\n */\n back() {\n if (this._historyIndex > 0) {\n this._historyIndex--;\n this._subject.emit({ 'url': this.path(), 'pop': true });\n }\n }\n /**\n * @param {?} onNext\n * @param {?=} onThrow\n * @param {?=} onReturn\n * @return {?}\n */\n subscribe(onNext, onThrow, onReturn) {\n return this._subject.subscribe({ next: onNext, error: onThrow, complete: onReturn });\n }\n /**\n * @param {?} url\n * @return {?}\n */\n normalize(url) { return /** @type {?} */ ((null)); }\n}\nSpyLocation.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nSpyLocation.ctorParameters = () => [];\nfunction SpyLocation_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n SpyLocation.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n SpyLocation.ctorParameters;\n /** @type {?} */\n SpyLocation.prototype.urlChanges;\n /** @type {?} */\n SpyLocation.prototype._history;\n /** @type {?} */\n SpyLocation.prototype._historyIndex;\n /**\n * \\@internal\n * @type {?}\n */\n SpyLocation.prototype._subject;\n /**\n * \\@internal\n * @type {?}\n */\n SpyLocation.prototype._baseHref;\n /**\n * \\@internal\n * @type {?}\n */\n SpyLocation.prototype._platformStrategy;\n}\nclass LocationState {\n /**\n * @param {?} path\n * @param {?} query\n */\n constructor(path, query) {\n this.path = path;\n this.query = query;\n }\n}\nfunction LocationState_tsickle_Closure_declarations() {\n /** @type {?} */\n LocationState.prototype.path;\n /** @type {?} */\n LocationState.prototype.query;\n}\n//# sourceMappingURL=location_mock.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nimport { LocationStrategy } from '@angular/common';\nimport { EventEmitter, Injectable } from '@angular/core';\n/**\n * A mock implementation of {\\@link LocationStrategy} that allows tests to fire simulated\n * location events.\n *\n * \\@stable\n */\nexport class MockLocationStrategy extends LocationStrategy {\n constructor() {\n super();\n this.internalBaseHref = '/';\n this.internalPath = '/';\n this.internalTitle = '';\n this.urlChanges = [];\n /**\n * \\@internal\n */\n this._subject = new EventEmitter();\n }\n /**\n * @param {?} url\n * @return {?}\n */\n simulatePopState(url) {\n this.internalPath = url;\n this._subject.emit(new _MockPopStateEvent(this.path()));\n }\n /**\n * @param {?=} includeHash\n * @return {?}\n */\n path(includeHash = false) { return this.internalPath; }\n /**\n * @param {?} internal\n * @return {?}\n */\n prepareExternalUrl(internal) {\n if (internal.startsWith('/') && this.internalBaseHref.endsWith('/')) {\n return this.internalBaseHref + internal.substring(1);\n }\n return this.internalBaseHref + internal;\n }\n /**\n * @param {?} ctx\n * @param {?} title\n * @param {?} path\n * @param {?} query\n * @return {?}\n */\n pushState(ctx, title, path, query) {\n this.internalTitle = title;\n const /** @type {?} */ url = path + (query.length > 0 ? ('?' + query) : '');\n this.internalPath = url;\n const /** @type {?} */ externalUrl = this.prepareExternalUrl(url);\n this.urlChanges.push(externalUrl);\n }\n /**\n * @param {?} ctx\n * @param {?} title\n * @param {?} path\n * @param {?} query\n * @return {?}\n */\n replaceState(ctx, title, path, query) {\n this.internalTitle = title;\n const /** @type {?} */ url = path + (query.length > 0 ? ('?' + query) : '');\n this.internalPath = url;\n const /** @type {?} */ externalUrl = this.prepareExternalUrl(url);\n this.urlChanges.push('replace: ' + externalUrl);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onPopState(fn) { this._subject.subscribe({ next: fn }); }\n /**\n * @return {?}\n */\n getBaseHref() { return this.internalBaseHref; }\n /**\n * @return {?}\n */\n back() {\n if (this.urlChanges.length > 0) {\n this.urlChanges.pop();\n const /** @type {?} */ nextUrl = this.urlChanges.length > 0 ? this.urlChanges[this.urlChanges.length - 1] : '';\n this.simulatePopState(nextUrl);\n }\n }\n /**\n * @return {?}\n */\n forward() { throw 'not implemented'; }\n}\nMockLocationStrategy.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nMockLocationStrategy.ctorParameters = () => [];\nfunction MockLocationStrategy_tsickle_Closure_declarations() {\n /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */\n MockLocationStrategy.decorators;\n /**\n * @nocollapse\n * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}\n */\n MockLocationStrategy.ctorParameters;\n /** @type {?} */\n MockLocationStrategy.prototype.internalBaseHref;\n /** @type {?} */\n MockLocationStrategy.prototype.internalPath;\n /** @type {?} */\n MockLocationStrategy.prototype.internalTitle;\n /** @type {?} */\n MockLocationStrategy.prototype.urlChanges;\n /**\n * \\@internal\n * @type {?}\n */\n MockLocationStrategy.prototype._subject;\n}\nclass _MockPopStateEvent {\n /**\n * @param {?} newUrl\n */\n constructor(newUrl) {\n this.newUrl = newUrl;\n this.pop = true;\n this.type = 'popstate';\n }\n}\nfunction _MockPopStateEvent_tsickle_Closure_declarations() {\n /** @type {?} */\n _MockPopStateEvent.prototype.pop;\n /** @type {?} */\n _MockPopStateEvent.prototype.type;\n /** @type {?} */\n _MockPopStateEvent.prototype.newUrl;\n}\n//# sourceMappingURL=mock_location_strategy.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nexport { SpyLocation } from './location_mock';\nexport { MockLocationStrategy } from './mock_location_strategy';\n//# sourceMappingURL=testing.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport { SpyLocation, MockLocationStrategy } from './src/testing';\n// This file only reexports content of the `src` folder. Keep it that way.\n//# sourceMappingURL=public_api.js.map","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\nexport { SpyLocation, MockLocationStrategy } from './public_api';\n//# sourceMappingURL=testing.js.map"],"names":[],"mappings":"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"}