{"version":3,"file":"ngspot-ng-superclass-testing.mjs","sources":["../../../../../packages/ng-superclass/package/testing/src/lib/custom-form-control.harness.ts","../../../../../packages/ng-superclass/package/testing/src/lib/model.ts","../../../../../packages/ng-superclass/package/testing/src/lib/test-custom-control.ts","../../../../../packages/ng-superclass/package/testing/src/ngspot-ng-superclass-testing.ts"],"sourcesContent":["import { ComponentHarness } from '@angular/cdk/testing';\r\n\r\n/**\r\n * Extend your custom component harness from this class. This will allow\r\n * using testCustomControlComponentCommons test utility function that tests\r\n * for common custom component behavior.\r\n */\r\nexport abstract class CustomFormControlHarness<\r\n  ValueType\r\n> extends ComponentHarness {\r\n  abstract setValue(value: ValueType): Promise<void>;\r\n\r\n  abstract touch(): Promise<void>;\r\n\r\n  async isMarkedAs(state: 'touched' | 'dirty' | 'valid' | 'invalid') {\r\n    const host = await this.host();\r\n    return await host.hasClass(`ng-${state}`);\r\n  }\r\n}\r\n","/* eslint-disable @typescript-eslint/ban-types */\r\n\r\nexport type JestDescribeLike = (name: string, fn: () => void) => void;\r\n\r\nexport type JestItLike = (name: string, fn: () => void) => void;\r\n\r\nexport interface JestExpectLike {\r\n  <T>(actual: T): JasmineMatchersLike<T>;\r\n}\r\n\r\nexport interface JasmineMatchersLike<T> {\r\n  toBe(expected: Expected<T>): void;\r\n}\r\n\r\nexport type Expected<T> = T;\r\n","import { AbstractControl } from '@angular/forms';\r\n\r\nimport { CustomFormControlHarness } from './custom-form-control.harness';\r\nimport { JestDescribeLike, JestExpectLike, JestItLike } from './model';\r\n\r\nexport interface CustomControlTestContext {\r\n  outerControl: AbstractControl;\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  harness: CustomFormControlHarness<any>;\r\n}\r\n\r\nexport function testCustomFormControl(\r\n  describe: JestDescribeLike,\r\n  it: JestItLike,\r\n  expect: JestExpectLike,\r\n  resolveArgsFn: () =>\r\n    | CustomControlTestContext\r\n    | Promise<CustomControlTestContext>\r\n) {\r\n  describe('Test custom component common behavior', () => {\r\n    async function setup() {\r\n      return await Promise.resolve(resolveArgsFn());\r\n    }\r\n\r\n    describe(`PROP: touched`, () => {\r\n      it('initial \"touched\" state must be \"false\"', async () => {\r\n        const { harness } = await setup();\r\n\r\n        expect(await harness.isMarkedAs('touched')).toBe(false);\r\n      });\r\n\r\n      it('calling `control.markAsTouched()` should mark custom control as touched', async () => {\r\n        const { harness, outerControl } = await setup();\r\n\r\n        outerControl.markAsTouched();\r\n\r\n        expect(await harness.isMarkedAs('touched')).toBe(true);\r\n      });\r\n\r\n      it(`touching the element should mark it as \"touched\"`, async () => {\r\n        const { harness } = await setup();\r\n\r\n        await harness.touch();\r\n\r\n        expect(await harness.isMarkedAs('touched')).toBe(true);\r\n      });\r\n    });\r\n\r\n    describe(`PROP: dirty`, () => {\r\n      it('initial \"dirty\" state must be \"false\"', async () => {\r\n        const { harness } = await setup();\r\n\r\n        expect(await harness.isMarkedAs('dirty')).toBe(false);\r\n      });\r\n\r\n      it('calling `control.markAsDirty()` should mark custom control as dirty', async () => {\r\n        const { harness, outerControl } = await setup();\r\n\r\n        outerControl.markAsDirty();\r\n\r\n        expect(await harness.isMarkedAs('dirty')).toBe(true);\r\n      });\r\n\r\n      it(`setting a value should mark element as \"dirty\"`, async () => {\r\n        const { harness } = await setup();\r\n\r\n        await harness.setValue('test');\r\n\r\n        expect(await harness.isMarkedAs('dirty')).toBe(true);\r\n      });\r\n    });\r\n  });\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}