{"version":3,"file":"protractor.mjs","sources":["../../../../../../../src/cdk/testing/protractor/protractor-element.ts","../../../../../../../src/cdk/testing/protractor/protractor-harness-environment.ts","../../../../../../../src/cdk/testing/protractor/public-api.ts","../../../../../../../src/cdk/testing/protractor/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  _getTextWithExcludedElements,\n  ElementDimensions,\n  ModifierKeys,\n  TestElement,\n  TestKey,\n  TextOptions,\n  EventData,\n} from '@angular/cdk/testing';\nimport {browser, Button, by, ElementFinder, Key} from 'protractor';\n\n/** Maps the `TestKey` constants to Protractor's `Key` constants. */\nconst keyMap = {\n  [TestKey.BACKSPACE]: Key.BACK_SPACE,\n  [TestKey.TAB]: Key.TAB,\n  [TestKey.ENTER]: Key.ENTER,\n  [TestKey.SHIFT]: Key.SHIFT,\n  [TestKey.CONTROL]: Key.CONTROL,\n  [TestKey.ALT]: Key.ALT,\n  [TestKey.ESCAPE]: Key.ESCAPE,\n  [TestKey.PAGE_UP]: Key.PAGE_UP,\n  [TestKey.PAGE_DOWN]: Key.PAGE_DOWN,\n  [TestKey.END]: Key.END,\n  [TestKey.HOME]: Key.HOME,\n  [TestKey.LEFT_ARROW]: Key.ARROW_LEFT,\n  [TestKey.UP_ARROW]: Key.ARROW_UP,\n  [TestKey.RIGHT_ARROW]: Key.ARROW_RIGHT,\n  [TestKey.DOWN_ARROW]: Key.ARROW_DOWN,\n  [TestKey.INSERT]: Key.INSERT,\n  [TestKey.DELETE]: Key.DELETE,\n  [TestKey.F1]: Key.F1,\n  [TestKey.F2]: Key.F2,\n  [TestKey.F3]: Key.F3,\n  [TestKey.F4]: Key.F4,\n  [TestKey.F5]: Key.F5,\n  [TestKey.F6]: Key.F6,\n  [TestKey.F7]: Key.F7,\n  [TestKey.F8]: Key.F8,\n  [TestKey.F9]: Key.F9,\n  [TestKey.F10]: Key.F10,\n  [TestKey.F11]: Key.F11,\n  [TestKey.F12]: Key.F12,\n  [TestKey.META]: Key.META,\n};\n\n/** Converts a `ModifierKeys` object to a list of Protractor `Key`s. */\nfunction toProtractorModifierKeys(modifiers: ModifierKeys): string[] {\n  const result: string[] = [];\n  if (modifiers.control) {\n    result.push(Key.CONTROL);\n  }\n  if (modifiers.alt) {\n    result.push(Key.ALT);\n  }\n  if (modifiers.shift) {\n    result.push(Key.SHIFT);\n  }\n  if (modifiers.meta) {\n    result.push(Key.META);\n  }\n  return result;\n}\n\n/**\n * A `TestElement` implementation for Protractor.\n * @deprecated\n * @breaking-change 13.0.0\n */\nexport class ProtractorElement implements TestElement {\n  constructor(readonly element: ElementFinder) {}\n\n  /** Blur the element. */\n  async blur(): Promise<void> {\n    return browser.executeScript('arguments[0].blur()', this.element);\n  }\n\n  /** Clear the element's input (for input and textarea elements only). */\n  async clear(): Promise<void> {\n    return this.element.clear();\n  }\n\n  /**\n   * Click the element at the default location for the current environment. If you need to guarantee\n   * the element is clicked at a specific location, consider using `click('center')` or\n   * `click(x, y)` instead.\n   */\n  click(modifiers?: ModifierKeys): Promise<void>;\n  /** Click the element at the element's center. */\n  click(location: 'center', modifiers?: ModifierKeys): Promise<void>;\n  /**\n   * Click the element at the specified coordinates relative to the top-left of the element.\n   * @param relativeX Coordinate within the element, along the X-axis at which to click.\n   * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n   * @param modifiers Modifier keys held while clicking\n   */\n  click(relativeX: number, relativeY: number, modifiers?: ModifierKeys): Promise<void>;\n  async click(\n    ...args: [ModifierKeys?] | ['center', ModifierKeys?] | [number, number, ModifierKeys?]\n  ): Promise<void> {\n    await this._dispatchClickEventSequence(args, Button.LEFT);\n  }\n\n  /**\n   * Right clicks on the element at the specified coordinates relative to the top-left of it.\n   * @param relativeX Coordinate within the element, along the X-axis at which to click.\n   * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n   * @param modifiers Modifier keys held while clicking\n   */\n  rightClick(relativeX: number, relativeY: number, modifiers?: ModifierKeys): Promise<void>;\n  async rightClick(\n    ...args: [ModifierKeys?] | ['center', ModifierKeys?] | [number, number, ModifierKeys?]\n  ): Promise<void> {\n    await this._dispatchClickEventSequence(args, Button.RIGHT);\n  }\n\n  /** Focus the element. */\n  async focus(): Promise<void> {\n    return browser.executeScript('arguments[0].focus()', this.element);\n  }\n\n  /** Get the computed value of the given CSS property for the element. */\n  async getCssValue(property: string): Promise<string> {\n    return this.element.getCssValue(property);\n  }\n\n  /** Hovers the mouse over the element. */\n  async hover(): Promise<void> {\n    return browser\n      .actions()\n      .mouseMove(await this.element.getWebElement())\n      .perform();\n  }\n\n  /** Moves the mouse away from the element. */\n  async mouseAway(): Promise<void> {\n    return browser\n      .actions()\n      .mouseMove(await this.element.getWebElement(), {x: -1, y: -1})\n      .perform();\n  }\n\n  /**\n   * Sends the given string to the input as a series of key presses. Also fires input events\n   * and attempts to add the string to the Element's value.\n   */\n  async sendKeys(...keys: (string | TestKey)[]): Promise<void>;\n  /**\n   * Sends the given string to the input as a series of key presses. Also fires input events\n   * and attempts to add the string to the Element's value.\n   */\n  async sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;\n  async sendKeys(...modifiersAndKeys: any[]): Promise<void> {\n    const first = modifiersAndKeys[0];\n    let modifiers: ModifierKeys;\n    let rest: (string | TestKey)[];\n    if (typeof first !== 'string' && typeof first !== 'number') {\n      modifiers = first;\n      rest = modifiersAndKeys.slice(1);\n    } else {\n      modifiers = {};\n      rest = modifiersAndKeys;\n    }\n\n    const modifierKeys = toProtractorModifierKeys(modifiers);\n    const keys = rest\n      .map(k => (typeof k === 'string' ? k.split('') : [keyMap[k]]))\n      .reduce((arr, k) => arr.concat(k), [])\n      // Key.chord doesn't work well with geckodriver (mozilla/geckodriver#1502),\n      // so avoid it if no modifier keys are required.\n      .map(k => (modifierKeys.length > 0 ? Key.chord(...modifierKeys, k) : k));\n\n    return this.element.sendKeys(...keys);\n  }\n\n  /**\n   * Gets the text from the element.\n   * @param options Options that affect what text is included.\n   */\n  async text(options?: TextOptions): Promise<string> {\n    if (options?.exclude) {\n      return browser.executeScript(_getTextWithExcludedElements, this.element, options.exclude);\n    }\n    // We don't go through Protractor's `getText`, because it excludes text from hidden elements.\n    return browser.executeScript(`return (arguments[0].textContent || '').trim()`, this.element);\n  }\n\n  /** Gets the value for the given attribute from the element. */\n  async getAttribute(name: string): Promise<string | null> {\n    return browser.executeScript(\n      `return arguments[0].getAttribute(arguments[1])`,\n      this.element,\n      name,\n    );\n  }\n\n  /** Checks whether the element has the given class. */\n  async hasClass(name: string): Promise<boolean> {\n    const classes = (await this.getAttribute('class')) || '';\n    return new Set(classes.split(/\\s+/).filter(c => c)).has(name);\n  }\n\n  /** Gets the dimensions of the element. */\n  async getDimensions(): Promise<ElementDimensions> {\n    const {width, height} = await this.element.getSize();\n    const {x: left, y: top} = await this.element.getLocation();\n    return {width, height, left, top};\n  }\n\n  /** Gets the value of a property of an element. */\n  async getProperty<T = any>(name: string): Promise<T> {\n    return browser.executeScript(`return arguments[0][arguments[1]]`, this.element, name);\n  }\n\n  /** Sets the value of a property of an input. */\n  async setInputValue(value: string): Promise<void> {\n    return browser.executeScript(`arguments[0].value = arguments[1]`, this.element, value);\n  }\n\n  /** Selects the options at the specified indexes inside of a native `select` element. */\n  async selectOptions(...optionIndexes: number[]): Promise<void> {\n    const options = await this.element.all(by.css('option'));\n    const indexes = new Set(optionIndexes); // Convert to a set to remove duplicates.\n\n    if (options.length && indexes.size) {\n      // Reset the value so all the selected states are cleared. We can\n      // reuse the input-specific method since the logic is the same.\n      await this.setInputValue('');\n\n      for (let i = 0; i < options.length; i++) {\n        if (indexes.has(i)) {\n          // We have to hold the control key while clicking on options so that multiple can be\n          // selected in multi-selection mode. The key doesn't do anything for single selection.\n          await browser.actions().keyDown(Key.CONTROL).perform();\n          await options[i].click();\n          await browser.actions().keyUp(Key.CONTROL).perform();\n        }\n      }\n    }\n  }\n\n  /** Checks whether this element matches the given selector. */\n  async matchesSelector(selector: string): Promise<boolean> {\n    return browser.executeScript(\n      `\n          return (Element.prototype.matches ||\n                  Element.prototype.msMatchesSelector).call(arguments[0], arguments[1])\n          `,\n      this.element,\n      selector,\n    );\n  }\n\n  /** Checks whether the element is focused. */\n  async isFocused(): Promise<boolean> {\n    return this.element.equals(browser.driver.switchTo().activeElement());\n  }\n\n  /**\n   * Dispatches an event with a particular name.\n   * @param name Name of the event to be dispatched.\n   */\n  async dispatchEvent(name: string, data?: Record<string, EventData>): Promise<void> {\n    return browser.executeScript(_dispatchEvent, name, this.element, data);\n  }\n\n  /** Dispatches all the events that are part of a click event sequence. */\n  private async _dispatchClickEventSequence(\n    args: [ModifierKeys?] | ['center', ModifierKeys?] | [number, number, ModifierKeys?],\n    button: string,\n  ) {\n    let modifiers: ModifierKeys = {};\n    if (args.length && typeof args[args.length - 1] === 'object') {\n      modifiers = args.pop() as ModifierKeys;\n    }\n    const modifierKeys = toProtractorModifierKeys(modifiers);\n\n    // Omitting the offset argument to mouseMove results in clicking the center.\n    // This is the default behavior we want, so we use an empty array of offsetArgs if\n    // no args remain after popping the modifiers from the args passed to this function.\n    const offsetArgs = (args.length === 2 ? [{x: args[0], y: args[1]}] : []) as [\n      {x: number; y: number},\n    ];\n\n    let actions = browser.actions().mouseMove(await this.element.getWebElement(), ...offsetArgs);\n\n    for (const modifierKey of modifierKeys) {\n      actions = actions.keyDown(modifierKey);\n    }\n    actions = actions.click(button);\n    for (const modifierKey of modifierKeys) {\n      actions = actions.keyUp(modifierKey);\n    }\n\n    await actions.perform();\n  }\n}\n\n/**\n * Dispatches an event with a particular name and data to an element.\n * Note that this needs to be a pure function, because it gets stringified by\n * Protractor and is executed inside the browser.\n */\nfunction _dispatchEvent(name: string, element: ElementFinder, data?: Record<string, EventData>) {\n  const event = document.createEvent('Event');\n  event.initEvent(name);\n\n  if (data) {\n    // tslint:disable-next-line:ban Have to use `Object.assign` to preserve the original object.\n    Object.assign(event, data);\n  }\n\n  // This type has a string index signature, so we cannot access it using a dotted property access.\n  element['dispatchEvent'](event);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessEnvironment, HarnessLoader, TestElement} from '@angular/cdk/testing';\nimport {by, element as protractorElement, ElementArrayFinder, ElementFinder} from 'protractor';\nimport {ProtractorElement} from './protractor-element';\n\n/**\n * Options to configure the environment.\n * @deprecated\n * @breaking-change 13.0.0\n */\nexport interface ProtractorHarnessEnvironmentOptions {\n  /** The query function used to find DOM elements. */\n  queryFn: (selector: string, root: ElementFinder) => ElementArrayFinder;\n}\n\n/** The default environment options. */\nconst defaultEnvironmentOptions: ProtractorHarnessEnvironmentOptions = {\n  queryFn: (selector: string, root: ElementFinder) => root.all(by.css(selector)),\n};\n\n/**\n * A `HarnessEnvironment` implementation for Protractor.\n * @deprecated As of v13.0.0, this environment no longer works, as it is not\n * compatible with the new [Angular Package Format](https://angular.io/guide/angular-package-format).\n * @breaking-change 13.0.0\n */\nexport class ProtractorHarnessEnvironment extends HarnessEnvironment<ElementFinder> {\n  /** The options for this environment. */\n  private _options: ProtractorHarnessEnvironmentOptions;\n\n  protected constructor(\n    rawRootElement: ElementFinder,\n    options?: ProtractorHarnessEnvironmentOptions,\n  ) {\n    super(rawRootElement);\n    this._options = {...defaultEnvironmentOptions, ...options};\n  }\n\n  /** Creates a `HarnessLoader` rooted at the document root. */\n  static loader(options?: ProtractorHarnessEnvironmentOptions): HarnessLoader {\n    return new ProtractorHarnessEnvironment(protractorElement(by.css('body')), options);\n  }\n\n  /** Gets the ElementFinder corresponding to the given TestElement. */\n  static getNativeElement(el: TestElement): ElementFinder {\n    if (el instanceof ProtractorElement) {\n      return el.element;\n    }\n    throw Error('This TestElement was not created by the ProtractorHarnessEnvironment');\n  }\n\n  /**\n   * Flushes change detection and async tasks captured in the Angular zone.\n   * In most cases it should not be necessary to call this manually. However, there may be some edge\n   * cases where it is needed to fully flush animation events.\n   */\n  async forceStabilize(): Promise<void> {}\n\n  /** @docs-private */\n  async waitForTasksOutsideAngular(): Promise<void> {\n    // TODO: figure out how we can do this for the protractor environment.\n    // https://github.com/angular/components/issues/17412\n  }\n\n  /** Gets the root element for the document. */\n  protected getDocumentRoot(): ElementFinder {\n    return protractorElement(by.css('body'));\n  }\n\n  /** Creates a `TestElement` from a raw element. */\n  protected createTestElement(element: ElementFinder): TestElement {\n    return new ProtractorElement(element);\n  }\n\n  /** Creates a `HarnessLoader` rooted at the given raw element. */\n  protected createEnvironment(element: ElementFinder): HarnessEnvironment<ElementFinder> {\n    return new ProtractorHarnessEnvironment(element, this._options);\n  }\n\n  /**\n   * Gets a list of all elements matching the given selector under this environment's root element.\n   */\n  protected async getAllRawElements(selector: string): Promise<ElementFinder[]> {\n    const elementArrayFinder = this._options.queryFn(selector, this.rawRootElement);\n    const length = await elementArrayFinder.count();\n    const elements: ElementFinder[] = [];\n    for (let i = 0; i < length; i++) {\n      elements.push(elementArrayFinder.get(i));\n    }\n    return elements;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './protractor-element';\nexport * from './protractor-harness-environment';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":["protractorElement"],"mappings":"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"}