{"version":3,"file":"ngx-com-components-radio-testing.mjs","sources":["../../../projects/com/components/radio/testing/radio.harness.ts","../../../projects/com/components/radio/testing/index.ts","../../../projects/com/components/radio/testing/ngx-com-components-radio-testing.ts"],"sourcesContent":["import {\n  ComponentHarness,\n  HarnessPredicate,\n} from '@angular/cdk/testing';\nimport type { BaseHarnessFilters } from '@angular/cdk/testing';\n\n/** Harness filters for ComRadioButtonHarness. */\nexport interface ComRadioButtonHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the radio button's label text. */\n  label?: string | RegExp;\n  /** Filter by the radio button's value. */\n  value?: string | RegExp;\n  /** Filter by whether the radio button is disabled. */\n  disabled?: boolean;\n  /** Filter by whether the radio button is checked. */\n  checked?: boolean;\n}\n\n/** Harness filters for ComRadioGroupHarness. */\nexport interface ComRadioGroupHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the radio group's name. */\n  name?: string | RegExp;\n  /** Filter by whether the radio group is disabled. */\n  disabled?: boolean;\n}\n\n/**\n * Harness for interacting with a radio button in tests.\n */\nexport class ComRadioButtonHarness extends ComponentHarness {\n  static hostSelector = 'com-radio';\n\n  private readonly label = this.locatorFor('label');\n  private readonly input = this.locatorFor('input[type=\"radio\"]');\n  private readonly labelText = this.locatorFor('.com-radio__label');\n\n  /**\n   * Gets a HarnessPredicate for matching radio buttons.\n   * @param options Filter options.\n   */\n  static with(options: ComRadioButtonHarnessFilters = {}): HarnessPredicate<ComRadioButtonHarness> {\n    return new HarnessPredicate(ComRadioButtonHarness, options)\n      .addOption('label', options.label, async (harness, label) => {\n        const text = await harness.getLabelText();\n        return HarnessPredicate.stringMatches(text, label);\n      })\n      .addOption('value', options.value, async (harness, value) => {\n        const val = await harness.getValue();\n        return HarnessPredicate.stringMatches(val, value);\n      })\n      .addOption('disabled', options.disabled, async (harness, disabled) => {\n        return (await harness.isDisabled()) === disabled;\n      })\n      .addOption('checked', options.checked, async (harness, checked) => {\n        return (await harness.isChecked()) === checked;\n      });\n  }\n\n  /** Whether the radio button is checked. */\n  async isChecked(): Promise<boolean> {\n    const inputEl = await this.input();\n    return inputEl.getProperty<boolean>('checked');\n  }\n\n  /** Whether the radio button is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const inputEl = await this.input();\n    return inputEl.getProperty<boolean>('disabled');\n  }\n\n  /** Gets the radio button's label text. */\n  async getLabelText(): Promise<string> {\n    const el = await this.labelText();\n    return el.text();\n  }\n\n  /** Gets the radio button's value. */\n  async getValue(): Promise<string> {\n    const inputEl = await this.input();\n    return inputEl.getProperty<string>('value');\n  }\n\n  /** Checks the radio button if it is not already checked. */\n  async check(): Promise<void> {\n    if (!(await this.isChecked())) {\n      const labelEl = await this.label();\n      return labelEl.click();\n    }\n  }\n\n  /** Focuses the radio button's input. */\n  async focus(): Promise<void> {\n    const inputEl = await this.input();\n    return inputEl.focus();\n  }\n\n  /** Blurs the radio button's input. */\n  async blur(): Promise<void> {\n    const inputEl = await this.input();\n    return inputEl.blur();\n  }\n\n  /** Whether the radio button's input is focused. */\n  async isFocused(): Promise<boolean> {\n    const inputEl = await this.input();\n    return inputEl.isFocused();\n  }\n}\n\n/**\n * Harness for interacting with a radio group in tests.\n */\nexport class ComRadioGroupHarness extends ComponentHarness {\n  static hostSelector = 'com-radio-group';\n\n  private readonly radioGroup = this.locatorFor('[role=\"radiogroup\"]');\n  private readonly errorMessage = this.locatorForOptional('.com-radio-group__error');\n\n  /**\n   * Gets a HarnessPredicate for matching radio groups.\n   * @param options Filter options.\n   */\n  static with(options: ComRadioGroupHarnessFilters = {}): HarnessPredicate<ComRadioGroupHarness> {\n    return new HarnessPredicate(ComRadioGroupHarness, options)\n      .addOption('name', options.name, async (harness, name) => {\n        const groupName = await harness.getName();\n        return HarnessPredicate.stringMatches(groupName, name);\n      })\n      .addOption('disabled', options.disabled, async (harness, disabled) => {\n        return (await harness.isDisabled()) === disabled;\n      });\n  }\n\n  /** Gets all radio buttons in the group, optionally filtered. */\n  async getRadioButtons(filters: ComRadioButtonHarnessFilters = {}): Promise<ComRadioButtonHarness[]> {\n    return this.locatorForAll(ComRadioButtonHarness.with(filters))();\n  }\n\n  /** Gets the checked radio button, or null if none is checked. */\n  async getCheckedRadioButton(): Promise<ComRadioButtonHarness | null> {\n    const buttons = await this.getRadioButtons({ checked: true });\n    return buttons[0] ?? null;\n  }\n\n  /** Gets the value of the checked radio button, or null if none is checked. */\n  async getCheckedValue(): Promise<string | null> {\n    const checked = await this.getCheckedRadioButton();\n    return checked ? checked.getValue() : null;\n  }\n\n  /** Gets the name attribute of the radio group from the first radio input. */\n  async getName(): Promise<string | null> {\n    const firstInput = await this.locatorForOptional('input[type=\"radio\"]')();\n    return firstInput ? firstInput.getAttribute('name') : null;\n  }\n\n  /** Whether the radio group is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const host = await this.host();\n    return host.hasClass('com-radio-group--disabled');\n  }\n\n  /** Whether the radio group is required. */\n  async isRequired(): Promise<boolean> {\n    const groupEl = await this.radioGroup();\n    return (await groupEl.getAttribute('aria-required')) === 'true';\n  }\n\n  /** Whether the radio group has an error state. */\n  async hasError(): Promise<boolean> {\n    const host = await this.host();\n    return host.hasClass('com-radio-group--error');\n  }\n\n  /** Gets the error message text, or null if no error is displayed. */\n  async getErrorMessage(): Promise<string | null> {\n    const errorEl = await this.errorMessage();\n    return errorEl ? errorEl.text() : null;\n  }\n\n  /** Gets the aria-label of the radio group. */\n  async getAriaLabel(): Promise<string | null> {\n    const groupEl = await this.radioGroup();\n    return groupEl.getAttribute('aria-label');\n  }\n\n  /** Checks a radio button matching the given filter. */\n  async checkRadioButton(filter: ComRadioButtonHarnessFilters = {}): Promise<void> {\n    const buttons = await this.getRadioButtons(filter);\n    if (buttons.length === 0) {\n      throw new Error(`Could not find radio button matching filter: ${JSON.stringify(filter)}`);\n    }\n    return buttons[0]!.check();\n  }\n}\n","// Testing utilities for the radio component\n\nexport {\n  ComRadioButtonHarness,\n  ComRadioGroupHarness,\n} from './radio.harness';\n\nexport type {\n  ComRadioButtonHarnessFilters,\n  ComRadioGroupHarnessFilters,\n} from './radio.harness';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}