UNPKG

@ngneat/spectator

Version:

A powerful tool to simplify your Angular tests

1 lines 211 kB
{"version":3,"file":"ngneat-spectator.mjs","sources":["../../../projects/spectator/src/lib/types.ts","../../../projects/spectator/src/lib/internals/key-parser.ts","../../../projects/spectator/src/lib/event-creators.ts","../../../projects/spectator/src/lib/dispatch-events.ts","../../../projects/spectator/src/lib/dom-selectors.ts","../../../projects/spectator/src/lib/utils.ts","../../../projects/spectator/src/lib/internals/element-focus.ts","../../../projects/spectator/src/lib/internals/query.ts","../../../projects/spectator/src/lib/select-option.ts","../../../projects/spectator/src/lib/type-in-element.ts","../../../projects/spectator/src/lib/base/base-spectator.ts","../../../projects/spectator/src/lib/base/dom-spectator.ts","../../../projects/spectator/src/lib/spectator/spectator.ts","../../../projects/spectator/src/lib/core.ts","../../../projects/spectator/src/lib/internals/rgb-to-hex.ts","../../../projects/spectator/src/lib/matchers.ts","../../../projects/spectator/src/lib/globals-injections.ts","../../../projects/spectator/src/lib/base/initial-module.ts","../../../projects/spectator/src/lib/spectator/initial-module.ts","../../../projects/spectator/src/lib/internals/merge.ts","../../../projects/spectator/src/lib/mock.ts","../../../projects/spectator/src/lib/base/options.ts","../../../projects/spectator/src/lib/spectator/options.ts","../../../projects/spectator/src/lib/spectator/create-factory.ts","../../../projects/spectator/src/lib/spectator-host/spectator-host.ts","../../../projects/spectator/src/lib/internals/node-by-directive.ts","../../../projects/spectator/src/lib/spectator-host/initial-module.ts","../../../projects/spectator/src/lib/spectator-host/host-component.ts","../../../projects/spectator/src/lib/spectator-host/options.ts","../../../projects/spectator/src/lib/spectator-host/create-factory.ts","../../../projects/spectator/src/lib/spectator-directive/spectator-directive.ts","../../../projects/spectator/src/lib/spectator-directive/initial-module.ts","../../../projects/spectator/src/lib/spectator-directive/options.ts","../../../projects/spectator/src/lib/spectator-directive/create-factory.ts","../../../projects/spectator/src/lib/spectator-service/spectator-service.ts","../../../projects/spectator/src/lib/spectator-service/initial-module.ts","../../../projects/spectator/src/lib/spectator-service/options.ts","../../../projects/spectator/src/lib/spectator-service/create-factory.ts","../../../projects/spectator/src/lib/spectator-routing/router-stub.ts","../../../projects/spectator/src/lib/spectator-routing/spectator-routing.ts","../../../projects/spectator/src/lib/spectator-routing/activated-route-stub.ts","../../../projects/spectator/src/lib/spectator-routing/initial-module.ts","../../../projects/spectator/src/lib/spectator-routing/options.ts","../../../projects/spectator/src/lib/spectator-routing/create-factory.ts","../../../projects/spectator/src/lib/spectator-http/spectator-http.ts","../../../projects/spectator/src/lib/spectator-http/initial-module.ts","../../../projects/spectator/src/lib/spectator-http/options.ts","../../../projects/spectator/src/lib/spectator-http/create-factory.ts","../../../projects/spectator/src/lib/spectator-pipe/spectator-pipe.ts","../../../projects/spectator/src/lib/spectator-pipe/initial-module.ts","../../../projects/spectator/src/lib/spectator-pipe/options.ts","../../../projects/spectator/src/lib/spectator-pipe/create-factory.ts","../../../projects/spectator/src/public_api.ts","../../../projects/spectator/src/ngneat-spectator.ts"],"sourcesContent":["import { DebugElement, ElementRef, EventEmitter, InputSignalWithTransform, OnDestroy, OutputRef, Type } from '@angular/core';\n\nimport { DOMSelector } from './dom-selectors';\nimport { Token } from './token';\n\ntype OptionalPropertyNames<T> = {\n  [K in keyof T]-?: undefined extends T[K] ? K : never;\n}[keyof T];\ntype OptionalProperties<T> = Pick<T, OptionalPropertyNames<T>>;\n\nexport type InferInputSignal<T> = T extends InputSignalWithTransform<infer K, infer _> ? K : T;\nexport type InferInputSignals<C> = {\n  [P in keyof C]+?: InferInputSignal<C[P]>;\n};\n\nexport type OptionalsRequired<T> = Required<OptionalProperties<T>> & Partial<T>;\n\nexport type SpectatorElement = string | Element | DebugElement | ElementRef | Window | Document | DOMSelector;\n\nexport type QueryType = Type<any> | DOMSelector | string;\nexport interface QueryOptions<R> {\n  read?: Token<R>;\n  root?: boolean;\n  parentSelector?: Type<any> | string;\n}\n\nexport type OutputType<P> = P extends EventEmitter<infer T> ? T : P extends OutputRef<infer T> ? T : never;\n\nexport type KeysMatching<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];\n\nexport type SelectOptions = string | string[] | HTMLOptionElement | HTMLOptionElement[];\n\nexport type NestedDeferBlocks = {\n  deferBlock: (deferBlockIndex?: number) => DeferBlocks;\n};\n\nexport interface DeferBlocks {\n  renderComplete(): Promise<NestedDeferBlocks>;\n  renderPlaceholder(): Promise<NestedDeferBlocks>;\n  renderLoading(): Promise<NestedDeferBlocks>;\n  renderError(): Promise<NestedDeferBlocks>;\n}\n\nexport interface KeyboardEventOptions {\n  key: string;\n  keyCode: number;\n}\n\nexport function doesServiceImplementsOnDestroy<S extends object>(testedService: S): testedService is S & OnDestroy {\n  return 'ngOnDestroy' in testedService && typeof testedService['ngOnDestroy'] === 'function';\n}\n\nexport function isString(value: any): value is string {\n  return typeof value === 'string';\n}\n\nexport function isNumber(value: any): value is number {\n  return typeof value === 'number';\n}\n\nexport function isType(v: any): v is Type<any> {\n  return typeof v === 'function';\n}\n\nexport function isHTMLOptionElementArray(value: any): value is HTMLOptionElement[] {\n  return Array.isArray(value) && !!value.length && value.every((item) => item instanceof HTMLOptionElement);\n}\n\nexport function isObject(v: any): v is object {\n  return v && typeof v === 'object';\n}\n","import { isNumber, isString, KeyboardEventOptions, isObject } from '../types';\n\nexport interface ModifierKeys {\n  alt?: boolean;\n  control?: boolean;\n  shift?: boolean;\n  meta?: boolean;\n}\n\nexport interface KeyOptions {\n  key: string | false;\n  keyCode: number | false;\n  modifiers: ModifierKeys;\n}\n\nexport const parseKeyOptions = (keyOrKeyCode: string | number | KeyboardEventOptions): KeyOptions => {\n  if (isNumber(keyOrKeyCode) && keyOrKeyCode) {\n    return { key: false, keyCode: keyOrKeyCode, modifiers: {} };\n  }\n\n  if (isString(keyOrKeyCode) && keyOrKeyCode) {\n    return parseKey(keyOrKeyCode as string);\n  }\n\n  if (isObject(keyOrKeyCode)) {\n    const parsedKey = parseKey(keyOrKeyCode.key);\n\n    return {\n      ...parsedKey,\n      keyCode: keyOrKeyCode.keyCode,\n    };\n  }\n\n  throw new Error('keyboard.pressKey() requires a valid key or keyCode');\n};\n\nconst parseKey = (keyStr: string): KeyOptions => {\n  if (keyStr.indexOf('.') < 0 || '.' === keyStr) {\n    return { key: keyStr, keyCode: false, modifiers: {} };\n  }\n\n  const keyParts = keyStr.split('.');\n  const key = keyParts.pop() as string;\n  const modifiers = keyParts.reduce(\n    (mods, part) => {\n      switch (part) {\n        case 'control':\n        case 'ctrl':\n          mods.control = true;\n\n          return mods;\n        case 'shift':\n          mods.shift = true;\n\n          return mods;\n        case 'alt':\n          mods.alt = true;\n\n          return mods;\n        case 'meta':\n        case 'cmd':\n        case 'win':\n          mods.meta = true;\n\n          return mods;\n        default:\n          throw new Error(`invalid key modifier: ${part ? part : 'undefined'}, keyStr: ${keyStr}`);\n      }\n    },\n    { alt: false, control: false, shift: false, meta: false },\n  );\n\n  return { key, keyCode: false, modifiers };\n};\n","/**\n * Credit - Angular Material\n */\n\nimport { parseKeyOptions } from './internals/key-parser';\nimport { KeyboardEventOptions } from './types';\n\n/** Creates a browser MouseEvent with the specified options. */\nexport function createMouseEvent(type: string, x: number = 0, y: number = 0, button: number = 0): MouseEvent {\n  const event = document.createEvent('MouseEvent');\n\n  event.initMouseEvent(type, true, false, window, 0, x, y, x, y, false, false, false, false, button, null);\n\n  // `initMouseEvent` doesn't allow us to pass the `buttons` and\n  // defaults it to 0 which looks like a fake event.\n  Object.defineProperty(event, 'buttons', { get: () => 1 });\n\n  return event;\n}\n\n/**\n * Creates a browser TouchEvent with the specified pointer coordinates.\n */\nexport function createTouchEvent(type: string, pageX: number = 0, pageY: number = 0): UIEvent {\n  // In favor of creating events that work for most of the browsers, the event is created\n  // as a basic UI Event. The necessary details for the event will be set manually.\n  const event = new UIEvent(type, {\n    bubbles: true,\n    cancelable: true,\n    view: window,\n    detail: 0,\n  });\n\n  // Most of the browsers don't have a \"initTouchEvent\" method that can be used to define\n  // the touch details.\n  Object.defineProperties(event, {\n    touches: { value: [{ pageX, pageY }] },\n  });\n\n  return event;\n}\n\n/** Dispatches a keydown event from an element. */\nexport function createKeyboardEvent(type: string, keyOrKeyCode: string | number | KeyboardEventOptions, target?: Element): KeyboardEvent {\n  const { key, keyCode, modifiers } = parseKeyOptions(keyOrKeyCode);\n\n  const event = document.createEvent('KeyboardEvent') as any;\n  const originalPreventDefault = event.preventDefault;\n\n  // Firefox does not support `initKeyboardEvent`, but supports `initKeyEvent`.\n  if (event.initKeyEvent) {\n    event.initKeyEvent(type, true, true, window, modifiers.control, modifiers.alt, modifiers.shift, modifiers.meta, keyCode);\n  } else {\n    // `initKeyboardEvent` expects to receive modifiers as a whitespace-delimited string\n    // See https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyboardEvent\n    const modifiersStr = (\n      modifiers.control ? 'Control ' : '' + modifiers.alt ? 'Alt ' : '' + modifiers.shift ? 'Shift ' : '' + modifiers.meta ? 'Meta' : ''\n    ).trim();\n    event.initKeyboardEvent(\n      type,\n      true /* canBubble */,\n      true /* cancelable */,\n      window /* view */,\n      0 /* char */,\n      key /* key */,\n      0 /* location */,\n      modifiersStr /* modifiersList */,\n      false /* repeat */,\n    );\n  }\n\n  // Webkit Browsers don't set the keyCode when calling the init function.\n  // See related bug https://bugs.webkit.org/show_bug.cgi?id=16735\n  Object.defineProperties(event, {\n    code: { get: () => keyCode },\n    keyCode: { get: () => keyCode },\n    key: { get: () => key },\n    target: { get: () => target },\n    altKey: { get: () => !!modifiers.alt },\n    ctrlKey: { get: () => !!modifiers.control },\n    shiftKey: { get: () => !!modifiers.shift },\n    metaKey: { get: () => !!modifiers.meta },\n  });\n\n  // IE won't set `defaultPrevented` on synthetic events so we need to do it manually.\n  // eslint-disable-next-line\n  event.preventDefault = function () {\n    Object.defineProperty(event, 'defaultPrevented', { configurable: true, get: () => true });\n\n    return originalPreventDefault.apply(this, arguments);\n  };\n\n  return event;\n}\n\n/** Creates a fake event object with any desired event type. */\nexport function createFakeEvent(type: string, canBubble: boolean = false, cancelable: boolean = true): Event {\n  const event = document.createEvent('Event');\n  event.initEvent(type, canBubble, cancelable);\n\n  return event;\n}\n","/**\n * Credit - Angular Material\n */\n\nimport { createFakeEvent, createKeyboardEvent, createMouseEvent, createTouchEvent } from './event-creators';\nimport { KeyboardEventOptions } from './types';\n\n/**\n * Utility to dispatch any event on a Node.\n *\n * @publicApi\n */\nexport function dispatchEvent<E extends Event = Event>(node: Node | Window, event: E): E {\n  node.dispatchEvent(event);\n\n  return event;\n}\n\n/**\n * Shorthand to dispatch a fake event on a specified node.\n *\n * dispatchFakeEvent(element, 'mousedown');\n *\n * @publicApi\n */\nexport function dispatchFakeEvent(node: Node | Window, type: string, canBubble?: boolean): Event {\n  return dispatchEvent(node, createFakeEvent(type, canBubble));\n}\n\n/**\n * Shorthand to dispatch a keyboard event with a specified key.\n *\n *  dispatchKeyboardEvent(calendarBodyEl, 'keydown', 'LEFT_ARROW');\n *\n *  @publicApi\n */\nexport function dispatchKeyboardEvent(\n  node: Node,\n  type: string,\n  keyOrKeyCode: string | number | KeyboardEventOptions,\n  target?: Element,\n): KeyboardEvent {\n  return dispatchEvent(node, createKeyboardEvent(type, keyOrKeyCode, target));\n}\n\n/**\n * Shorthand to dispatch a mouse event on the specified coordinates.\n *\n *  dispatchMouseEvent(rippleTarget, 'mousedown', 50, 75);\n *  dispatchMouseEvent(rippleTarget, 'mouseup');\n *\n *  @publicApi\n */\nexport function dispatchMouseEvent(\n  node: Node,\n  type: string,\n  x: number = 0,\n  y: number = 0,\n  event: MouseEvent = createMouseEvent(type, x, y),\n): MouseEvent {\n  return dispatchEvent(node, event);\n}\n\n/**\n * Shorthand to dispatch a touch event on the specified coordinates.\n *\n * dispatchTouchEvent(rippleTarget, 'touchstart');\n *\n * @publicApi\n */\nexport function dispatchTouchEvent(node: HTMLElement | Window | Document, type: string, x: number = 0, y: number = 0): Event {\n  return dispatchEvent(node, createTouchEvent(type, x, y));\n}\n","import {\n  Matcher,\n  MatcherFunction,\n  MatcherOptions,\n  NormalizerFn,\n  SelectorMatcherOptions,\n  queries as DOMQueries,\n  getDefaultNormalizer,\n  ByRoleOptions,\n} from '@testing-library/dom';\nimport { ARIARole } from 'aria-query';\n\ninterface MandatorySelectorMatchingOptions extends MatcherOptions {\n  selector: SelectorMatcherOptions['selector'];\n}\n\nexport class DOMSelector {\n  // Wrap selector functions in a class to make reflection easier in getChild\n  constructor(public readonly execute: (el: HTMLElement) => HTMLElement[]) {}\n}\n\nexport type DOMSelectorFactory<TOptions extends MatcherOptions = MatcherOptions> = (matcher: Matcher, options?: TOptions) => DOMSelector;\n\nexport const byLabel: DOMSelectorFactory = (matcher, options) =>\n  new DOMSelector((el) => DOMQueries.queryAllByLabelText(el, matcher, options));\n\nexport const byPlaceholder: DOMSelectorFactory = (matcher, options) =>\n  new DOMSelector((el) => DOMQueries.queryAllByPlaceholderText(el, matcher, options));\n\nexport const byText: DOMSelectorFactory<SelectorMatcherOptions> = (matcher, options) =>\n  new DOMSelector((el) => DOMQueries.queryAllByText(el, matcher, options));\n\nexport const byTextContent = (matcher: Matcher, options: MandatorySelectorMatchingOptions): DOMSelector => {\n  let textContentMatcher: Matcher;\n  const normalizer: NormalizerFn = options?.normalizer || getDefaultNormalizer(options);\n  const getTextContent = (elem: Element | null): string => normalizer(elem?.textContent ?? '');\n\n  if (typeof matcher === 'string' || typeof matcher === 'number') {\n    textContentMatcher = (_, elem) => {\n      if (options?.exact === false) {\n        return getTextContent(elem).toLowerCase().indexOf(matcher.toString().toLowerCase()) >= 0;\n      }\n\n      return getTextContent(elem) === matcher.toString();\n    };\n  } else if (matcher instanceof RegExp) {\n    textContentMatcher = (_, elem) => matcher.test(getTextContent(elem));\n  } else if (typeof matcher === 'function') {\n    textContentMatcher = (_, elem) => matcher(getTextContent(elem), elem);\n  } else {\n    throw new Error(`Matcher type not supported: ${typeof matcher}`);\n  }\n\n  return new DOMSelector((el) => DOMQueries.queryAllByText(el, textContentMatcher, options));\n};\n\nexport const byAltText: DOMSelectorFactory = (matcher, options) =>\n  new DOMSelector((el) => DOMQueries.queryAllByAltText(el, matcher, options));\n\nexport const byTitle: DOMSelectorFactory = (matcher, options) => new DOMSelector((el) => DOMQueries.queryAllByTitle(el, matcher, options));\n\nexport const byTestId: DOMSelectorFactory = (matcher, options) =>\n  new DOMSelector((el) => DOMQueries.queryAllByTestId(el, matcher, options));\n\nexport const byValue: DOMSelectorFactory = (matcher, options) =>\n  new DOMSelector((el) => DOMQueries.queryAllByDisplayValue(el, matcher, options));\n\nexport const byRole = (matcher: ARIARole | MatcherFunction | Omit<string, ARIARole>, options?: ByRoleOptions): DOMSelector =>\n  new DOMSelector((el) => DOMQueries.queryAllByRole(el, matcher, options));\n","import { Type, isStandalone } from '@angular/core';\nimport { ModuleMetadata } from './base/initial-module';\n\nexport function isRunningInJsDom() {\n  return navigator.userAgent.includes('Node.js') || navigator.userAgent.includes('jsdom');\n}\n\nexport function coerceArray<T>(value: T | T[]): T[];\nexport function coerceArray<T>(value: T | readonly T[]): readonly T[];\nexport function coerceArray<T>(value: T | T[]): T[] {\n  return Array.isArray(value) ? value : [value];\n}\n\nexport function declareInModule<T>(moduleMetadata: ModuleMetadata, type: Type<T>) {\n  if (isStandalone(type)) {\n    moduleMetadata.imports.push(type);\n  } else {\n    moduleMetadata.declarations.push(type);\n  }\n}\n","import { dispatchFakeEvent } from '../dispatch-events';\nimport { isRunningInJsDom } from '../utils';\n\n/** Property added to HTML Elements to ensure we don't double-patch focus methods on an element. */\nconst IS_FOCUS_PATCHED_PROP = Symbol('isFocusPatched');\n\n/** Ensures that a single set of matching focus and blur events occur when HTMLElement.focus() is called. */\nclass FocusEventWatcher implements EventListenerObject {\n  private readonly priorActiveElement: Element | null;\n\n  /** Set to true when browser sends a blur event for priorActiveElement */\n  private _blurred = false;\n  /** Set to true when browser sends a focus event for element */\n  private _focused = false;\n\n  constructor(private readonly element: HTMLElement) {\n    this.element.addEventListener('focus', this);\n    this.priorActiveElement = element.ownerDocument.activeElement;\n    this.priorActiveElement?.addEventListener('blur', this);\n  }\n\n  public handleEvent({ type }: Event): void {\n    if (type === 'focus') {\n      this._focused = true;\n    } else if (type === 'blur') {\n      this._blurred = true;\n    }\n  }\n\n  /**\n   * If focus and blur events haven't occurred, fire fake ones.\n   */\n  public ensureFocusEvents() {\n    this.element.removeEventListener('focus', this);\n    this.priorActiveElement?.removeEventListener('blur', this);\n\n    // Ensure priorActiveElement is blurred\n    if (!this._blurred && this.priorActiveElement) {\n      dispatchFakeEvent(this.priorActiveElement, 'blur');\n    }\n\n    if (!this._focused) {\n      dispatchFakeEvent(this.element, 'focus'); // Needed to cause focus event\n    }\n  }\n}\n\n/**\n * Patches an element's focus and blur methods to emit events consistently and predictably in tests.\n * This is necessary, because some browsers, like IE11, will call the focus handlers asynchronously,\n * while others won't fire them at all if the browser window is not focused.\n *\n * patchElementFocus(triggerEl);\n */\nexport function patchElementFocus(element: HTMLElement): void {\n  // https://github.com/ngneat/spectator/issues/373 - Don't patch when using JSDOM, eg in Jest\n  if (!isRunningInJsDom() && element[IS_FOCUS_PATCHED_PROP] === undefined) {\n    const originalFocus = element.focus.bind(element);\n    element.focus = (options) => {\n      const focusEventWatcher = new FocusEventWatcher(element);\n\n      // Sets document.activeElement. May or may not send focus + blur events\n      originalFocus(options);\n\n      focusEventWatcher.ensureFocusEvents();\n    };\n    element.blur = () => dispatchFakeEvent(element, 'blur');\n    element[IS_FOCUS_PATCHED_PROP] = true;\n  }\n}\n","import { ComponentRef, DebugElement } from '@angular/core';\nimport { By } from '@angular/platform-browser';\n\nimport { DOMSelector } from '../dom-selectors';\nimport { isString, QueryOptions, QueryType } from '../types';\n\nexport function getChildren<R>(debugElementRoot: DebugElement): (directiveOrSelector: QueryType, options?: QueryOptions<R>) => R[] {\n  return (directiveOrSelector: QueryType, options: QueryOptions<R> = { root: false, read: undefined }): R[] => {\n    if (directiveOrSelector instanceof DOMSelector) {\n      return directiveOrSelector.execute(debugElementRoot.nativeElement) as any[];\n    }\n\n    const debugElements = debugElementRoot.queryAll(\n      isString(directiveOrSelector) ? By.css(directiveOrSelector) : By.directive(directiveOrSelector),\n    );\n\n    if (options.read) {\n      return debugElements.map((debug) => debug.injector.get(options.read));\n    }\n\n    if (isString(directiveOrSelector)) {\n      return debugElements.map((debug) => debug.nativeElement);\n    }\n\n    return debugElements.map((debug) => debug.injector.get(directiveOrSelector));\n  };\n}\n\n/**\n * @internal\n * Set props on a component. This is used in `createComponent` and `createRoutingFactory` since we have direct access to the componentRef.\n */\nexport function setProps<T, K extends string | number | symbol, V>(componentRef: ComponentRef<T>, key: K, value: V): T & { [KEY in K]: V };\nexport function setProps<T, KV>(componentRef: ComponentRef<T>, keyValues?: KV): T & KV;\nexport function setProps(componentRef: ComponentRef<any>, keyOrKeyValues: any, value?: any): any {\n  if (isString(keyOrKeyValues)) {\n    componentRef.setInput(keyOrKeyValues, value);\n  } else {\n    // eslint-disable-next-line guard-for-in\n    for (const p in keyOrKeyValues) {\n      componentRef.setInput(p, keyOrKeyValues[p]);\n    }\n  }\n\n  return componentRef.instance;\n}\n\n/**\n * @internal\n * Set props on a host component. This is used in `createHostFactory`, `createDirectiveFactory` and `createPipeFactory`.\n * As these factories contain a custom host component, we set properties on this host component rather than the tested component itself.\n * Setting props on the component that's being tested is not possible as we don't have access to its componentRef.\n */\nexport function setHostProps<T, K extends string | number | symbol, V>(\n  componentRef: ComponentRef<T>,\n  key: K,\n  value: V,\n): T & { [KEY in K]: V };\nexport function setHostProps<T, KV>(componentRef: ComponentRef<T>, keyValues?: KV): T & KV;\nexport function setHostProps(componentRef: ComponentRef<any>, keyOrKeyValues: any, value?: any): any {\n  if (isString(keyOrKeyValues)) {\n    componentRef.instance[keyOrKeyValues] = value;\n  } else {\n    // eslint-disable-next-line guard-for-in\n    for (const p in keyOrKeyValues) {\n      componentRef.instance[p] = keyOrKeyValues[p];\n    }\n  }\n\n  return componentRef.instance;\n}\n","import { dispatchFakeEvent } from './dispatch-events';\nimport { isString, isHTMLOptionElementArray, SelectOptions } from './types';\n\n/**\n * Focuses a select element, selects the correct options and dispatches\n * the `change` event, simulating the user selecting an option\n * @param options Options to be selected.\n * @param element Element onto which to select the options.\n * @param config Object with extra config to dispatch change event when option selected\n *\n * selectOption('al' | ['al', 'ab'], select, config);\n */\nexport function selectOption(\n  options: SelectOptions,\n  element: HTMLElement | HTMLSelectElement | Document | Window,\n  config: { emitEvents: boolean },\n): void {\n  if (!(element instanceof HTMLSelectElement)) {\n    return;\n  }\n\n  element.focus();\n\n  if (isString(options)) {\n    const option: HTMLOptionElement | null = element.querySelector(`option[value=\"${options}\"]`);\n    if (!option) {\n      return;\n    }\n\n    setOptionSelected(option, element, config);\n  } else if (options instanceof HTMLOptionElement) {\n    setOptionSelected(options, element, config);\n  } else {\n    if (!element.multiple) {\n      return;\n    }\n\n    if (isHTMLOptionElementArray(options)) {\n      options.forEach((option) => setOptionSelected(option, element, config));\n    } else {\n      element.querySelectorAll('option').forEach((opt) => {\n        if (options.includes(opt.value)) {\n          setOptionSelected(opt, element, config);\n        }\n      });\n    }\n  }\n}\n\n/**\n * Set the option in the HTMLSelectElement to selected\n * @param option HTMLOptionElement to select\n * @param select HTMLSelectElement to add the options to\n * @param config Object with extra config to dispatch change event when option selected\n *\n * setOptionSelected(option, element, config);\n */\nfunction setOptionSelected(option: HTMLOptionElement, select: HTMLSelectElement, config: { emitEvents: boolean }): void {\n  option.selected = true;\n  if (config.emitEvents) {\n    dispatchFakeEvent(select, 'change', true);\n  }\n}\n","import { dispatchFakeEvent } from './dispatch-events';\n\n/**\n * Focuses an input or textarea, sets its value and dispatches\n * the `input` or `textarea` event, simulating the user typing.\n * @param value Value to be set on the input.\n * @param element Element onto which to set the value.\n *\n * typeInElement('al', input);\n */\nexport function typeInElement(value: string, element: HTMLElement | Document | Window): void {\n  if (!(element instanceof HTMLInputElement) && !(element instanceof HTMLTextAreaElement)) {\n    return;\n  }\n\n  element.focus();\n  element.value = value;\n  dispatchFakeEvent(element, 'input', true);\n}\n","import { TestBed } from '@angular/core/testing';\n\nimport { SpyObject } from '../mock';\nimport { Token } from '../token';\n\n/**\n * @internal\n */\nexport abstract class BaseSpectator {\n  public inject<T>(token: Token<T>): SpyObject<T> {\n    return TestBed.inject ? TestBed.inject(token) : TestBed.get(token);\n  }\n\n  /**\n   * Execute any pending effects.\n   */\n  public flushEffects(): void {\n    TestBed.flushEffects();\n  }\n}\n","import { DebugElement, ElementRef, EventEmitter, OutputEmitterRef, Type } from '@angular/core';\nimport { ComponentFixture, tick } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { Observable } from 'rxjs';\n\nimport { dispatchFakeEvent, dispatchKeyboardEvent, dispatchMouseEvent, dispatchTouchEvent } from '../dispatch-events';\nimport { DOMSelector } from '../dom-selectors';\nimport { createMouseEvent } from '../event-creators';\nimport { patchElementFocus } from '../internals/element-focus';\nimport { getChildren } from '../internals/query';\nimport { SpyObject } from '../mock';\nimport { selectOption } from '../select-option';\nimport { Token } from '../token';\nimport { typeInElement } from '../type-in-element';\nimport { OutputType, KeyboardEventOptions, KeysMatching, QueryOptions, QueryType, SpectatorElement, isString } from '../types';\n\nimport { BaseSpectator } from './base-spectator';\n\nconst KEY_UP = 'keyup';\n\ntype KeysMatchingReturnType<T, V> = keyof { [P in keyof T as T[P] extends V ? P : never]: P } & keyof T;\ntype KeysMatchingOutputFunction<T> = KeysMatchingReturnType<T, OutputEmitterRef<any>>;\ntype KeysMatchingClassicOutput<T> = KeysMatchingReturnType<T, EventEmitter<any>>;\ntype KeysMatchingOutput<T> = KeysMatchingOutputFunction<T> | KeysMatchingClassicOutput<T>;\n\n/**\n * @internal\n */\nexport abstract class DomSpectator<I> extends BaseSpectator {\n  constructor(\n    public fixture: ComponentFixture<any>,\n    public debugElement: DebugElement,\n    protected instance: I,\n    public element: Element,\n  ) {\n    super();\n  }\n\n  public inject<T>(token: Token<T>): SpyObject<T> {\n    return super.inject(token);\n  }\n\n  public detectChanges(): void {\n    this.fixture.detectChanges();\n  }\n\n  public query<R extends Element>(selector: string | DOMSelector, options?: { root: boolean }): R | null;\n  public query<R>(directive: Type<R>, options?: { root: boolean }): R | null;\n  public query<R extends Element>(selector: string | DOMSelector, options?: { parentSelector: Type<any> | string }): R | null;\n  public query<R>(directive: Type<R>, options?: { parentSelector?: Type<any> | string }): R | null;\n  public query<R>(\n    directiveOrSelector: Type<any> | string,\n    options: { read: Token<R>; root?: boolean; parentSelector?: Type<any> | string },\n  ): R | null;\n  public query<R>(directiveOrSelector: QueryType, options?: QueryOptions<R>): R | Element | null {\n    if ((options || {}).root) {\n      if (isString(directiveOrSelector)) {\n        return document.querySelector(directiveOrSelector);\n      }\n\n      if (directiveOrSelector instanceof DOMSelector) {\n        return directiveOrSelector.execute(document as any)[0] || null;\n      }\n\n      return getChildren<R>(this.getRootDebugElement())(directiveOrSelector, options)[0] || null;\n    }\n\n    if (options?.parentSelector) {\n      const debugElement = this.getDebugElement(options.parentSelector);\n      if (!debugElement) {\n        /* eslint-disable no-console */\n        console.error(`${directiveOrSelector} does not exists`);\n        return null;\n      }\n\n      return (\n        getChildren<R>(debugElement as DebugElement)(directiveOrSelector, {\n          root: options.root,\n          read: options.read,\n        })[0] || null\n      );\n    }\n\n    return getChildren<R>(this.debugElement)(directiveOrSelector, options)[0] || null;\n  }\n\n  public queryAll<R extends Element>(selector: string | DOMSelector, options?: { root: boolean }): R[];\n  public queryAll<R>(directive: Type<R>, options?: { root: boolean }): R[];\n  public queryAll<R extends Element>(selector: string | DOMSelector, options?: { parentSelector: Type<any> | string }): R[];\n  public queryAll<R>(directive: Type<R>, options?: { parentSelector: Type<any> | string }): R[];\n  public queryAll<R>(\n    directiveOrSelector: Type<any> | string,\n    options: { read: Token<R>; root?: boolean; parentSelector?: Type<any> | string },\n  ): R[];\n  public queryAll<R>(directiveOrSelector: QueryType, options?: QueryOptions<R>): R[] | Element[] {\n    if ((options || {}).root) {\n      if (isString(directiveOrSelector)) {\n        return Array.from(document.querySelectorAll(directiveOrSelector));\n      }\n\n      if (directiveOrSelector instanceof DOMSelector) {\n        return directiveOrSelector.execute(document as any);\n      }\n\n      return getChildren<R>(this.getRootDebugElement())(directiveOrSelector, options);\n    }\n\n    if (options?.parentSelector) {\n      const debugElement = this.getDebugElement(options.parentSelector);\n      if (!debugElement) {\n        /* eslint-disable no-console */\n        console.error(`${directiveOrSelector} does not exists`);\n        return [];\n      }\n\n      return getChildren<R>(debugElement as DebugElement)(directiveOrSelector, {\n        root: options.root,\n        read: options.read,\n      });\n    }\n\n    return getChildren<R>(this.debugElement)(directiveOrSelector, options);\n  }\n\n  public queryLast<R extends Element>(selector: string | DOMSelector, options?: { root: boolean }): R | null;\n  public queryLast<R>(directive: Type<R>, options?: { root: boolean }): R | null;\n  public queryLast<R extends Element>(selector: string | DOMSelector, options?: { parentSelector: Type<any> | string }): R | null;\n  public queryLast<R>(directive: Type<R>, options?: { parentSelector: Type<any> | string }): R | null;\n  public queryLast<R>(\n    directiveOrSelector: Type<any> | string,\n    options: { read: Token<R>; root?: boolean; parentSelector?: Type<any> | string },\n  ): R | null;\n  public queryLast<R>(directiveOrSelector: QueryType, options?: QueryOptions<R>): R | Element | null {\n    let result: (R | Element)[] = [];\n\n    if ((options || {}).root) {\n      if (isString(directiveOrSelector)) {\n        result = Array.from(document.querySelectorAll(directiveOrSelector));\n      } else if (directiveOrSelector instanceof DOMSelector) {\n        result = directiveOrSelector.execute(document as any);\n      } else {\n        result = getChildren<R>(this.getRootDebugElement())(directiveOrSelector, options);\n      }\n    } else if (options?.parentSelector) {\n      const debugElement = this.getDebugElement(options.parentSelector);\n      if (!debugElement) {\n        /* eslint-disable no-console */\n        console.error(`${directiveOrSelector} does not exists`);\n        result = [];\n      } else {\n        result = getChildren<R>(debugElement as DebugElement)(directiveOrSelector, {\n          root: options.root,\n          read: options.read,\n        });\n      }\n    } else {\n      result = getChildren<R>(this.debugElement)(directiveOrSelector, options);\n    }\n\n    if (result && result.length) {\n      return result[result.length - 1];\n    }\n\n    return null;\n  }\n\n  public output<K extends KeysMatchingOutput<I> = KeysMatchingOutput<I>>(output: K): I[K];\n  public output<T, K extends KeysMatchingClassicOutput<I> = KeysMatchingClassicOutput<I>>(output: K): Observable<T>;\n  public output<T, K extends KeysMatchingOutputFunction<I> = KeysMatchingOutputFunction<I>>(output: K): OutputEmitterRef<T>;\n  public output<T, K extends KeysMatchingOutput<I>>(output: K): I[K] | Observable<T> | OutputEmitterRef<T> {\n    const eventEmitter = this.instance[output];\n\n    if (!(eventEmitter instanceof Observable) && !(eventEmitter instanceof OutputEmitterRef)) {\n      throw new Error(`${String(output)} is not an @Output or an output function`);\n    }\n\n    return eventEmitter;\n  }\n\n  public tick(millis?: number): void {\n    tick(millis);\n    this.detectChanges();\n  }\n\n  public click(selector: SpectatorElement = this.element): void {\n    const element = this.getNativeElement(selector);\n\n    if (!(element instanceof HTMLElement)) {\n      throw new Error(`Cannot click: ${selector} is not a HTMLElement`);\n    }\n\n    element.click();\n    this.detectChanges();\n  }\n\n  public blur(selector: SpectatorElement = this.element): void {\n    const element = this.getNativeElement(selector);\n\n    if (!(element instanceof HTMLElement)) {\n      throw new Error(`Cannot blur: ${selector} is not a HTMLElement`);\n    }\n\n    patchElementFocus(element);\n    element.blur();\n    this.detectChanges();\n  }\n\n  public focus(selector: SpectatorElement = this.element): void {\n    const element = this.getNativeElement(selector);\n\n    if (!(element instanceof HTMLElement)) {\n      throw new Error(`Cannot focus: ${selector} is not a HTMLElement`);\n    }\n\n    patchElementFocus(element);\n    element.focus();\n    this.detectChanges();\n  }\n\n  public dispatchMouseEvent(\n    selector: SpectatorElement = this.element,\n    type: string,\n    x: number = 0,\n    y: number = 0,\n    event: MouseEvent = createMouseEvent(type, x, y),\n  ): MouseEvent {\n    const element = this.getNativeElement(selector);\n\n    if (!(element instanceof Node)) {\n      throw new Error(`Cannot dispatch mouse event: ${selector} is not a node`);\n    }\n\n    const dispatchedEvent = dispatchMouseEvent(element, type, x, y, event);\n    this.detectChanges();\n\n    return dispatchedEvent;\n  }\n\n  public dispatchKeyboardEvent(selector: SpectatorElement, type: string, keyCode: number, target?: Element): KeyboardEvent;\n  public dispatchKeyboardEvent(selector: SpectatorElement, type: string, key: string, target?: Element): KeyboardEvent;\n  public dispatchKeyboardEvent(selector: SpectatorElement, type: string, keyAndCode: KeyboardEventOptions, target?: Element): KeyboardEvent;\n  public dispatchKeyboardEvent(\n    selector: SpectatorElement = this.element,\n    type: string,\n    keyOrKeyCode: string | number | KeyboardEventOptions,\n    target?: Element,\n  ): KeyboardEvent {\n    const element = this.getNativeElement(selector);\n\n    if (!(element instanceof Node)) {\n      throw new Error(`Cannot dispatch keyboard event: ${selector} is not a node`);\n    }\n\n    const event = dispatchKeyboardEvent(element, type, keyOrKeyCode, target);\n\n    this.detectChanges();\n\n    return event;\n  }\n\n  public dispatchFakeEvent(selector: SpectatorElement = this.element, type: string, canBubble?: boolean): Event {\n    const event = dispatchFakeEvent(this.getNativeElement(selector), type, canBubble);\n    this.detectChanges();\n\n    return event;\n  }\n\n  public triggerEventHandler<C = any, K extends KeysMatching<C, EventEmitter<any> | OutputEmitterRef<any>> = any>(\n    directiveOrSelector: Type<C> | string | DebugElement,\n    eventName: K,\n    eventObj: OutputType<C[K]>,\n    options?: { root: boolean },\n  ) {\n    const triggerDebugElement = this.getDebugElement(directiveOrSelector, options);\n    if (!triggerDebugElement) {\n      /* eslint-disable no-console */\n      console.error(`${directiveOrSelector} does not exists`);\n      return;\n    }\n\n    triggerDebugElement.triggerEventHandler(eventName as string, eventObj);\n\n    this.detectChanges();\n  }\n\n  public get keyboard() {\n    return {\n      pressKey: (key: string, selector: SpectatorElement = this.element, event = KEY_UP) => {\n        this.dispatchKeyboardEvent(selector, event, key);\n      },\n      pressEscape: (selector: SpectatorElement = this.element, event = KEY_UP) => {\n        this.dispatchKeyboardEvent(selector, event, { key: 'Escape', keyCode: 27 });\n      },\n      pressEnter: (selector: SpectatorElement = this.element, event = KEY_UP) => {\n        this.dispatchKeyboardEvent(selector, event, { key: 'Enter', keyCode: 13 });\n      },\n      pressTab: (selector: SpectatorElement = this.element, event = KEY_UP) => {\n        this.dispatchKeyboardEvent(selector, event, { key: 'Tab', keyCode: 9 });\n      },\n      pressBackspace: (selector: SpectatorElement = this.element, event = KEY_UP) => {\n        this.dispatchKeyboardEvent(selector, event, { key: 'Backspace', keyCode: 8 });\n      },\n    };\n  }\n\n  public get mouse() {\n    return {\n      contextmenu: (selector: SpectatorElement = this.element) => {\n        this.dispatchMouseEvent(selector, 'contextmenu');\n      },\n      dblclick: (selector: SpectatorElement = this.element) => {\n        this.dispatchMouseEvent(selector, 'dblclick');\n      },\n    };\n  }\n\n  public dispatchTouchEvent(selector: SpectatorElement = this.element, type: string, x: number = 0, y: number = 0): void {\n    dispatchTouchEvent(this.getNativeElement(selector), type, x, y);\n    this.detectChanges();\n  }\n\n  public typeInElement(value: string, selector: SpectatorElement = this.element): void {\n    typeInElement(value, this.getNativeElement(selector));\n    this.detectChanges();\n  }\n\n  public selectOption(\n    selector: SpectatorElement = this.element,\n    options: string | string[] | HTMLOptionElement | HTMLOptionElement[],\n    config: { emitEvents: boolean } = { emitEvents: true },\n  ): void {\n    if (!selector) {\n      throw new Error(`Cannot find select: ${selector}`);\n    }\n    selectOption(options, this.getNativeElement(selector), config);\n    this.detectChanges();\n  }\n\n  private getNativeElement(selector: SpectatorElement): HTMLElement | Window | Document {\n    let element;\n\n    // Support global objects window and document\n    if (selector === window || selector === document) {\n      return selector as any;\n    }\n\n    if (isString(selector)) {\n      const exists = this.debugElement.query(By.css(selector));\n      if (exists) {\n        element = exists.nativeElement;\n      } else {\n        /* eslint-disable no-console */\n        console.error(`${selector} does not exists`);\n      }\n    } else if (selector instanceof DOMSelector) {\n      element = selector.execute(document as any)[0] || null;\n    } else {\n      if (selector instanceof DebugElement || selector instanceof ElementRef) {\n        element = selector.nativeElement;\n      } else {\n        element = selector;\n      }\n    }\n\n    return element;\n  }\n\n  private getDebugElement(\n    directiveOrSelector: string | DebugElement | Type<unknown>,\n    options?: { root: boolean },\n  ): DebugElement | undefined {\n    const debugElement = options?.root ? this.getRootDebugElement() : this.debugElement;\n\n    if (isString(directiveOrSelector)) {\n      return debugElement.query(By.css(directiveOrSelector));\n    } else if (directiveOrSelector instanceof DebugElement) {\n      return directiveOrSelector;\n    } else {\n      return debugElement.query(By.directive(directiveOrSelector));\n    }\n  }\n\n  private getRootDebugElement(): DebugElement {\n    let element: DebugElement | null | undefined = this.debugElement;\n\n    /**\n     * This bounded loop call is required to access the debug element for\n     * root dom element\n     */\n    while (true) {\n      if (!element) {\n        throw Error('Unable to find root element');\n      }\n\n      if (!element.parent) {\n        // Found the root element\n        return element;\n      }\n\n      element = element.parent;\n    }\n  }\n}\n","import { ChangeDetectorRef, DebugElement } from '@angular/core';\nimport { ComponentFixture, DeferBlockFixture, DeferBlockState } from '@angular/core/testing';\n\nimport { DomSpectator } from '../base/dom-spectator';\nimport { setProps } from '../internals/query';\nimport { SpyObject } from '../mock';\nimport { Token } from '../token';\nimport { DeferBlocks, InferInputSignal, InferInputSignals, NestedDeferBlocks } from '../types';\n\n/**\n * @publicApi\n */\nexport class Spectator<C> extends DomSpectator<C> {\n  constructor(\n    public fixture: ComponentFixture<C>,\n    public debugElement: DebugElement,\n    protected instance: C,\n    public element: HTMLElement,\n  ) {\n    super(fixture, debugElement, instance, element);\n  }\n\n  public get component(): C {\n    return this.instance;\n  }\n\n  public inject<T>(token: Token<T>, fromComponentInjector: boolean = false): SpyObject<T> {\n    if (fromComponentInjector) {\n      return this.debugElement.injector.get(token) as SpyObject<T>;\n    }\n\n    return super.inject(token);\n  }\n\n  public detectComponentChanges(): void {\n    if (this.debugElement) {\n      this.debugElement.injector.get(ChangeDetectorRef).detectChanges();\n    } else {\n      this.detectChanges();\n    }\n  }\n\n  public setInput<K extends keyof C>(input: InferInputSignals<C>): void;\n  public setInput<K extends keyof C>(input: K, inputValue: InferInputSignal<C[K]>): void;\n  public setInput(input: string, inputValue: unknown): void;\n  public setInput(input: any, value?: any): void {\n    setProps(this.fixture.componentRef, input, value);\n    // Force cd on the host component for cases such as: https://github.com/ngneat/spectator/issues/539\n    this.detectChanges();\n\n    // Force cd on the tested component\n    this.debugElement.injector.get(ChangeDetectorRef).detectChanges();\n  }\n\n  public deferBlock(deferBlockIndex = 0): DeferBlocks {\n    return this._deferBlocksForGivenFixture(deferBlockIndex, this.fixture.getDeferBlocks());\n  }\n\n  /**\n   *\n   * @param deferBlockFixtures Defer block fixture\n   * @returns deferBlock object with methods to access the defer blocks\n   */\n  private _deferBlocksForGivenFixture(deferBlockIndex = 0, deferBlockFixtures: Promise<DeferBlockFixture[]>): DeferBlocks {\n    return {\n      renderComplete: async () => {\n        const renderedDeferFixture = await this._renderDeferStateAndGetFixture(\n          DeferBlockState.Complete,\n          deferBlockIndex,\n          deferBlockFixtures,\n        );\n\n        return this._childrenDeferFixtures(renderedDeferFixture);\n      },\n      renderPlaceholder: async () => {\n        const renderedDeferFixture = await this._renderDeferStateAndGetFixture(\n          DeferBlockState.Placeholder,\n          deferBlockIndex,\n          deferBlockFixtures,\n        );\n\n        return this._childrenDeferFixtures(renderedDeferFixture);\n      },\n      renderLoading: async () => {\n        const renderedDeferFixture = await this._renderDeferStateAndGetFixture(\n          DeferBlockState.Loading,\n          deferBlockIndex,\n          deferBlockFixtures,\n        );\n\n        return this._childrenDeferFixtures(renderedDeferFixture);\n      },\n      renderError: async () => {\n        const renderedDeferFixture = await this._renderDeferStateAndGetFixture(DeferBlockState.Error, deferBlockIndex, deferBlockFixtures);\n\n        return this._childrenDeferFixtures(renderedDeferFixture);\n      },\n    };\n  }\n\n  /**\n   * Renders the given defer block state and returns the defer block fixture\n   *\n   * @param deferBlockState complete, placeholder, loading or error\n   * @param deferBlockIndex index of the defer block to render\n   * @param deferBlockFixtures Defer block fixture\n   * @returns Defer block fixture\n   */\n  private async _renderDeferStateAndGetFixture(\n    deferBlockState: DeferBlockState,\n    deferBlockIndex = 0,\n    deferBlockFixtures: Promise<DeferBlockFixture[]>,\n  ): Promise<DeferBlockFixture> {\n    const deferFixture = (await deferBlockFixtures)[deferBlockIndex];\n\n    await deferFixture.render(deferBlockState);\n\n    return deferFixture;\n  }\n\n  /**\n   *\n   * @param deferFixture Defer block fixture\n   * @returns deferBlock object with methods to access the nested defer blocks\n   */\n  private _childrenDeferFixtures(deferFixture: DeferBlockFixture): NestedDeferBlocks {\n    return {\n      deferBlock: (deferBlockIndex = 0) => this._deferBlocksForGivenFixture(deferBlockIndex, deferFixture.getDeferBlocks()),\n    };\n  }\n}\n","import { CustomMatcherFactory } from './matchers';\n\ndeclare var jasmine: any;\n\nexport function addMatchers(matchers: Record<string, CustomMatcherFactory>): void {\n  if (!matchers) return;\n\n  if (typeof jasmine !== 'undefined') {\n    jasmine.addMatchers(matchers);\n  } else {\n    // Jest isn't on the global scope when using ESM so we\n    // assume that it's Jest if Jasmine is not defined\n    const jestExpectExtend = {};\n    for (const key of Object.keys(matchers)) {\n      if (key.startsWith('to')) jestExpectExtend[key] = matchers[key]().compare;\n    }\n\n    (expect as any).extend(jestExpectExtend);\n  }\n}\n","/**\n * @license\n * Copyright Netanel Basal. 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://github.com/NetanelBasal/spectator/blob/master/LICENSE\n */\n\nexport function hex2rgb(hex: string): string {\n  const h = hex.replace('#', '');\n  const matches = h.match(new RegExp('(.{' + h.length / 3 + '})', 'g'))!;\n  const [r, g, b] = matches.map((match) => parseInt(match.length === 1 ? match + match : match, 16));\n\n  return `rgb(${r},${g},${b})`;\n}\n\nexport function isHex(value: string): boolean {\n  return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(value);\n}\n\nexport function trim(value: string): string {\n  return (value || '').replace(/\\s/g, '');\n}\n","/** Credit: https://github.com/unindented/custom-jquery-matchers/tree/master/packages/custom-jquery-matchers */\n\n// This should be imported before `jquery` since this library unpatches the `setTimeout`,\n// so jQuery won't setup a timer, that might be captured by zone.js.\nimport { restoreSetTimeout } from '@ngneat/spectator/internals';\nimport $ from 'jquery';\n\nrestoreSetTimeout();\n\nimport { hex2rgb, isHex, trim } from './internals/rgb-to-hex';\nimport { isHTMLOptionElementArray, isObject } from './types';\nimport { isRunningInJsDom, coerceArray } from './utils';\n\nexport interface CustomMatcherFactory {\n  (): CustomMatcher;\n}\n\nexport interface CustomMatcher {\n  compare<T>(actual: T, expected: T, ...args: any[]): CustomMatcherResult;\n}\n\nexport interface CustomMatcherResult {\n  pass: boolean;\n  message: () => string;\n}\n\nconst hasProperty = (actual: unknown, expected: unknown): boolean => {\n  return expected === undefined ? actual !== undefined : actual === expected;\n};\n\nconst containsProperty = (actual: string, expected: unknown): boolean => {\n  return expected === undefined ? true : actual.includes(expected as string);\n};\n\nconst checkProperty = (\n  el: HTMLElement,\n  prop: object,\n  predicate: (actual, expected) => boolean,\n): { pass: boolean; message: () => string } => {\n  let pass = false;\n  let failing = '';\n\n  for (const key of Object.keys(prop)) {\n    const actual = $(el).prop(key);\n    const addendum = prop[key] !== undefined ? ` with value '${prop[key]}'` : '';\n\n    pass = predicate(actual, prop[key]);\n    failing = !pass ? `'${prop}'${addendum}, but had '${actual}'` : '';\n  }\n\n  const message = () => `Expected element${pass ? ' not' : ''} to have property ${failing}`;\n\n  return { pass, message };\n};\n\nconst hasCss = (el: HTMLElement, css: { [key: string]: string }) => {\n  let prop;\n  let value;\n  const $el = $(el);\n  for (prop in css) {\n    if (css.hasOwnProperty(prop)) {\n      value = css[prop];\n\n      if (isHex(value)) {\n        value = hex2rgb(css[prop]);\n      }\n\n      if (value === 'auto' && $el.get(0).style[prop] === 'auto') {\n        continue;\n      }\n\n      if (\n        trim($el.get(0).style[prop]) !== trim(value) &&\n        trim(el.style[prop]) !== trim(value) &&\n        trim(el.style.getPropertyValue(prop)) !== trim(value)\n      ) {\n        return false;\n      }\n    }\n  }\n\n  return true;\n};\n\nconst hasSameText = (\n  el: HTMLElement,\n  expected: string | string[] | ((s: string) => boolean),\n  options: {\n    exact: boolean;\n    trim: boolean;\n  },\n) => {\n  if (expected && Array.isArray(expected)) {\n    let actual: string;\n    let pass = false;\n    let failing: string;\n\n    $(el).each((i, e) => {\n      actual = options.exact && !options.trim ? $(e).text() : $.trim($(e).text());\n      pass = options.exact ? actual === expected[i] : actual.includes(expected[i]);\n      if (!pass) {\n        failing = expected[i];\n\n        return false;\n      }\n    });\n\n    const message = () =>\n      `Expected element${pass ? ' not' : ''} to have${options.exact ? ' exact' : ''} text '${failing}', but had '${actual}'`;\n\n    return { pass, message };\n  }\n\n  const actual = options.exact && !options.trim ? $(el).text() : $.trim($(el).text());\n\n  if (expected && typeof expected !== 'string') {\n    const pass = expected(actual);\n    const message = () =>\n      `Expected element${pass ? ' not' : ''} to have${options.exact ? ' exact' : ''} text matching '${expected}',` + ` but had '${actual}'`;\n\n    return { pass, message };\n  }\n\n  const pass = options.exact && !Array.isArray(expected) ? actual === expected : actual.indexOf(expected) !== -1;\n  const message = () =>\n    `Expected element${pass ? ' not' : ''} to have${options.exact ? ' exact' : ''} text '${expected}', but had '${actual}'`;\n\n  return { pass, message };\n};\n\nconst comparator =\n  (func): CustomMatcherFactory =>\n  () => ({\n    compare: func,\n  });\n\n/**\n *\n * expect('.zippy__content').not.toExist();\n */\nexport const toExist = comparator((el: string | Element) => {\n  const actual = $(el).length;\n  const pass = actual > 0;\n  const message = () => `Expected ${el} element${pass ? ' not' : ''} to exist`;\n\n  return { pass, message };\n});\n\n/**\n *\n * expect('.zippy__content').toHaveLength(3);\n */\nexport const toHaveLength = comparator((el: string, expected: number) => {\n  const actual = $(el).length;\n  const pass = actual === expected;\n  const message = () => `Expected element${pass ? ' not' : ''} to have length ${expected}, but had ${actual}`;\n\n  return { pass, message };\n});\n\n/**\n *\n * expect('.zippy__content').toHaveId('ID');\n */\nexport const toHaveId = comparator((el, expected) => {\n  const actual = $(el).attr('id');\n  const pass = actual === expected;\n  const message = () => `Expected element${pass ? ' not' : ''} to have ID '${expected}', but had '${actual}'`;\n\n  return { pass, message };\n});\n\n/**\n * This validates classes in strict order. If you want to validate classes in any order,\n * just set the strict config option to false.\n *\n * expect('.zippy__content').toHaveClass('class');\n * expect('.zippy__content').toHaveClass('class-a, class-b');\n * expect('.zippy__content').toHaveClass(['class-a, class-b']);\n * expect('.zippy__content').toHaveClass(['class-b, class-a']);\n * expect('.zippy__content').not.toHaveClass(['class-b, class-a'], { strict: true });\n */\nexport const toHaveClass = comparator((el, expected: string | string[], options: { strict: boolean } = { strict: true }) => {\n  if (expected && Array.isArray(expected)) {\n    const actual: string = $(el).attr('class');\n    const expectedClasses = expected.join(' ');\n    const pass = options.strict ? $(el).hasClass(expectedClasses) : expected.every((e) => $(el).hasClass(e));\n    const message = () => `Expected element${pass ? ' not' : ''} to have value '${expectedClasses}', but had '${actual}'`;\n\n    return { pass, message };\n  }\n\n  const actual = $(el).attr('class');\n  const pass = $(el).hasClass(expected);\n  const message = () => `Expected element${pass ? ' not' : ''} to have class '${expected}', but had '${actual}'`;\n\n  return { pass, message };\n});\n\n/**\n * expect(host.query('.zippy')).toHaveAttribute('id', 'zippy');\n */\nexport const toHaveAttribute = comparator((el, attr: string | object, val) => {\n  if (isObject(attr)) {\n    let pass = false;\n    let failing: string;\n\n    for (const key of Object.keys(attr)) {\n      const actual = $(el).attr(key);\n      const addendum = attr[key] !== undefined ? ` with value '${attr[key]}'` : '';\n      pass = hasProperty(actual, attr[key]);\n      failing = !pass ? `'${attr}'${addendum}, but had '${actual}'` : '';\n    }\n    const message = () => `Expected element${pass ? ' not' : ''} to have attribute ${failing}`;\n\n    return { pass, message };\n  }\n\n  const actual = $(el).attr(attr);\n  const addendum = val !== undefined ? ` with value '${val}'` : '';\n  const pass = hasProperty(actual, val);\n  const message = () => `Expected element${pass ? ' not' : ''} to have attribute '${attr}'${addendum}, but had '${actual}'`;\n\n  return { pass, message };\n});\n\n/**\n *  expect(host.query('.checkbox')).toHaveProperty('checked', true);\n *  expect(host.query('.checkbox')).toHaveProperty({checked: true});\n */\nexport const toHaveProperty = comparator((el, prop, val) => {\n  if (isObject(prop)) {\n    return checkProperty(el, prop, hasProperty);\n  }\n\n  const actual = $(el).prop(prop);\n  const addendum = val !== undefined ? ` with value '${val}'` : '';\n  const pass = hasProperty(actual, val);\n  const message = () => `Expected element${pass ? ' not' : ''} to have property '${prop}'${addendum}, but had '${actual}'`;\n\n  return { pass, message };\n});\n\nexport const toContainProperty = comparator((el, prop, val) => {\n  if (isObject(prop)) {\n    return checkProperty(el, prop, containsProperty);\n  }\n\n  const actual = $(el).prop(prop);\n  const addendum = val !== undefined ? ` with value '${val}'` : '';\n  const pass = containsProperty(actual, val);\n  const message = () => `Expected element${pass ? ' not' : ''} to have property '${prop}'${addendum}, but had '${actual}'`;\n\n  return { pass, message };\n});\n\n/**\n *\n * expect('.zippy__content').toHaveText('Content');\n * expect('.zippy__content').toHaveText(['Content A', 'Content B']);\n *\n * expect('.zippy__content').toHaveText((text) => text.includes('..');\n */\nexport const toHaveText = comparator((el, expected, exact = false) => hasSameText(el, expected, { exact, trim: false }));\n\nexport const toHaveExactText = comparator((el, expected, options: { trim: boolean } = { trim: false }) =>\n  hasSameText(el, expected, { exact: true, trim: options.trim }),\n);\n\nexport const toHaveExactTrimmedText = comparator((el, expected) => hasSameText(el, expected, { exact: true, trim: true }));\n\nexport const toContainText = toHaveText;\n\n/**\n *\n * expect('.zippy__content').toHaveValue('value');\n * expect('.zippy__content').toHaveValue(['value a', 'value b']);\n */\nexport const toHaveValue = comparator((el, expected) => {\n  if (expected && Array.isArray(expected)) {\n    let actual: string;\n    let pass = false;\n    let failing: string;\n\n    $(el).each((i, e) => {\n      actual = $(e).val();\n      pass = actual === expected[i];\n      if (!pass) {\n        failing = expected[i];\n\n        return false;\n      }\n    });\n\n    const message = () => `Expected element${pass ? ' not' : ''} to have value '${failing}', but had '${actual}'`;\n\n    return { pass, message };\n  }\n\n  const actual = $(el).val();\n  const pass = actual === expected;\n  const message = () => `Expected element${pass ? ' not' : ''} to have value '${expected}', but had '${actual}'`;\n\n  return { pass, message };\n});\n\nexport const toContainValue = toHaveValue;\n\n/**\n *\n *  expect(host.element).toHaveStyle({\n *    backgroundColor: 'rgba(0, 0, 0, 0.1)'\n *  });\n */\nexport const toHaveStyle = comparator((el, expected) => {\n  const pass = hasCss(el, expected);\n  const message = () => `Expected element${pass ? ' not' : ''} to have CSS ${JSON.stringify(expected)}`;\n\n  return { pass, message };\n});\n\n/**\n *\n * expect('.zippy__content').toHaveData({data: 'role', val: 'admin'});\n */\nexport const toHaveData = comparator((el, { data, val }) => {\n  const actual = $(el).data(data);\n  const addendum = val !== undefined ? ` with value '${val}'` : '';\n  const pass = hasProperty(actual, val);\n  const message = () => `Expected element${pass ? ' not' : ''} to have data '${data}'${addendum}, but had '${actual}'`;\n\n  return { pass, message };\n});\n\n/**\n *\n * expect('.checkbox').toBeChecked();\n */\nexport const toBeChecked = comparator((el) => {\n  const pass = $(el).is(':checked');\n  const message = () => `Expected element${pass ? ' not' : ''} to be checked`;\n\n  return { pass, message };\n});\n\n/**\n *\n * expect('.checkbox').toBeIndeterminate();\n */\nexport const toBeIndeterminate = comparator((el) => {\n  const pass = $(el).is(':indeterminate');\n  const message = () => `Expected element${pass ? ' not' : ''} to be indeterminate`;\n\n  return { pass, message };\n});\n\n/**\n *\n * expect('.checkbox').toBeDisabled();\n */\nexport const toBeDisabled = comparator((el) => {\n  const pass = $(el).is(':disabled');\n  const message = () => `Expected element${pass ? ' not' : ''} to be disabled`;\n\n  return { pass, message };\n});\n\n/**\n * An empty element is an element without child elements or text.\n *\n * expect('div').toBeEmpty();\n */\nexport const toBeEmpty = comparator((el) => {\n  const pass = $(el).is(':empty');\n  const message = () => `Expected element${pass ? ' not' : ''} to be empty`;\n\n  return { pass, message };\n});\n\n/**\n * Verify if an object has some expected properties.\n *\n * const actual = { lorem: 'first', ipsum: 'second' };\n * expect(actual).toBePartial({ lorem: 'first' });\n */\nexport const toBePartial = comparator((actual, expected) => {\n  const mapToPropsAndValues = (values: any[], properties: any[]) => {\n    return properties.map((prop) => {\n      return {\n        name: prop,\n        value: values[prop],\n        type: typeof values[prop],\n      };\n    });\n  };\n  const actualProps = Object.getOwnPropertyNames(actual);\n  const actualPropsAndValues = mapToPropsAndValues(actual, actualProps);\n\n  const expectedProps = Object.getOwnPropertyNames(expected);\n  const expectedPropsAndValues = mapToPropsAndValues(expected, expectedProps);\n\n  const pass = expectedProps.every((expectedProp) => actual[expectedProp] === expected[expectedProp]);\n  const message = () =>\n    `Expected element${pass ? ' not' : ''} to contain properties: ${JSON.stringify(expectedPropsAndValues)}.`.concat(\n      ` Actual properties: ${JSON.stringify(actualPropsAndValues)}`,\n    );\n\n  return { pass, message };\n});\n\n/**\n * Hidden elements are elements that have:\n * 1. Display or visibility style properties set to \"none\" or \"hidden\"\n * 2. Display or visibility computed styles set to \"none\" or \"hidden\"\n * 3. Width and height set to 0 (check not applied in jest)\n * 4. A hidden parent element (this also hides child elements)\n * 5. Type equal to \"hidden\" (only for form elements)\n * 6. A \"hidden\" attribute\n */\nfunction isHidden(elOrSelector: HTMLElement | string): boolean {\n  let el = $(elOrSelector)[0];\n\n  if (!el) {\n    return true;\n  }\n\n  const hiddenWhen = [\n    (el) => !(el.offsetWidth || el.offsetHeight || el.getClientRects().length),\n    (el) => el.style.display === 'none' || window.getComputedStyle(el).getPropertyValue?.('display') === 'none',\n    (el) => el.style.visibility === 'hidden' || window.getComputedStyle(el).getPropertyValue?.('visibility') === 'hidden',\n    (el) => el.type === 'hidden',\n    (el) => el.hasAttribute('hidden'),\n  ];\n\n  if (isRunningInJsDom()) {\n    // When running in JSDOM (Jest), offset-properties and client rects are always reported as 0\n    // - hence, let's take a more \"naive\" approach here. (https://github.com/jsdom/jsdom/issues/135)\n    hiddenWhen.shift();\n  }\n\n  while (el) {\n    if (el === document) {\n      break;\n    }\n\n    if (el.nodeType === Node.ELEMENT_NODE && hiddenWhen.some((rule) => rule(el))) {\n      return true;\n    }\n\n    el = el.parentNode || el.host;\n  }\n\n  return false;\n}\n\n/**\n * Hidden elements are elements that have:\n * 1. Display or visibility style properties set to \"none\" or \"hidden\"\n * 2. Display or visibility computed styles set to \"none\" or \"hidden\"\n * 3. Width and height set to 0 (check not applied in jest)\n * 4. A hidden parent element (this also hides child elements)\n * 5. Type equal to \"hidden\" (only for form elements)\n * 6. A \"hidden\" attribute\n *\n * expect('div').toBeHidden();\n *\n */\nexport const toBeHidden = comparator((el) => {\n  const pass = isHidden(el);\n  const message = () => `Expected element${pass ? ' not' : ''} to be hidden`;\n\n  return { pass, message };\n});\n\n/**\n * The :selected selector selects option elements that are pre-selected.\n *\n * expect('div').toBeSelected();\n *\n */\nexport const toBeSelected = comparator((el) => {\n  const pass = $(el).is(':selected');\n  const message = () => `Expected element${pass ? ' not' : ''} to be selected`;\n\n  return { pass, message };\n});\n\n/**\n * Hidden elements are elements that have:\n * 1. Display property set to \"none\"\n * 2. Width and height set to 0\n * 3. A hidden parent element (this also hides child elements)\n * 4. Type equal to \"hidden\" (only for form elements)\n * 5. A \"hidden\" attribute\n *\n * expect('div').toBeVisible();\n *\n */\nexport const toBeVisible = comparator((el) => {\n  const pass = !isHidden(el);\n\n  const message = () => `Expected element${pass ? ' not' : ''} to be visible`;\n\n  return { pass, message };\n});\n\n/**\n * The :focus selector selects the element that currently has focus.\n *\n * expect('input').toBeFocused();\n */\nexport const toBeFocused = comparator((el) => {\n  const element = $(el).get(0);\n  const pass = element === element.ownerDocument.activeElement;\n  const message = () => `Expected element${pass ? ' not' : ''} to be focused`;\n\n  return { pass, message };\n});\n\n/**\n * Check to see if the set of matched elements matches the given selector\n * returns true if the dom contains the element\n *\n * expect('div').toBeMatchedBy('.js-something')\n */\nexport const toBeMatchedBy = comparator((el, expected) => {\n  const actual = $(el).filter(expected).length;\n  const pass = actual > 0;\n  const message = () => `Expected element${pass ? ' not' : ''} to be matched by '${expected}'`;\n\n  return { pass, message };\n});\n\n/**\n *\n * expect('div').toHaveDescendant('.child')\n */\nexport const toHaveDescendant = comparator((el, selector) => {\n  const actual = $(el).find(selector).length;\n  const pass = actual > 0;\n  const message = () => `Expected element${pass ? ' not' : ''} to contain child '${selector}'`;\n\n  return { pass, message };\n});\n\n/**\n *\n * expect('div').toHaveDescendantWithText({selector: '.child', text: 'text'})\n */\nexport const toHaveDescendantWithText = comparator((el, { selector, text }) => {\n  const actual = $.trim($(el).find(selector).text());\n  if (text && $.isFunction(text.test)) {\n    const pass = text.test(actual);\n    const message = () =>\n      `Expected element${pass ? ' not' : ''} to have descendant '${selector}' with text matching '${text}',` + ` but had '${actual}'`;\n\n    return { pass, message };\n  }\n  const pass = actual.indexOf(text) !== -1;\n  const message = () => `Expected element${pass ? ' not' : ''} to have descendant '${selector}' with text '${text}', but had '${actual}'`;\n\n  return { pass, message };\n});\n\nexport const toHaveSelectedOptions = comparator((el, expected) => {\n  if (expected instanceof HTMLOptionElement) {\n    const actual = $(el).find(':selected');\n\n    const pass = actual.is($(expected));\n\n    const message = () =>\n      `Expected element${pass ? ' not' : ''} to have options '[${expected.outerHTML}]' but had '[${actual[0].outerHTML}]'`;\n\n    return { pass, message };\n  }\n\n  if (isHTMLOptionElementArray(expected)) {\n    const actual = $(el).find(':selected');\n\n    const pass = actual.length === expected.length && actual.toArray().every((_, index) => $(actual[index]).is(expected[index]));\n\n    const expectedOptionsString = $(expected)\n      .get()\n      .map((option) => option.outerHTML)\n      .join(',');\n\n    const actualOptionsString = actual\n      .get()\n      .map((option) => option.outerHTML)\n      .join(',');\n\n    const message = () =>\n      `Expected element${pass ? ' not' : ''} to have options '[${expectedOptionsString}]' but had '[${actualOptionsString}]'`;\n\n    return { pass, message };\n  }\n\n  const actual: string[] = $(el).val();\n\n  const pass = coerceArray(expected)?.every((v) => actual.includes(v));\n\n  const expectedOptionsString = Array.isArray(expected)\n    ? expected.reduce((acc: string, val: string, i) => acc + `${i === expected.length ? '' : ','}${val}`)\n    : expected;\n  const message = () => `Expected element${pass ? ' not' : ''} to have options '[${expectedOptionsString}]' but had '[${actual}]'`;\n\n  return { pass, message };\n});\n","import { TestModuleMetadata } from '@angular/core/testing';\n\nlet globals: TestModuleMetadata = {\n  providers: [],\n  declarations: [],\n  imports: [],\n};\n\nexport function defineGlobalsInjections(config: TestModuleMetadata): void {\n  globals = { ...globals, ...config };\n}\n\nexport function getGlobalsInjections(): TestModuleMetadata {\n  return globals;\n}\n","import { SchemaMetadata, Type } from '@angular/core';\nimport { DeferBlockBehavior, ModuleTeardownOptions } from '@angular/core/testing';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\n\nimport { getGlobalsInjections } from '../globals-injections';\n\nimport { BaseSpectatorOptions } from './options';\n\n/**\n * @publicApi\n */\nexport interface ModuleMetadata {\n  declarations: any[];\n  imports: any[];\n  providers: any[];\n  entryComponents: Type<any>[];\n  schemas?: (SchemaMetadata | any[])[];\n  teardown?: ModuleTeardownOptions;\n  deferBlockBehavior: DeferBlockBehavior;\n  errorOnUnknownElements: boolean;\n  errorOnUnknownProperties: boolean;\n}\n\n/**\n * @internal\n */\nexport function initialModule(options: Required<BaseSpectatorOptions>): ModuleMetadata {\n  const globals = { imports: [], declarations: [], providers: [], ...getGlobalsInjections() };\n\n  return {\n    declarations: [...globals.declarations, ...options.declarations, ...options.entryComponents],\n    imports: [...(options.disableAnimations ? [NoopAnimationsModule] : []), ...globals.imports, ...options.imports],\n    providers: [...globals.providers, ...options.providers, ...options.mocks.map((type) => options.mockProvider(type))],\n    entryComponents: [...options.entryComponents],\n    teardown:\n      // Caretaker note: we don't want to merge the `globals.teardown` and `options.teardown`, since `options.teardown`\n      // is always defined. If the user calls `defineGlobalsInjections({ teardown: { ... } })` and we merge it with\n      // `options.teardown`, then `options.teardown` will always override global options.\n      { ...(globals.teardown || options.teardown) },\n    deferBlockBehavior: globals.deferBlockBehavior || options.deferBlockBehavior,\n    errorOnUnknownElements: globals.errorOnUnknownElements || options.errorOnUnknownElements,\n    errorOnUnknownProperties: globals.errorOnUnknownProperties || options.errorOnUnknownProperties,\n  };\n}\n","import { NO_ERRORS_SCHEMA } from '@angular/core';\n\nimport { initialModule, ModuleMetadata } from '../base/initial-module';\nimport { declareInModule } from '../utils';\n\nimport { SpectatorOptions } from './options';\n\n/**\n * @internal\n */\nexport function initialSpectatorModule<C>(options: Required<SpectatorOptions<C>>): ModuleMetadata {\n  const moduleMetadata = initialModule(options);\n\n  if (options.declareComponent) {\n    declareInModule(moduleMetadata, options.component);\n  }\n\n  moduleMetadata.schemas = [options.shallow ? NO_ERRORS_SCHEMA : options.schemas || []];\n\n  return moduleMetadata;\n}\n","import { OptionalsRequired } from '../types';\n\n/**\n * @internal\n */\nexport function merge<T>(defaults: OptionalsRequired<T>, overrides?: T): Required<T> {\n  return { ...defaults, ...overrides } as Required<T>;\n}\n","/** Credit: Valentin Buryakov */\nimport { FactoryProvider, Type, AbstractType } from '@angular/core';\n\ntype Writable<T> = { -readonly [P in keyof T]: T[P] };\n\n/**\n * @publicApi\n */\nexport interface CompatibleSpy extends jasmine.Spy {\n  /**\n   * By chaining the spy with and.returnValue, all calls to the function will return a specific\n   * value.\n   */\n  andReturn(val: any): void;\n\n  /**\n   * By chaining the spy with and.callFake, all calls to the spy will delegate to the supplied\n   * function.\n   */\n  andCallFake(fn: Function): this;\n\n  /**\n   * removes all recorded calls\n   */\n  reset(): void;\n}\n\n/**\n * @publicApi\n */\nexport type SpyObject<T> = T & { [P in keyof T]: T[P] extends Function ? T[P] & CompatibleSpy : T[P] } & {\n  /**\n   * Casts to type without readonly properties\n   */\n  castToWritable(): Writable<T>;\n};\n\n/**\n * @internal\n */\nexport function installProtoMethods<T>(mock: any, proto: any, createSpyFn: Function): void {\n  if (proto === null || proto === Object.prototype) {\n    return;\n  }\n\n  for (const key of Object.getOwnPropertyNames(proto)) {\n    const descriptor = Object.getOwnPropertyDescriptor(proto, key);\n\n    if (!descriptor) {\n      continue;\n    }\n\n    if (typeof descriptor.value === 'function' && key !== 'constructor' && typeof mock[key] === 'undefined') {\n      mock[key] = createSpyFn(key);\n    } else if (descriptor.get && !mock.hasOwnProperty(key)) {\n      Object.defineProperty(mock, key, {\n        set: (value) => (mock[`_${key}`] = value),\n        get: () => mock[`_${key}`],\n        configurable: true,\n      });\n    }\n  }\n\n  installProtoMethods(mock, Object.getPrototypeOf(proto), createSpyFn);\n\n  mock.castToWritable = () => mock;\n}\n\n/**\n * @publicApi\n */\nexport function createSpyObject<T>(type: Type<T> | AbstractType<T>, template?: Partial<Record<keyof T, any>>): SpyObject<T> {\n  const mock: any = { ...template } || {};\n\n  installProtoMethods<T>(mock, type.prototype, (name) => {\n    const newSpy: jasmine.Spy & Partial<CompatibleSpy> = jasmine.createSpy(name);\n    newSpy.andCallFake = (fn: (...args: any[]) => any) => <any>newSpy.and.callFake(fn);\n    newSpy.andReturn = (val) => newSpy.and.returnValue(val);\n    newSpy.reset = () => newSpy.calls.reset();\n    // revisit return null here (previously needed for rtts_assert).\n    newSpy.and.returnValue(null);\n\n    return newSpy;\n  });\n\n  return mock;\n}\n\n/**\n * @publicApi\n */\nexport function mockProvider<T>(type: Type<T> | AbstractType<T>, properties?: Partial<Record<keyof T, any>>): FactoryProvider {\n  return {\n    provide: type,\n    useFactory: () => createSpyObject(type, properties),\n  };\n}\n\n/**\n * @publicApi\n */\nexport type MockProvider = typeof mockProvider;\n","import { Component, Directive, NgModule, Pipe, Provider, SchemaMetadata, Type } from '@angular/core';\nimport { DeferBlockBehavior, MetadataOverride, ModuleTeardownOptions } from '@angular/core/testing';\n\nimport { merge } from '../internals/merge';\nimport { mockProvider, MockProvider } from '../mock';\nimport { OptionalsRequired } from '../types';\n\n/**\n * @internal\n */\nexport interface BaseSpectatorOptions {\n  disableAnimations?: boolean;\n  entryComponents?: Type<any>[];\n  mocks?: Type<any>[];\n  mockProvider?: MockProvider;\n  providers?: any[];\n  declarations?: any[];\n  imports?: any[];\n  schemas?: (SchemaMetadata | any[])[];\n  overrideModules?: [Type<any>, MetadataOverride<NgModule>][];\n  overrideComponents?: [Type<any>, MetadataOverride<Component>][];\n  overrideDirectives?: [Type<any>, MetadataOverride<Directive>][];\n  overridePipes?: [Type<any>, MetadataOverride<Pipe>][];\n  teardown?: ModuleTeardownOptions;\n  deferBlockBehavior?: DeferBlockBehavior;\n  errorOnUnknownElements?: boolean;\n  errorOnUnknownProperties?: boolean;\n}\n\n/**\n * @internal\n */\nexport interface BaseSpectatorOverrides {\n  providers?: Provider[];\n}\n\nconst defaultOptions: OptionalsRequired<BaseSpectatorOptions> = {\n  disableAnimations: true,\n  entryComponents: [],\n  mocks: [],\n  mockProvider,\n  providers: [],\n  declarations: [],\n  imports: [],\n  schemas: [],\n  overrideModules: [],\n  overrideComponents: [],\n  overrideDirectives: [],\n  overridePipes: [],\n  teardown: { destroyAfterEach: false },\n  errorOnUnknownElements: false,\n  errorOnUnknownProperties: false,\n  deferBlockBehavior: DeferBlockBehavior.Playthrough,\n};\n\n/**\n * @internal\n */\nexport function getDefaultBaseOptions(options?: BaseSpectatorOptions): Required<BaseSpectatorOptions> {\n  return merge<BaseSpectatorOptions>(defaultOptions, options);\n}\n","import { Type } from '@angular/core';\n\nimport { getDefaultBaseOptions, BaseSpectatorOptions } from '../base/options';\nimport { merge } from '../internals/merge';\nimport { OptionalsRequired } from '../types';\n\n/**\n * @publicApi\n */\nexport interface SpectatorOptions<C> extends BaseSpectatorOptions {\n  component: Type<C>;\n  shallow?: boolean;\n  componentProviders?: any[];\n  componentViewProviders?: any[];\n  detectChanges?: boolean;\n  declareComponent?: boolean;\n  componentMocks?: Type<any>[];\n  componentViewProvidersMocks?: Type<any>[];\n}\n\nconst defaultSpectatorOptions: OptionalsRequired<SpectatorOptions<any>> = {\n  ...getDefaultBaseOptions(),\n  shallow: false,\n  declareComponent: true,\n  detectChanges: true,\n  componentProviders: [],\n  componentViewProviders: [],\n  componentMocks: [],\n  componentViewProvidersMocks: [],\n};\n\n/**\n * @internal\n */\nexport function getSpectatorDefaultOptions<C>(overrides?: SpectatorOptions<C>): Required<SpectatorOptions<C>> {\n  return merge(defaultSpectatorOptions, overrides);\n}\n","import { isStandalone, Provider, reflectComponentType, Type } from '@angular/core';\nimport { TestBed, waitForAsync } from '@angular/core/testing';\nimport { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';\n\nimport { BaseSpectatorOptions, BaseSpectatorOverrides } from '../base/options';\nimport { addMatchers } from '../core';\nimport { setProps } from '../internals/query';\nimport * as customMatchers from '../matchers';\nimport { InferInputSignals, isType } from '../types';\n\nimport { initialSpectatorModule } from './initial-module';\nimport { getSpectatorDefaultOptions, SpectatorOptions } from './options';\nimport { Spectator } from './spectator';\n\n/**\n * @publicApi\n */\nexport type SpectatorFactory<C> = (options?: SpectatorOverrides<C>) => Spectator<C>;\n\n/**\n * @publicApi\n */\nexport interface SpectatorOverrides<C> extends BaseSpectatorOverrides {\n  detectChanges?: boolean;\n  props?: InferInputSignals<C>;\n}\n\n/**\n * @internal\n */\nexport function overrideComponentIfProviderOverridesSpecified<C>(options: Required<SpectatorOptions<C>>): void {\n  const hasProviderOverrides = options.componentProviders.length || options.componentMocks.length;\n  const hasViewProviders = options.componentViewProviders.length || options.componentViewProvidersMocks.length;\n  if (hasProviderOverrides || hasViewProviders) {\n    let providerConfiguration = {};\n    if (hasProviderOverrides) {\n      providerConfiguration = {\n        providers: [...options.componentProviders, ...options.componentMocks.map((p) => options.mockProvider(p))],\n      };\n    }\n    if (hasViewProviders) {\n      providerConfiguration = {\n        ...providerConfiguration,\n        viewProviders: [...options.componentViewProviders, ...options.componentViewProvidersMocks.map((p) => options.mockProvider(p))],\n      };\n    }\n    TestBed.overrideComponent(options.component, {\n      set: providerConfiguration,\n    });\n  }\n}\n\n/**\n * @internal\n */\nexport function overrideModules(options: Required<BaseSpectatorOptions>): void {\n  if (options.overrideModules.length) {\n    options.overrideModules.forEach((overrideModule) => {\n      const [ngModule, override] = overrideModule;\n\n      TestBed.overrideModule(ngModule, override);\n    });\n  }\n}\n\n/**\n * @internal\n */\nexport function overrideComponents(options: Required<BaseSpectatorOptions>): void {\n  if (options.overrideComponents.length) {\n    options.overrideComponents.forEach((overrideComponent) => {\n      const [component, override] = overrideComponent;\n\n      if (!reflectComponentType(component)?.isStandalone) {\n        throw new Error(`Can not override non standalone component`);\n      }\n\n      TestBed.overrideComponent(component, override);\n    });\n  }\n}\n\n/**\n * @internal\n */\nexport function overrideDirectives(options: Required<BaseSpectatorOptions>): void {\n  if (options.overrideDirectives.length) {\n    options.overrideDirectives.forEach((overrideDirective) => {\n      const [directive, override] = overrideDirective;\n\n      if (!isStandalone(directive)) {\n        throw new Error(`Can not override non standalone directive`);\n      }\n\n      TestBed.overrideDirective(directive, override);\n    });\n  }\n}\n\n/**\n * @internal\n */\nexport function overridePipes(options: Required<BaseSpectatorOptions>): void {\n  if (options.overridePipes.length) {\n    options.overridePipes.forEach((overridePipe) => {\n      const [pipe, override] = overridePipe;\n\n      if (!isStandalone(pipe)) {\n        throw new Error(`Can not override non standalone pipe`);\n      }\n\n      TestBed.overridePipe(pipe, override);\n    });\n  }\n}\n\n/**\n * @publicApi\n */\nexport function createComponentFactory<C>(typeOrOptions: Type<C> | SpectatorOptions<C>): SpectatorFactory<C> {\n  const options = isType(typeOrOptions)\n    ? getSpectatorDefaultOptions<C>({ component: typeOrOptions })\n    : getSpectatorDefaultOptions(typeOrOptions);\n\n  const moduleMetadata = initialSpectatorModule<C>(options);\n\n  beforeEach(waitForAsync(() => {\n    addMatchers(customMatchers);\n    TestBed.configureTestingModule(moduleMetadata).overrideModule(BrowserDynamicTestingModule, {});\n\n    overrideModules(options);\n    overrideComponents(options);\n    overrideDirectives(options);\n    overridePipes(options);\n\n    overrideComponentIfProviderOverridesSpecified(options);\n\n    TestBed.compileComponents();\n  }));\n\n  return (overrides?: SpectatorOverrides<C>) => {\n    const defaults: SpectatorOverrides<C> = { props: {}, detectChanges: true, providers: [] };\n    const { detectChanges, props, providers } = { ...defaults, ...overrides };\n\n    if (providers && providers.length) {\n      providers.forEach((provider: Provider) => {\n        TestBed.overrideProvider((provider as any).provide, provider as any);\n      });\n    }\n\n    const spectator = createSpectator(options, props);\n\n    if (options.detectChanges && detectChanges) {\n      spectator.detectChanges();\n    }\n\n    return spectator;\n  };\n}\n\nfunction createSpectator<C>(options: Required<SpectatorOptions<C>>, props?: InferInputSignals<C>): Spectator<C> {\n  const fixture = TestBed.createComponent(options.component);\n  const debugElement = fixture.debugElement;\n\n  const component = setProps(fixture.componentRef, props);\n\n  return new Spectator(fixture, debugElement, component, debugElement.nativeElement);\n}\n","import { ChangeDetectorRef, DebugElement, Type } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\n\nimport { DOMSelector } from '../dom-selectors';\nimport { getChildren, setHostProps } from '../internals/query';\nimport { Token } from '../token';\nimport { QueryOptions, QueryType, isString } from '../types';\n\nimport { DomSpectator } from '../base/dom-spectator';\nimport { SpyObject } from '../mock';\nimport { HostComponent } from './host-component';\n\n/**\n * @publicApi\n */\nexport class SpectatorHost<C, H = HostComponent> extends DomSpectator<C> {\n  constructor(\n    public hostComponent: H,\n    public hostDebugElement: DebugElement,\n    public hostElement: Element,\n    public hostFixture: ComponentFixture<any>,\n    public debugElement: DebugElement,\n    componentInstance: C,\n    public element: HTMLElement,\n  ) {\n    super(hostFixture, debugElement, componentInstance, element);\n  }\n\n  public get component(): C {\n    return this.instance;\n  }\n\n  public inject<T>(token: Token<T>, fromComponentInjector: boolean = false): SpyObject<T> {\n    if (fromComponentInjector) {\n      return this.debugElement.injector.get(token) as SpyObject<T>;\n    }\n\n    return super.inject(token);\n  }\n\n  public detectComponentChanges(): void {\n    if (this.debugElement) {\n      this.debugElement.injector.get(ChangeDetectorRef).detectChanges();\n    } else {\n      this.detectChanges();\n    }\n  }\n\n  public queryHost<R extends Element>(selector: string | DOMSelector, options?: { root: boolean }): R | null;\n  public queryHost<R>(directive: Type<R>): R | null;\n  public queryHost<R>(directiveOrSelector: Type<any> | string, options: { read: Token<R> }): R | null;\n  public queryHost<R>(directiveOrSelector: QueryType, options?: QueryOptions<R>): R | Element | null {\n    if ((options || {}).root && isString(directiveOrSelector)) {\n      return document.querySelector(directiveOrSelector);\n    }\n\n    return getChildren<R>(this.hostDebugElement)(directiveOrSelector, options)[0] || null;\n  }\n\n  public queryHostAll<R extends Element>(selector: string | DOMSelector, options?: { root: boolean }): R[];\n  public queryHostAll<R>(directive: Type<R>): R[];\n  public queryHostAll<R>(directiveOrSelector: Type<any> | string, options: { read: Token<R> }): R[];\n  public queryHostAll<R>(directiveOrSelector: QueryType, options?: QueryOptions<R>): R[] | Element[] {\n    if ((options || {}).root && isString(directiveOrSelector)) {\n      return Array.from(document.querySelectorAll(directiveOrSelector));\n    }\n\n    return getChildren<R>(this.hostDebugElement)(directiveOrSelector, options);\n  }\n\n  public setHostInput<K extends keyof H>(input: H extends HostComponent ? any : Partial<H>): void;\n  public setHostInput<K extends keyof H>(input: H extends HostComponent ? any : K, inputValue: H extends HostComponent ? any : H[K]): void;\n  public setHostInput(input: any, value?: any): void {\n    setHostProps(this.fixture.componentRef, input, value);\n    this.detectChanges();\n  }\n}\n","import { DebugNode, Predicate, Type } from '@angular/core';\n\n// TODO (dirkluijk): remove after upgrading to Angular 8.2\n// see: https://github.com/angular/angular/commit/10a1e1974b816ebb979dc10586b160ee07ad8356\nexport function nodeByDirective(type: Type<any>): Predicate<DebugNode> {\n  return (debugNode) => debugNode.providerTokens.includes(type);\n}\n","import { ModuleMetadata } from '../base/initial-module';\nimport { initialSpectatorModule } from '../spectator/initial-module';\n\nimport { SpectatorHostOptions } from './options';\n\n/**\n * @internal\n */\nexport function initialSpectatorWithHostModule<C, H>(options: Required<SpectatorHostOptions<C, H>>): ModuleMetadata {\n  const moduleMetadata = initialSpectatorModule<C>(options);\n\n  moduleMetadata.declarations.push(options.host);\n\n  return moduleMetadata;\n}\n","import { Component, NgModule } from '@angular/core';\n\n@Component({\n  selector: 'lib-ngneat-host-component',\n  template: '',\n})\nexport class HostComponent {}\n\n/*\n  This is an unused module to resolve the ng build error:\n    'Cannot determine the module for class HostComponent'\n\n  Reference: https://github.com/angular/issues/13590\n*/\n@NgModule({\n  declarations: [HostComponent],\n})\nexport class HostModule {}\n","import { Type } from '@angular/core';\n\nimport { merge } from '../internals/merge';\nimport { getSpectatorDefaultOptions, SpectatorOptions } from '../spectator/options';\nimport { OptionalsRequired } from '../types';\n\nimport { HostComponent } from './host-component';\n\n/**\n * @publicApi\n */\nexport interface SpectatorHostOptions<C, H> extends SpectatorOptions<C> {\n  host?: Type<H>;\n  template?: string;\n}\n\nconst defaultSpectatorHostOptions: OptionalsRequired<SpectatorHostOptions<any, any>> = {\n  ...getSpectatorDefaultOptions<any>(),\n  host: HostComponent,\n  template: '',\n};\n\n/**\n * @internal\n */\nexport function getSpectatorHostDefaultOptions<C, H>(overrides?: SpectatorHostOptions<C, H>): Required<SpectatorHostOptions<C, H>> {\n  return merge(defaultSpectatorHostOptions, overrides);\n}\n","import { Provider, Type } from '@angular/core';\nimport { TestBed, waitForAsync } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';\n\nimport { addMatchers } from '../core';\nimport { nodeByDirective } from '../internals/node-by-directive';\nimport * as customMatchers from '../matchers';\nimport {\n  overrideComponentIfProviderOverridesSpecified,\n  overrideComponents,\n  overrideDirectives,\n  overrideModules,\n  overridePipes,\n} from '../spectator/create-factory';\nimport { isType } from '../types';\n\nimport { BaseSpectatorOverrides } from '../base/options';\nimport { setHostProps } from '../internals/query';\nimport { HostComponent } from './host-component';\nimport { initialSpectatorWithHostModule } from './initial-module';\nimport { getSpectatorHostDefaultOptions, SpectatorHostOptions } from './options';\nimport { SpectatorHost } from './spectator-host';\n\n/**\n * @publicApi\n */\nexport type SpectatorHostFactory<C, H> = <HP>(\n  template: string,\n  overrides?: SpectatorHostOverrides<H, HP>,\n) => SpectatorHost<C, H & (HostComponent extends H ? HP : unknown)>;\n\n/**\n * @publicApi\n */\nexport type PresetSpectatorHostFactory<C, H> = <HP>(\n  template?: string,\n  overrides?: SpectatorHostOverrides<H, HP>,\n) => SpectatorHost<C, H & (HostComponent extends H ? HP : unknown)>;\n\n/**\n * @publicApi\n */\nexport interface SpectatorHostOverrides<H, HP> extends BaseSpectatorOverrides {\n  detectChanges?: boolean;\n  hostProps?: HostComponent extends H ? HP : Partial<H>;\n}\n\n/**\n * @publicApi\n */\nexport function createHostFactory<C, H = HostComponent>(\n  options: SpectatorHostOptions<C, H> & { template: string },\n): PresetSpectatorHostFactory<C, H>;\n/**\n * @publicApi\n */\nexport function createHostFactory<C, H = HostComponent>(typeOrOptions: Type<C> | SpectatorHostOptions<C, H>): SpectatorHostFactory<C, H>;\nexport function createHostFactory<C, H = HostComponent>(typeOrOptions: Type<C> | SpectatorHostOptions<C, H>): SpectatorHostFactory<C, H> {\n  const options = isType(typeOrOptions)\n    ? getSpectatorHostDefaultOptions<C, H>({ component: typeOrOptions })\n    : getSpectatorHostDefaultOptions(typeOrOptions);\n\n  const moduleMetadata = initialSpectatorWithHostModule<C, H>(options);\n\n  beforeEach(waitForAsync(() => {\n    addMatchers(customMatchers);\n    TestBed.configureTestingModule(moduleMetadata).overrideModule(BrowserDynamicTestingModule, {});\n\n    overrideModules(options);\n    overrideComponents(options);\n    overrideDirectives(options);\n    overridePipes(options);\n\n    overrideComponentIfProviderOverridesSpecified(options);\n    if (options.template) {\n      TestBed.overrideComponent(options.host, {\n        set: { template: options.template },\n      });\n    }\n  }));\n\n  return <HP>(template?: string, overrides?: SpectatorHostOverrides<H, HP>) => {\n    const defaults: SpectatorHostOverrides<H, HP> = { hostProps: {} as any, detectChanges: true, providers: [] };\n    const { detectChanges, hostProps, providers } = { ...defaults, ...overrides };\n\n    if (providers && providers.length) {\n      providers.forEach((provider: Provider) => {\n        TestBed.overrideProvider((provider as any).provide, provider as any);\n      });\n    }\n\n    if (template) {\n      TestBed.overrideComponent(options.host, {\n        set: { template: template },\n      });\n    }\n\n    const spectator = createSpectatorHost(options, hostProps);\n\n    if (options.detectChanges && detectChanges) {\n      spectator.detectChanges();\n    }\n\n    return spectator;\n  };\n}\n\nfunction createSpectatorHost<C, H, HP>(options: Required<SpectatorHostOptions<C, H>>, hostProps?: HP): SpectatorHost<C, H & HP> {\n  const hostFixture = TestBed.createComponent(options.host);\n  const debugElement = hostFixture.debugElement.query(By.directive(options.component)) || hostFixture.debugElement;\n  const debugNode = hostFixture.debugElement.queryAllNodes(nodeByDirective(options.component))[0];\n\n  if (!debugNode) {\n    throw new Error(`Cannot find component/directive ${options.component} in host template 😔`);\n  }\n\n  const hostComponent = setHostProps(hostFixture.componentRef, hostProps);\n  const component = debugNode.injector.get(options.component);\n\n  return new SpectatorHost(\n    hostComponent,\n    hostFixture.debugElement,\n    hostFixture.nativeElement,\n    hostFixture,\n    debugElement,\n    component,\n    debugElement.nativeElement,\n  );\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\n\nimport { DomSpectator } from '../base/dom-spectator';\nimport { setHostProps, setProps } from '../internals/query';\nimport { SpyObject } from '../mock';\nimport { HostComponent } from '../spectator-host/host-component';\nimport { Token } from '../token';\n\n/**\n * @publicApi\n */\nexport class SpectatorDirective<D, H = HostComponent> extends DomSpectator<D> {\n  constructor(\n    public hostComponent: H,\n    public fixture: ComponentFixture<any>,\n    public debugElement: DebugElement,\n    protected instance: D,\n    public element: Element,\n  ) {\n    super(fixture, debugElement, instance, element);\n  }\n\n  public get directive(): D {\n    return this.instance;\n  }\n\n  public inject<T>(token: Token<T>, fromDirectiveInjector: boolean = false): SpyObject<T> {\n    if (fromDirectiveInjector) {\n      return this.debugElement.injector.get(token) as SpyObject<T>;\n    }\n\n    return super.inject(token);\n  }\n\n  public setHostInput<K extends keyof H>(input: Partial<H>): void;\n  public setHostInput<K extends keyof H>(input: K, inputValue: H[K]): void;\n  public setHostInput(input: any, value?: any): void {\n    setHostProps(this.fixture.componentRef, input, value);\n    this.detectChanges();\n  }\n}\n","import { NO_ERRORS_SCHEMA } from '@angular/core';\n\nimport { initialModule, ModuleMetadata } from '../base/initial-module';\nimport { declareInModule } from '../utils';\nimport { SpectatorDirectiveOptions } from './options';\n\n/**\n * @internal\n */\nexport function initialSpectatorDirectiveModule<D, H>(options: Required<SpectatorDirectiveOptions<D, H>>): ModuleMetadata {\n  const moduleMetadata = initialModule(options);\n\n  if (options.declareDirective) {\n    declareInModule(moduleMetadata, options.directive);\n  }\n  moduleMetadata.declarations.push(options.host);\n\n  moduleMetadata.schemas = [options.shallow ? NO_ERRORS_SCHEMA : options.schemas || []];\n\n  return moduleMetadata;\n}\n","import { Provider, Type } from '@angular/core';\n\nimport { BaseSpectatorOptions, getDefaultBaseOptions } from '../base/options';\nimport { merge } from '../internals/merge';\nimport { HostComponent } from '../spectator-host/host-component';\nimport { OptionalsRequired } from '../types';\n\n/**\n * @publicApi\n */\nexport interface SpectatorDirectiveOptions<D, H> extends BaseSpectatorOptions {\n  directive: Type<D>;\n  shallow?: boolean;\n  detectChanges?: boolean;\n  host?: Type<H>;\n  template?: string;\n  directiveProviders?: Provider[];\n  directiveMocks?: Type<any>[];\n  declareDirective?: boolean;\n}\n\nconst defaultSpectatorRoutingOptions: OptionalsRequired<SpectatorDirectiveOptions<any, any>> = {\n  ...getDefaultBaseOptions(),\n  host: HostComponent,\n  template: '',\n  shallow: false,\n  detectChanges: true,\n  directiveProviders: [],\n  directiveMocks: [],\n  declareDirective: true,\n};\n\n/**\n * @internal\n */\nexport function getSpectatorDirectiveDefaultOptions<D, H>(\n  overrides?: SpectatorDirectiveOptions<D, H>,\n): Required<SpectatorDirectiveOptions<D, H>> {\n  return merge(defaultSpectatorRoutingOptions, overrides);\n}\n","import { Provider, Type } from '@angular/core';\nimport { TestBed, waitForAsync } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';\n\nimport { BaseSpectatorOverrides } from '../base/options';\nimport { addMatchers } from '../core';\nimport { nodeByDirective } from '../internals/node-by-directive';\nimport { setHostProps } from '../internals/query';\nimport * as customMatchers from '../matchers';\nimport { HostComponent } from '../spectator-host/host-component';\nimport { isType } from '../types';\n\nimport { overrideComponents, overrideDirectives, overrideModules, overridePipes } from '../spectator/create-factory';\nimport { initialSpectatorDirectiveModule } from './initial-module';\nimport { SpectatorDirectiveOptions, getSpectatorDirectiveDefaultOptions } from './options';\nimport { SpectatorDirective } from './spectator-directive';\n\n/**\n * @publicApi\n */\nexport type SpectatorDirectiveFactory<D, H> = <HP>(\n  template: string,\n  overrides?: SpectatorDirectiveOverrides<H, HP>,\n) => SpectatorDirective<D, H & (HostComponent extends H ? HP : unknown)>;\n\n/**\n * @publicApi\n */\nexport type PresetSpectatorDirectiveFactory<D, H> = <HP>(\n  template?: string,\n  overrides?: SpectatorDirectiveOverrides<H, HP>,\n) => SpectatorDirective<D, H & (HostComponent extends H ? HP : unknown)>;\n\n/**\n * @publicApi\n */\nexport interface SpectatorDirectiveOverrides<H, HP> extends BaseSpectatorOverrides {\n  detectChanges?: boolean;\n  hostProps?: HostComponent extends H ? HP : Partial<H>;\n  directiveProviders?: Provider[];\n}\n\n/**\n * @publicApi\n */\nexport function createDirectiveFactory<D, H = HostComponent>(\n  options: SpectatorDirectiveOptions<D, H> & { template: string },\n): PresetSpectatorDirectiveFactory<D, H>;\n/**\n * @publicApi\n */\nexport function createDirectiveFactory<D, H = HostComponent>(\n  typeOrOptions: Type<D> | SpectatorDirectiveOptions<D, H>,\n): SpectatorDirectiveFactory<D, H>;\nexport function createDirectiveFactory<D, H = HostComponent>(\n  typeOrOptions: Type<D> | SpectatorDirectiveOptions<D, H>,\n): SpectatorDirectiveFactory<D, H> {\n  const options = isType(typeOrOptions)\n    ? getSpectatorDirectiveDefaultOptions<D, H>({ directive: typeOrOptions })\n    : getSpectatorDirectiveDefaultOptions(typeOrOptions);\n\n  const moduleMetadata = initialSpectatorDirectiveModule<D, H>(options);\n\n  beforeEach(waitForAsync(() => {\n    addMatchers(customMatchers);\n    TestBed.configureTestingModule(moduleMetadata);\n    overrideModules(options);\n    overrideComponents(options);\n    overrideDirectives(options);\n    overridePipes(options);\n  }));\n\n  return <HP>(template?: string, overrides?: SpectatorDirectiveOverrides<H, HP>) => {\n    const defaults: SpectatorDirectiveOverrides<H, HP> = {\n      hostProps: {} as any,\n      detectChanges: true,\n      providers: [],\n    };\n    const { detectChanges, hostProps, providers } = { ...defaults, ...overrides };\n\n    if (providers && providers.length) {\n      providers.forEach((provider: Provider) => {\n        TestBed.overrideProvider((provider as any).provide, provider as any);\n      });\n    }\n\n    TestBed.overrideModule(BrowserDynamicTestingModule, {}).overrideComponent(options.host, {\n      set: { template: template || options.template },\n    });\n\n    if (options.directiveProviders.length || options.directiveMocks.length) {\n      TestBed.overrideDirective(options.directive, {\n        set: { providers: [...options.directiveProviders, ...options.directiveMocks.map((p) => options.mockProvider(p))] },\n      });\n    }\n\n    const spectator = createSpectatorDirective(options, hostProps);\n\n    if (options.detectChanges && detectChanges) {\n      spectator.detectChanges();\n    }\n\n    return spectator;\n  };\n}\n\nfunction createSpectatorDirective<D, H, HP>(\n  options: Required<SpectatorDirectiveOptions<D, H>>,\n  hostProps?: HP,\n): SpectatorDirective<D, H & HP> {\n  const hostFixture = TestBed.createComponent(options.host);\n  const debugElement = hostFixture.debugElement.query(By.directive(options.directive)) || hostFixture.debugElement;\n  const debugNode = hostFixture.debugElement.queryAllNodes(nodeByDirective(options.directive))[0];\n\n  if (!debugNode) {\n    throw new Error(`Cannot find directive ${options.directive} in host template 😔`);\n  }\n\n  const hostComponent = setHostProps(hostFixture.componentRef, hostProps);\n  const directive = debugNode.injector.get(options.directive);\n\n  return new SpectatorDirective(hostComponent, hostFixture, hostFixture.debugElement, directive, debugElement.nativeElement);\n}\n","import { BaseSpectator } from '../base/base-spectator';\n\n/**\n * @publicApi\n */\nexport class SpectatorService<S> extends BaseSpectator {\n  constructor(public service: S) {\n    super();\n  }\n}\n","import { initialModule, ModuleMetadata } from '../base/initial-module';\n\nimport { SpectatorServiceOptions } from './options';\n\n/**\n * @internal\n */\nexport function initialServiceModule<S>(options: Required<SpectatorServiceOptions<S>>): ModuleMetadata {\n  const moduleMetadata = initialModule(options);\n\n  moduleMetadata.providers.push(options.service);\n\n  return moduleMetadata;\n}\n","import { Type } from '@angular/core';\n\nimport { getDefaultBaseOptions, BaseSpectatorOptions } from '../base/options';\nimport { merge } from '../internals/merge';\nimport { OptionalsRequired } from '../types';\n\nexport interface SpectatorServiceOptions<S = any> extends BaseSpectatorOptions {\n  service: Type<S>;\n}\n\nconst defaultServiceOptions: OptionalsRequired<SpectatorServiceOptions> = {\n  ...getDefaultBaseOptions(),\n};\n\n/**\n * @internal\n */\nexport function getDefaultServiceOptions<S>(overrides: SpectatorServiceOptions<S>): Required<SpectatorServiceOptions<S>> {\n  return merge(defaultServiceOptions, overrides) as Required<SpectatorServiceOptions<S>>;\n}\n","import { Provider, Type } from '@angular/core';\nimport { TestBed, TestBedStatic } from '@angular/core/testing';\n\nimport { BaseSpectatorOverrides } from '../base/options';\nimport { isType, doesServiceImplementsOnDestroy } from '../types';\n\nimport { initialServiceModule } from './initial-module';\nimport { getDefaultServiceOptions, SpectatorServiceOptions } from './options';\nimport { SpectatorService } from './spectator-service';\nimport { overrideModules } from '../spectator/create-factory';\n\n/**\n * @publicApi\n */\nexport type SpectatorServiceFactory<S> = (overrides?: SpectatorServiceOverrides<S>) => SpectatorService<S>;\n\n/**\n * @publicApi\n */\nexport interface SpectatorServiceOverrides<S> extends BaseSpectatorOverrides {}\n\n/**\n * @publicApi\n */\nexport function createServiceFactory<S>(typeOrOptions: Type<S> | SpectatorServiceOptions<S>): SpectatorServiceFactory<S> {\n  const service = isType(typeOrOptions) ? typeOrOptions : typeOrOptions.service;\n  const options = isType(typeOrOptions) ? getDefaultServiceOptions<S>({ service }) : getDefaultServiceOptions(typeOrOptions);\n\n  const moduleMetadata = initialServiceModule(options);\n\n  beforeEach(() => {\n    TestBed.configureTestingModule(moduleMetadata);\n    overrideModules(options);\n  });\n\n  afterEach(() => {\n    const testedService = (<any>TestBed).inject\n      ? (<{ inject<T>(token: Type<T>, notFoundValue?: T): T } & TestBedStatic>TestBed).inject<S>(service)\n      : TestBed.get(service);\n\n    if (doesServiceImplementsOnDestroy(testedService)) {\n      // eslint-disable-next-line\n      testedService.ngOnDestroy();\n    }\n  });\n\n  return (overrides?: SpectatorServiceOverrides<S>) => {\n    const defaults: SpectatorServiceOverrides<S> = { providers: [] };\n    const { providers } = { ...defaults, ...overrides };\n\n    if (providers && providers.length) {\n      providers.forEach((provider: Provider) => {\n        TestBed.overrideProvider((provider as any).provide, provider as any);\n      });\n    }\n\n    return new SpectatorService<S>(TestBed.inject ? TestBed.inject(service) : TestBed.get(service));\n  };\n}\n","import { Router, Event } from '@angular/router';\n\nexport abstract class RouterStub extends Router {\n  public abstract emitRouterEvent(event: Event): void;\n  public abstract serializeUrl(): string;\n}\n\nexport function isRouterStub(router: Router): router is RouterStub {\n  return 'emitRouterEvent' in router;\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { Event, Router, UrlSegment } from '@angular/router';\n\nimport { Spectator } from '../spectator/spectator';\n\nimport { ActivatedRouteStub } from './activated-route-stub';\nimport { RouteOptions } from './route-options';\nimport { isRouterStub } from './router-stub';\n\n/**\n * @publicApi\n */\nexport class SpectatorRouting<C> extends Spectator<C> {\n  constructor(\n    fixture: ComponentFixture<any>,\n    debugElement: DebugElement,\n    instance: C,\n    public readonly router: Router,\n    public readonly activatedRouteStub?: ActivatedRouteStub,\n  ) {\n    super(fixture, debugElement, instance, debugElement.nativeElement);\n  }\n\n  /**\n   * Simulates a route navigation by updating the Params, QueryParams and Data observable streams.\n   */\n  public triggerNavigation(options?: RouteOptions): void {\n    if (!this.checkStubPresent()) {\n      return;\n    }\n\n    if (options && options.params) {\n      this.activatedRouteStub.setParams(options.params);\n    }\n\n    if (options && options.queryParams) {\n      this.activatedRouteStub.setQueryParams(options.queryParams);\n    }\n\n    if (options && options.data) {\n      this.activatedRouteStub.setAllData(options.data);\n    }\n\n    if (options && options.fragment) {\n      this.activatedRouteStub.setFragment(options.fragment);\n    }\n\n    this.triggerNavigationAndUpdate();\n  }\n\n  /**\n   * Updates the route params and triggers a route navigation.\n   */\n  public setRouteParam(name: string, value: string): void {\n    if (this.checkStubPresent()) {\n      this.activatedRouteStub.setParam(name, value);\n      this.triggerNavigationAndUpdate();\n    }\n  }\n\n  /**\n   * Updates the route query params and triggers a route navigation.\n   */\n  public setRouteQueryParam(name: string, value: string): void {\n    if (this.checkStubPresent()) {\n      this.activatedRouteStub.setQueryParam(name, value);\n      this.triggerNavigationAndUpdate();\n    }\n  }\n\n  /**\n   * Updates the route data and triggers a route navigation.\n   * The `value` is typed as `any` since the `Route#data` is a record with `any` values.\n   * There's no sense to make it generic until `Route#data` starts supporting generic types.\n   */\n  public setRouteData(name: string, value: any): void {\n    if (this.checkStubPresent()) {\n      this.activatedRouteStub.setData(name, value);\n      this.triggerNavigationAndUpdate();\n    }\n  }\n\n  /**\n   * Updates the route fragment and triggers a route navigation.\n   */\n  public setRouteFragment(fragment: string | null): void {\n    if (this.checkStubPresent()) {\n      this.activatedRouteStub.setFragment(fragment);\n      this.triggerNavigationAndUpdate();\n    }\n  }\n\n  /**\n   * Updates the route url and triggers a route navigation.\n   */\n  public setRouteUrl(url: UrlSegment[]): void {\n    if (this.checkStubPresent()) {\n      this.activatedRouteStub.setUrl(url);\n      this.triggerNavigationAndUpdate();\n    }\n  }\n\n  /**\n   * Emits a router event\n   */\n  public emitRouterEvent(event: Event): void {\n    if (!isRouterStub(this.router)) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        'No stub for Router present. Set Spectator option \"stubsEnabled\" to true if you want to use this ' +\n          'helper, or use Router navigation to trigger events.',\n      );\n\n      return;\n    }\n\n    this.router.emitRouterEvent(event);\n  }\n\n  private triggerNavigationAndUpdate(): void {\n    this.activatedRouteStub!.triggerNavigation();\n    this.detectChanges();\n  }\n\n  private checkStubPresent(): this is { readonly activatedRouteStub: ActivatedRouteStub } {\n    if (!this.activatedRouteStub) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        'No stub for ActivatedRoute present. Set Spectator option \"stubsEnabled\" to true if you want to use this ' +\n          'helper, or use Router to trigger navigation.',\n      );\n\n      return false;\n    }\n\n    return true;\n  }\n}\n","import { convertToParamMap, ActivatedRoute, ActivatedRouteSnapshot, Data, Params, ParamMap, UrlSegment } from '@angular/router';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { RouteOptions } from './route-options';\n\n/**\n * @publicApi\n *\n * Utility class for stubbing ActivatedRoute of @angular/router\n */\nexport class ActivatedRouteStub extends ActivatedRoute {\n  private testParams: Params = {};\n  private testQueryParams: Params = {};\n  private testData: Data = {};\n  private testFragment: string | null = null;\n  private testUrl: UrlSegment[] = [];\n  private testRoot: ActivatedRouteStub | null = null;\n  private testParent: ActivatedRouteStub | null = null;\n  private testFirstChild: ActivatedRouteStub | null = null;\n  private testChildren: ActivatedRouteStub[] | null = null;\n\n  private readonly paramsSubject = new ReplaySubject<Params>(1);\n  private readonly queryParamsSubject = new ReplaySubject<Params>(1);\n  private readonly dataSubject = new ReplaySubject<Data>(1);\n  private readonly fragmentSubject = new ReplaySubject<string | null>(1);\n  private readonly urlSubject = new ReplaySubject<UrlSegment[]>(1);\n\n  constructor(options?: RouteOptions) {\n    super();\n\n    if (options) {\n      this.testParams = options.params || {};\n      this.testQueryParams = options.queryParams || {};\n      this.testData = options.data || {};\n      this.testFragment = options.fragment || null;\n      this.testUrl = options.url || [];\n      this.testRoot = options.root || null;\n      this.testParent = options.parent || null;\n      this.testFirstChild = options.firstChild || null;\n      this.testChildren = options.children || null;\n    }\n\n    this.params = this.paramsSubject.asObservable();\n    this.queryParams = this.queryParamsSubject.asObservable();\n    this.data = this.dataSubject.asObservable();\n    this.fragment = this.fragmentSubject.asObservable() as Observable<string>;\n    this.url = this.urlSubject.asObservable() as Observable<UrlSegment[]>;\n\n    this.snapshot = this.buildSnapshot();\n\n    this.triggerNavigation();\n  }\n\n  public get paramMap(): Observable<ParamMap> {\n    return this.paramsSubject.asObservable().pipe(map((params) => convertToParamMap(params)));\n  }\n\n  public snapshot: ActivatedRouteSnapshot;\n\n  public setParams(params: Params): void {\n    this.testParams = params;\n    this.snapshot = this.buildSnapshot();\n  }\n\n  public setParam(name: string, value: string): void {\n    this.testParams = { ...this.testParams, [name]: value };\n    this.snapshot = this.buildSnapshot();\n  }\n\n  public setQueryParams(queryParams: Params): void {\n    this.testQueryParams = queryParams;\n    this.snapshot = this.buildSnapshot();\n  }\n\n  public setQueryParam(name: string, value: string): void {\n    this.testQueryParams = { ...this.testQueryParams, [name]: value };\n    this.snapshot = this.buildSnapshot();\n  }\n\n  public setAllData(data: Data): void {\n    this.testData = data;\n    this.snapshot = this.buildSnapshot();\n  }\n\n  public setData(name: string, value: any): void {\n    this.testData = { ...this.testData, [name]: value };\n    this.snapshot = this.buildSnapshot();\n  }\n\n  public setFragment(fragment: string | null): void {\n    this.testFragment = fragment;\n    this.snapshot = this.buildSnapshot();\n  }\n\n  public setUrl(url: UrlSegment[]): void {\n    this.testUrl = url;\n    this.snapshot = this.buildSnapshot();\n  }\n\n  public get root(): ActivatedRouteStub {\n    return this.testRoot || this;\n  }\n\n  public get parent(): ActivatedRouteStub | null {\n    return this.testParent || null;\n  }\n\n  public get children(): ActivatedRouteStub[] {\n    return this.testChildren || [this];\n  }\n\n  public get firstChild(): ActivatedRouteStub | null {\n    return this.testFirstChild || null;\n  }\n\n  /**\n   * Simulates a route navigation by updating the Params, QueryParams and Data observable streams.\n   */\n  public triggerNavigation(): void {\n    this.paramsSubject.next(this.testParams);\n    this.queryParamsSubject.next(this.testQueryParams);\n    this.dataSubject.next(this.testData);\n    this.fragmentSubject.next(this.testFragment);\n    this.urlSubject.next(this.testUrl);\n  }\n\n  public toString(): string {\n    return 'activatedRouteStub';\n  }\n\n  private buildSnapshot(): ActivatedRouteSnapshot {\n    const snapshot = new ActivatedRouteSnapshot();\n\n    snapshot.params = this.testParams;\n    snapshot.queryParams = this.testQueryParams;\n    snapshot.data = this.testData;\n    snapshot.fragment = this.testFragment!;\n    snapshot.url = this.testUrl;\n\n    return snapshot;\n  }\n}\n","import { ActivatedRoute, Event, Router } from '@angular/router';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { Subject } from 'rxjs';\n\nimport { ModuleMetadata } from '../base/initial-module';\nimport { initialSpectatorModule } from '../spectator/initial-module';\n\nimport { ActivatedRouteStub } from './activated-route-stub';\nimport { SpectatorRoutingOptions } from './options';\nimport { RouterStub } from './router-stub';\n\n/**\n * @internal\n */\nexport function initialRoutingModule<S>(options: Required<SpectatorRoutingOptions<S>>): ModuleMetadata {\n  const moduleMetadata = initialSpectatorModule(options);\n\n  if (options.stubsEnabled) {\n    moduleMetadata.imports.push(RouterTestingModule);\n    moduleMetadata.providers.push(\n      options.mockProvider(RouterStub, {\n        events: new Subject<Event>(),\n        emitRouterEvent(event: Event): void {\n          this.events.next(event);\n        },\n        serializeUrl(): string {\n          return '/';\n        },\n      }),\n      {\n        provide: Router,\n        useExisting: RouterStub,\n      },\n    );\n\n    moduleMetadata.providers.push(\n      {\n        provide: ActivatedRouteStub,\n        useValue: new ActivatedRouteStub({\n          params: options.params,\n          queryParams: options.queryParams,\n          data: options.data,\n        }),\n      },\n      {\n        provide: ActivatedRoute,\n        useExisting: ActivatedRouteStub,\n      },\n    );\n  } else {\n    moduleMetadata.imports.push(RouterTestingModule.withRoutes(options.routes));\n  }\n\n  return moduleMetadata;\n}\n","import { Routes } from '@angular/router';\n\nimport { merge } from '../internals/merge';\nimport { getSpectatorDefaultOptions, SpectatorOptions } from '../spectator/options';\nimport { OptionalsRequired } from '../types';\n\nimport { RouteOptions } from './route-options';\n\nexport type SpectatorRoutingOptions<C> = SpectatorOptions<C> &\n  RouteOptions & {\n    stubsEnabled?: boolean;\n    routes?: Routes;\n  };\n\nconst defaultRoutingOptions: OptionalsRequired<SpectatorRoutingOptions<any>> = {\n  ...getSpectatorDefaultOptions(),\n  params: {},\n  queryParams: {},\n  data: {},\n  fragment: null,\n  stubsEnabled: true,\n  routes: [],\n  url: [],\n  root: null,\n  parent: null,\n  children: null,\n  firstChild: null,\n};\n\n/**\n * @internal\n */\nexport function getRoutingDefaultOptions<S>(overrides: SpectatorRoutingOptions<S>): Required<SpectatorRoutingOptions<S>> {\n  return merge(defaultRoutingOptions, overrides);\n}\n","import { NgZone, Provider, Type } from '@angular/core';\nimport { TestBed, waitForAsync } from '@angular/core/testing';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { addMatchers } from '../core';\nimport { setProps } from '../internals/query';\nimport * as customMatchers from '../matchers';\nimport {\n  overrideComponentIfProviderOverridesSpecified,\n  overrideComponents,\n  overrideDirectives,\n  overrideModules,\n  overridePipes,\n  SpectatorOverrides,\n} from '../spectator/create-factory';\nimport { InferInputSignals, isType } from '../types';\n\nimport { SpyObject } from '../mock';\nimport { ActivatedRouteStub } from './activated-route-stub';\nimport { initialRoutingModule } from './initial-module';\nimport { getRoutingDefaultOptions, SpectatorRoutingOptions } from './options';\nimport { RouteOptions } from './route-options';\nimport { SpectatorRouting } from './spectator-routing';\n\n/**\n * @publicApi\n */\nexport type SpectatorRoutingOverrides<C> = SpectatorOverrides<C> & RouteOptions;\n\n/**\n * @publicApi\n */\nexport type SpectatorRoutingFactory<C> = (options?: SpectatorRoutingOverrides<C>) => SpectatorRouting<C>;\n\n/**\n * @publicApi\n */\nexport function createRoutingFactory<C>(typeOrOptions: Type<C> | SpectatorRoutingOptions<C>): SpectatorRoutingFactory<C> {\n  const options = isType(typeOrOptions)\n    ? getRoutingDefaultOptions<C>({ component: typeOrOptions })\n    : getRoutingDefaultOptions(typeOrOptions);\n\n  const moduleMetadata = initialRoutingModule<C>(options);\n\n  beforeEach(waitForAsync(() => {\n    addMatchers(customMatchers);\n    TestBed.configureTestingModule(moduleMetadata);\n\n    overrideModules(options);\n    overrideComponents(options);\n    overrideDirectives(options);\n    overridePipes(options);\n\n    overrideComponentIfProviderOverridesSpecified(options);\n\n    TestBed.compileComponents();\n  }));\n\n  return (overrides?: SpectatorRoutingOverrides<C>) => {\n    const defaults: SpectatorRoutingOverrides<C> = {\n      props: {},\n      detectChanges: true,\n      providers: [],\n    };\n\n    const { detectChanges, props, providers } = { ...defaults, ...overrides };\n\n    if (providers && providers.length) {\n      providers.forEach((provider: Provider) => {\n        TestBed.overrideProvider((provider as any).provide, provider as any);\n      });\n    }\n\n    const { params, queryParams, data, fragment, url, root, parent, children, firstChild } = { ...options, ...overrides };\n\n    TestBed.overrideProvider(ActivatedRoute, {\n      useValue: new ActivatedRouteStub({ params, queryParams, data, fragment, url, root, parent, children, firstChild }),\n    });\n    const ngZone = (<any>TestBed).inject ? TestBed.inject(NgZone) : TestBed.get(NgZone);\n\n    return ngZone.run(() => {\n      const spectator = createSpectatorRouting(options, props);\n\n      spectator.router.initialNavigation();\n\n      if (options.detectChanges && detectChanges) {\n        spectator.detectChanges();\n      }\n\n      return spectator;\n    });\n  };\n}\n\nfunction createSpectatorRouting<C>(options: Required<SpectatorRoutingOptions<C>>, props?: InferInputSignals<C>): SpectatorRouting<C> {\n  const fixture = TestBed.createComponent(options.component);\n  const debugElement = fixture.debugElement;\n\n  const component = setProps(fixture.componentRef, props);\n\n  /**\n   * Back compatibility, angular under 9 version doesnt have a inject function\n   */\n  if (!TestBed.inject) {\n    return new SpectatorRouting(fixture, debugElement, component, TestBed.get(Router), TestBed.get(ActivatedRoute));\n  }\n\n  return new SpectatorRouting(\n    fixture,\n    debugElement,\n    component,\n    TestBed.inject(Router),\n    TestBed.inject(ActivatedRoute) as SpyObject<ActivatedRouteStub>,\n  );\n}\n","import { HttpClient } from '@angular/common/http';\nimport { HttpTestingController, TestRequest } from '@angular/common/http/testing';\n\nimport { BaseSpectator } from '../base/base-spectator';\n\n/**\n * @publicApi\n */\nexport enum HttpMethod {\n  GET = 'GET',\n  POST = 'POST',\n  DELETE = 'DELETE',\n  PUT = 'PUT',\n  PATCH = 'PATCH',\n  HEAD = 'HEAD',\n  JSONP = 'JSONP',\n  OPTIONS = 'OPTIONS',\n}\n\nexport interface HttpExpect {\n  url: string;\n  method: HttpMethod;\n}\n\n/**\n * @publicApi\n */\nexport class SpectatorHttp<S> extends BaseSpectator {\n  constructor(\n    public service: S,\n    public httpClient: HttpClient,\n    public controller: HttpTestingController,\n  ) {\n    super();\n\n    // small workaround to prevent issues if destructuring SpectatorHttp, which was common in Spectator 3\n    // remove in v5?\n    this.expectOne = this.expectOne.bind(this);\n    this.expectConcurrent = this.expectConcurrent.bind(this);\n  }\n\n  public expectOne(url: string, method: HttpMethod): TestRequest {\n    expect(true).toBe(true); // workaround to avoid `Spec has no expectations` https://github.com/NetanelBasal/spectator/issues/75\n\n    const req = this.controller.expectOne({\n      url,\n      method,\n    });\n\n    // assert that there are no outstanding requests.\n    this.controller.verify();\n\n    return req;\n  }\n\n  public expectConcurrent(expectations: HttpExpect[]): TestRequest[] {\n    const requests = expectations.map((expectation: HttpExpect) => {\n      return this.controller.expectOne({\n        url: expectation.url,\n        method: expectation.method,\n      });\n    });\n\n    this.controller.verify();\n\n    return requests;\n  }\n\n  public flushAll(requests: TestRequest[], args: any[]): void {\n    requests.forEach((request: TestRequest, idx: number) => {\n      request.flush(args[idx]);\n    });\n  }\n}\n","import { HttpClientTestingModule } from '@angular/common/http/testing';\n\nimport { initialModule, ModuleMetadata } from '../base/initial-module';\n\nimport { SpectatorHttpOptions } from './options';\n\n/**\n * @internal\n */\nexport function initialHttpModule<S>(options: Required<SpectatorHttpOptions<S>>): ModuleMetadata {\n  const moduleMetadata = initialModule(options);\n\n  moduleMetadata.providers.push(options.service);\n  moduleMetadata.imports.push(HttpClientTestingModule);\n\n  return moduleMetadata;\n}\n","import { Type } from '@angular/core';\n\nimport { getDefaultBaseOptions, BaseSpectatorOptions } from '../base/options';\nimport { merge } from '../internals/merge';\nimport { OptionalsRequired } from '../types';\n\nexport interface SpectatorHttpOptions<S> extends BaseSpectatorOptions {\n  service: Type<S>;\n}\n\nconst defaultHttpOptions: OptionalsRequired<SpectatorHttpOptions<any>> = {\n  ...getDefaultBaseOptions(),\n};\n\n/**\n * @internal\n */\nexport function getDefaultHttpOptions<S>(overrides: SpectatorHttpOptions<S>): Required<SpectatorHttpOptions<S>> {\n  return merge(defaultHttpOptions, overrides);\n}\n","import { HttpClient } from '@angular/common/http';\nimport { HttpTestingController } from '@angular/common/http/testing';\nimport { Provider, Type } from '@angular/core';\nimport { TestBed } from '@angular/core/testing';\n\nimport { BaseSpectatorOverrides } from '../base/options';\nimport { isType } from '../types';\n\nimport { initialHttpModule } from './initial-module';\nimport { getDefaultHttpOptions, SpectatorHttpOptions } from './options';\nimport { SpectatorHttp } from './spectator-http';\nimport { overrideModules } from '../spectator/create-factory';\n\n/**\n * @publicApi\n */\nexport type SpectatorHttpFactory<S> = (overrides?: CreateHttpOverrides<S>) => SpectatorHttp<S>;\n\n/**\n * @publicApi\n */\nexport interface CreateHttpOverrides<S> extends BaseSpectatorOverrides {}\n\n/**\n * @publicApi\n */\nexport function createHttpFactory<S>(typeOrOptions: Type<S> | SpectatorHttpOptions<S>): SpectatorHttpFactory<S> {\n  const service = isType(typeOrOptions) ? typeOrOptions : typeOrOptions.service;\n  const options = isType(typeOrOptions) ? getDefaultHttpOptions<S>({ service }) : getDefaultHttpOptions(typeOrOptions);\n  const moduleMetadata = initialHttpModule(options);\n\n  beforeEach(() => {\n    TestBed.configureTestingModule(moduleMetadata);\n    overrideModules(options);\n  });\n\n  afterEach(() => {\n    if (TestBed.inject) {\n      TestBed.inject(HttpTestingController).verify();\n    } else {\n      TestBed.get(HttpTestingController).verify();\n    }\n  });\n\n  return (overrides?: CreateHttpOverrides<S>) => {\n    const defaults: CreateHttpOverrides<S> = { providers: [] };\n    const { providers } = { ...defaults, ...overrides };\n\n    if (providers && providers.length) {\n      providers.forEach((provider: Provider) => {\n        TestBed.overrideProvider((provider as any).provide, provider as any);\n      });\n    }\n\n    /**\n     * Back compatibility, angular under 9 version doesnt have a inject function\n     */\n    if (!TestBed.inject) {\n      return new SpectatorHttp<S>(TestBed.get(service), TestBed.get(HttpClient), TestBed.get(HttpTestingController));\n    }\n\n    return new SpectatorHttp<S>(TestBed.inject(service), TestBed.inject(HttpClient), TestBed.inject(HttpTestingController));\n  };\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\n\nimport { BaseSpectator } from '../base/base-spectator';\nimport { setHostProps } from '../internals/query';\nimport { HostComponent } from '../spectator-host/host-component';\n\n/**\n * @publicApi\n */\nexport class SpectatorPipe<P, H = HostComponent> extends BaseSpectator {\n  constructor(\n    public hostComponent: H,\n    public fixture: ComponentFixture<any>,\n    public debugElement: DebugElement,\n    public element: Element,\n  ) {\n    super();\n  }\n\n  public detectChanges(): void {\n    this.fixture.detectChanges();\n  }\n\n  public setHostInput<K extends keyof H>(input: Partial<H>): void;\n  public setHostInput<K extends keyof H>(input: K, inputValue: H[K]): void;\n  public setHostInput(input: any, value?: any): void {\n    setHostProps(this.fixture.componentRef, input, value);\n    this.detectChanges();\n  }\n}\n","import { initialModule, ModuleMetadata } from '../base/initial-module';\nimport { declareInModule } from '../utils';\n\nimport { SpectatorPipeOptions } from './options';\n\n/**\n * @internal\n */\nexport function initialSpectatorPipeModule<D, H>(options: Required<SpectatorPipeOptions<D, H>>): ModuleMetadata {\n  const moduleMetadata = initialModule(options);\n\n  declareInModule(moduleMetadata, options.pipe);\n  moduleMetadata.declarations.push(options.host);\n\n  return moduleMetadata;\n}\n","import { Type } from '@angular/core';\n\nimport { merge } from '../internals/merge';\nimport { OptionalsRequired } from '../types';\nimport { BaseSpectatorOptions, getDefaultBaseOptions } from '../base/options';\nimport { HostComponent } from '../spectator-host/host-component';\n\n/**\n * @publicApi\n */\nexport interface SpectatorPipeOptions<P, H> extends BaseSpectatorOptions {\n  pipe: Type<P>;\n  host?: Type<H>;\n  detectChanges?: boolean;\n  template?: string;\n}\n\nconst defaultSpectatorPipeOptions: OptionalsRequired<SpectatorPipeOptions<any, any>> = {\n  ...getDefaultBaseOptions(),\n  host: HostComponent,\n  detectChanges: true,\n  template: '',\n};\n\n/**\n * @internal\n */\nexport function getSpectatorPipeDefaultOptions<P, H>(overrides?: SpectatorPipeOptions<P, H>): Required<SpectatorPipeOptions<P, H>> {\n  return merge(defaultSpectatorPipeOptions, overrides);\n}\n","import { Provider, Type } from '@angular/core';\nimport { TestBed, waitForAsync } from '@angular/core/testing';\nimport { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';\n\nimport { BaseSpectatorOverrides } from '../base/options';\nimport { addMatchers } from '../core';\nimport { setHostProps } from '../internals/query';\nimport * as customMatchers from '../matchers';\nimport { HostComponent } from '../spectator-host/host-component';\nimport { isType } from '../types';\n\nimport { overrideModules, overridePipes } from '../spectator/create-factory';\nimport { initialSpectatorPipeModule } from './initial-module';\nimport { SpectatorPipeOptions, getSpectatorPipeDefaultOptions } from './options';\nimport { SpectatorPipe } from './spectator-pipe';\n\n/**\n * @publicApi\n */\nexport type SpectatorPipeFactory<P, H> = <HP>(\n  templateOrOverrides?: string | SpectatorPipeOverrides<H, HP>,\n  overrides?: SpectatorPipeOverrides<H, HP>,\n) => SpectatorPipe<P, H & (HostComponent extends H ? HP : unknown)>;\n\n/**\n * @publicApi\n */\nexport interface SpectatorPipeOverrides<H, HP> extends BaseSpectatorOverrides {\n  detectChanges?: boolean;\n  hostProps?: HostComponent extends H ? HP : Partial<H>;\n}\n\n/**\n * @publicApi\n */\nexport function createPipeFactory<P, H = HostComponent>(typeOrOptions: Type<P> | SpectatorPipeOptions<P, H>): SpectatorPipeFactory<P, H> {\n  const options = isType(typeOrOptions)\n    ? getSpectatorPipeDefaultOptions<P, H>({ pipe: typeOrOptions })\n    : getSpectatorPipeDefaultOptions(typeOrOptions);\n\n  const moduleMetadata = initialSpectatorPipeModule<P, H>(options);\n\n  beforeEach(waitForAsync(() => {\n    addMatchers(customMatchers);\n    TestBed.configureTestingModule(moduleMetadata);\n    overrideModules(options);\n    overridePipes(options);\n  }));\n\n  return <HP>(templateOrOverrides?: string | SpectatorPipeOverrides<H, HP>, overrides?: SpectatorPipeOverrides<H, HP>) => {\n    const defaults: SpectatorPipeOverrides<H, HP> = {\n      hostProps: {} as any,\n      detectChanges: true,\n      providers: [],\n    };\n    const resolvedOverrides = typeof templateOrOverrides === 'object' ? templateOrOverrides : overrides;\n    const { detectChanges, hostProps, providers } = { ...defaults, ...resolvedOverrides };\n    const template = typeof templateOrOverrides === 'string' ? templateOrOverrides : options.template;\n\n    if (providers && providers.length) {\n      providers.forEach((provider: Provider) => {\n        TestBed.overrideProvider((provider as any).provide, provider as any);\n      });\n    }\n\n    if (template) {\n      TestBed.overrideModule(BrowserDynamicTestingModule, {}).overrideComponent(options.host, {\n        set: { template },\n      });\n    }\n\n    const spectator = createSpectatorPipe(options, hostProps);\n\n    if (options.detectChanges && detectChanges) {\n      spectator.detectChanges();\n    }\n\n    return spectator;\n  };\n}\n\nfunction createSpectatorPipe<P, H, HP>(options: Required<SpectatorPipeOptions<P, H>>, hostProps?: HP): SpectatorPipe<P, H & HP> {\n  const hostFixture = TestBed.createComponent(options.host);\n  const debugElement = hostFixture.debugElement;\n\n  const hostComponent = setHostProps(hostFixture.componentRef, hostProps);\n\n  return new SpectatorPipe(hostComponent, hostFixture, hostFixture.debugElement, debugElement.nativeElement);\n}\n","/// <reference path=\"./lib/matchers-types.ts\" />\nexport { Spectator } from './lib/spectator/spectator';\nexport { SpectatorOptions } from './lib/spectator/options';\nexport { createComponentFactory, SpectatorFactory, SpectatorOverrides } from './lib/spectator/create-factory';\nexport { initialSpectatorModule } from './lib/spectator/initial-module';\n\nexport { SpectatorHost } from './lib/spectator-host/spectator-host';\nexport { SpectatorHostOptions } from './lib/spectator-host/options';\nexport { createHostFactory, SpectatorHostFactory, SpectatorHostOverrides } from './lib/spectator-host/create-factory';\nexport { initialSpectatorWithHostModule } from './lib/spectator-host/initial-module';\nexport { HostComponent, HostModule } from './lib/spectator-host/host-component';\n\nexport { SpectatorDirective } from './lib/spectator-directive/spectator-directive';\nexport { SpectatorDirectiveOptions } from './lib/spectator-directive/options';\nexport { createDirectiveFactory, SpectatorDirectiveFactory, SpectatorDirectiveOverrides } from './lib/spectator-directive/create-factory';\nexport { initialSpectatorDirectiveModule } from './lib/spectator-directive/initial-module';\n\nexport { SpectatorService } from './lib/spectator-service/spectator-service';\nexport { SpectatorServiceOptions } from './lib/spectator-service/options';\nexport { SpectatorServiceFactory, createServiceFactory, SpectatorServiceOverrides } from './lib/spectator-service/create-factory';\n\nexport { SpectatorRouting } from './lib/spectator-routing/spectator-routing';\nexport { SpectatorRoutingOptions } from './lib/spectator-routing/options';\nexport { SpectatorRoutingFactory, createRoutingFactory, SpectatorRoutingOverrides } from './lib/spectator-routing/create-factory';\nexport { ActivatedRouteStub } from './lib/spectator-routing/activated-route-stub';\n\nexport { SpectatorHttp, HttpMethod } from './lib/spectator-http/spectator-http';\nexport { SpectatorHttpOptions } from './lib/spectator-http/options';\nexport { SpectatorHttpFactory, createHttpFactory, CreateHttpOverrides } from './lib/spectator-http/create-factory';\n\nexport { SpectatorPipe } from './lib/spectator-pipe/spectator-pipe';\nexport { SpectatorPipeOptions } from './lib/spectator-pipe/options';\nexport { createPipeFactory, SpectatorPipeFactory, SpectatorPipeOverrides } from './lib/spectator-pipe/create-factory';\nexport { initialSpectatorPipeModule } from './lib/spectator-pipe/initial-module';\n\nexport * from './lib/dom-selectors';\nexport * from './lib/matchers';\nexport * from './lib/mock';\nexport * from './lib/token';\nexport * from './lib/types';\nexport { typeInElement } from './lib/type-in-element';\nexport { defineGlobalsInjections } from './lib/globals-injections';\nexport { dispatchEvent, dispatchFakeEvent, dispatchKeyboardEvent, dispatchMouseEvent, dispatchTouchEvent } from './lib/dispatch-events';\nexport { createFakeEvent, createKeyboardEvent, createMouseEvent, createTouchEvent } from './lib/event-creators';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["DOMQueries"],"mappings":"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"}