@taiga-ui/testing 3.14.0-dev.main-8826a20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +3 -0
  2. package/bundles/taiga-ui-testing-core.umd.js +1336 -0
  3. package/bundles/taiga-ui-testing-core.umd.js.map +1 -0
  4. package/bundles/taiga-ui-testing-cypress.umd.js +130 -0
  5. package/bundles/taiga-ui-testing-cypress.umd.js.map +1 -0
  6. package/bundles/taiga-ui-testing-exceptions.umd.js +360 -0
  7. package/bundles/taiga-ui-testing-exceptions.umd.js.map +1 -0
  8. package/bundles/taiga-ui-testing-mocks.umd.js +371 -0
  9. package/bundles/taiga-ui-testing-mocks.umd.js.map +1 -0
  10. package/bundles/taiga-ui-testing-setup-jest.umd.js +149 -0
  11. package/bundles/taiga-ui-testing-setup-jest.umd.js.map +1 -0
  12. package/bundles/taiga-ui-testing-utils.umd.js +942 -0
  13. package/bundles/taiga-ui-testing-utils.umd.js.map +1 -0
  14. package/bundles/taiga-ui-testing.umd.js +46 -0
  15. package/bundles/taiga-ui-testing.umd.js.map +1 -0
  16. package/core/accordion-item.harness.d.ts +14 -0
  17. package/core/accordion.harness.d.ts +5 -0
  18. package/core/action.harness.d.ts +7 -0
  19. package/core/avatar.harness.d.ts +5 -0
  20. package/core/badge.harness.d.ts +7 -0
  21. package/core/button.harness.d.ts +7 -0
  22. package/core/calendar.harness.d.ts +16 -0
  23. package/core/card.harness.d.ts +6 -0
  24. package/core/hosted-dropdown.harness.d.ts +6 -0
  25. package/core/index.d.ts +20 -0
  26. package/core/island.harness.d.ts +12 -0
  27. package/core/loader.harness.d.ts +9 -0
  28. package/core/marker-icon.harness.d.ts +4 -0
  29. package/core/package.json +10 -0
  30. package/core/primitive-calender.harness.d.ts +6 -0
  31. package/core/primitive-spin-button.harness.d.ts +6 -0
  32. package/core/primitive-textfield.harness.d.ts +6 -0
  33. package/core/primitive-year-month-pagination.harness.d.ts +9 -0
  34. package/core/primitive-year-picker.harness.d.ts +5 -0
  35. package/core/select.harness.d.ts +7 -0
  36. package/core/svg.harness.d.ts +8 -0
  37. package/core/tag.harness.d.ts +12 -0
  38. package/core/taiga-ui-testing-core.d.ts +5 -0
  39. package/core/textfield.harness.d.ts +5 -0
  40. package/core/toggle.harness.d.ts +8 -0
  41. package/cypress/assertions/be-in-viewport.d.ts +14 -0
  42. package/cypress/assertions/index.d.ts +1 -0
  43. package/cypress/commands/wait-all-img-inside.command.d.ts +2 -0
  44. package/cypress/index.d.ts +3 -0
  45. package/cypress/package.json +10 -0
  46. package/cypress/snapshot/command.d.ts +16 -0
  47. package/cypress/taiga-ui-testing-cypress.d.ts +5 -0
  48. package/esm2015/core/accordion-item.harness.js +59 -0
  49. package/esm2015/core/accordion.harness.js +11 -0
  50. package/esm2015/core/action.harness.js +16 -0
  51. package/esm2015/core/avatar.harness.js +11 -0
  52. package/esm2015/core/badge.harness.js +21 -0
  53. package/esm2015/core/button.harness.js +21 -0
  54. package/esm2015/core/calendar.harness.js +66 -0
  55. package/esm2015/core/card.harness.js +19 -0
  56. package/esm2015/core/hosted-dropdown.harness.js +17 -0
  57. package/esm2015/core/index.js +21 -0
  58. package/esm2015/core/island.harness.js +53 -0
  59. package/esm2015/core/loader.harness.js +25 -0
  60. package/esm2015/core/marker-icon.harness.js +5 -0
  61. package/esm2015/core/primitive-calender.harness.js +40 -0
  62. package/esm2015/core/primitive-spin-button.harness.js +17 -0
  63. package/esm2015/core/primitive-textfield.harness.js +16 -0
  64. package/esm2015/core/primitive-year-month-pagination.harness.js +28 -0
  65. package/esm2015/core/primitive-year-picker.harness.js +29 -0
  66. package/esm2015/core/select.harness.js +21 -0
  67. package/esm2015/core/svg.harness.js +27 -0
  68. package/esm2015/core/tag.harness.js +39 -0
  69. package/esm2015/core/taiga-ui-testing-core.js +5 -0
  70. package/esm2015/core/textfield.harness.js +11 -0
  71. package/esm2015/core/toggle.harness.js +21 -0
  72. package/esm2015/cypress/assertions/be-in-viewport.js +28 -0
  73. package/esm2015/cypress/assertions/index.js +2 -0
  74. package/esm2015/cypress/commands/wait-all-img-inside.command.js +62 -0
  75. package/esm2015/cypress/index.js +4 -0
  76. package/esm2015/cypress/snapshot/command.js +23 -0
  77. package/esm2015/cypress/taiga-ui-testing-cypress.js +5 -0
  78. package/esm2015/exceptions/element-is-not-input.exception.js +6 -0
  79. package/esm2015/exceptions/field-not-found.exception.js +6 -0
  80. package/esm2015/exceptions/index.js +3 -0
  81. package/esm2015/exceptions/taiga-ui-testing-exceptions.js +5 -0
  82. package/esm2015/index.js +11 -0
  83. package/esm2015/mocks/event.js +12 -0
  84. package/esm2015/mocks/index.js +3 -0
  85. package/esm2015/mocks/sanitizer.js +13 -0
  86. package/esm2015/mocks/taiga-ui-testing-mocks.js +5 -0
  87. package/esm2015/setup-jest/index.js +135 -0
  88. package/esm2015/setup-jest/taiga-ui-testing-setup-jest.js +5 -0
  89. package/esm2015/taiga-ui-testing.js +5 -0
  90. package/esm2015/utils/active-element.js +14 -0
  91. package/esm2015/utils/configure-test-suite.js +32 -0
  92. package/esm2015/utils/date.js +18 -0
  93. package/esm2015/utils/helpers.js +36 -0
  94. package/esm2015/utils/index.js +15 -0
  95. package/esm2015/utils/input/cleaner.unit-common.js +79 -0
  96. package/esm2015/utils/input/filler.unit-common.js +50 -0
  97. package/esm2015/utils/input/form-control-state.unit-common.js +37 -0
  98. package/esm2015/utils/input/placeholder.unit-common.js +87 -0
  99. package/esm2015/utils/input/tooltip.unit-common.js +46 -0
  100. package/esm2015/utils/keyboard-event.js +9 -0
  101. package/esm2015/utils/native-input.page-object.js +58 -0
  102. package/esm2015/utils/page-object.js +25 -0
  103. package/esm2015/utils/replace-nbsp.js +6 -0
  104. package/esm2015/utils/taiga-ui-testing-utils.js +5 -0
  105. package/esm2015/utils/viewport.js +23 -0
  106. package/exceptions/element-is-not-input.exception.d.ts +3 -0
  107. package/exceptions/field-not-found.exception.d.ts +3 -0
  108. package/exceptions/index.d.ts +2 -0
  109. package/exceptions/package.json +10 -0
  110. package/exceptions/taiga-ui-testing-exceptions.d.ts +5 -0
  111. package/fesm2015/taiga-ui-testing-core.js +522 -0
  112. package/fesm2015/taiga-ui-testing-core.js.map +1 -0
  113. package/fesm2015/taiga-ui-testing-cypress.js +119 -0
  114. package/fesm2015/taiga-ui-testing-cypress.js.map +1 -0
  115. package/fesm2015/taiga-ui-testing-exceptions.js +18 -0
  116. package/fesm2015/taiga-ui-testing-exceptions.js.map +1 -0
  117. package/fesm2015/taiga-ui-testing-mocks.js +32 -0
  118. package/fesm2015/taiga-ui-testing-mocks.js.map +1 -0
  119. package/fesm2015/taiga-ui-testing-setup-jest.js +138 -0
  120. package/fesm2015/taiga-ui-testing-setup-jest.js.map +1 -0
  121. package/fesm2015/taiga-ui-testing-utils.js +520 -0
  122. package/fesm2015/taiga-ui-testing-utils.js.map +1 -0
  123. package/fesm2015/taiga-ui-testing.js +16 -0
  124. package/fesm2015/taiga-ui-testing.js.map +1 -0
  125. package/index.d.ts +10 -0
  126. package/mocks/event.d.ts +3 -0
  127. package/mocks/index.d.ts +2 -0
  128. package/mocks/package.json +10 -0
  129. package/mocks/sanitizer.d.ts +7 -0
  130. package/mocks/taiga-ui-testing-mocks.d.ts +5 -0
  131. package/package.json +16 -0
  132. package/setup-jest/index.d.ts +1 -0
  133. package/setup-jest/package.json +10 -0
  134. package/setup-jest/taiga-ui-testing-setup-jest.d.ts +5 -0
  135. package/taiga-ui-testing.d.ts +5 -0
  136. package/utils/active-element.d.ts +4 -0
  137. package/utils/configure-test-suite.d.ts +1 -0
  138. package/utils/date.d.ts +2 -0
  139. package/utils/helpers.d.ts +22 -0
  140. package/utils/index.d.ts +14 -0
  141. package/utils/input/cleaner.unit-common.d.ts +20 -0
  142. package/utils/input/filler.unit-common.d.ts +16 -0
  143. package/utils/input/form-control-state.unit-common.d.ts +13 -0
  144. package/utils/input/placeholder.unit-common.d.ts +17 -0
  145. package/utils/input/tooltip.unit-common.d.ts +18 -0
  146. package/utils/keyboard-event.d.ts +1 -0
  147. package/utils/native-input.page-object.d.ts +18 -0
  148. package/utils/package.json +10 -0
  149. package/utils/page-object.d.ts +11 -0
  150. package/utils/replace-nbsp.d.ts +1 -0
  151. package/utils/taiga-ui-testing-utils.d.ts +5 -0
  152. package/utils/viewport.d.ts +1 -0
@@ -0,0 +1,119 @@
1
+ import { matchImageSnapshotCommand } from 'cypress-image-snapshot/command';
2
+
3
+ /// <reference types="cypress" />
4
+ /// <reference types="node" />
5
+ /**
6
+ * Check if element is inside viewport
7
+ *
8
+ * @note WARNING! `.should('be.visible')` doesn't not check if element is inside viewport
9
+ * @see https://github.com/cypress-io/cypress/issues/17483
10
+ * @see https://github.com/cypress-io/cypress/issues/877#issuecomment-342187174
11
+ * @see https://github.com/cypress-io/cypress/issues/877#issuecomment-657583222
12
+ * @example
13
+ ```ts
14
+ cy.get('#test').should('be.inViewport');
15
+ ```
16
+ * */
17
+ const tuiBeInViewportAssertion = _chai => {
18
+ chai.Assertion.addMethod(`inViewport`, function () {
19
+ const subject = this._obj;
20
+ const { top, bottom } = subject[0].getBoundingClientRect();
21
+ const viewportHeight =
22
+ // @ts-ignore TS2339: Property 'state' does not exist on type 'cy & CyEventEmitter'.
23
+ Cypress.$(cy.state(`window`)).height() || 0;
24
+ const subjectOverlapsAllViewport = top < 0 && bottom > viewportHeight;
25
+ const topBorderIsVisible = top >= 0 && top < viewportHeight;
26
+ const bottomBorderIsVisible = bottom >= 0 && bottom < viewportHeight;
27
+ this.assert(subjectOverlapsAllViewport || topBorderIsVisible || bottomBorderIsVisible, `expected #{this} to be in viewport`, `expected #{this} to not be in viewport`, subject);
28
+ });
29
+ };
30
+
31
+ /// <reference types="cypress" />
32
+ const tuiWaitAllImgInside = (prevSubject, enabled = true) => {
33
+ const target = prevSubject && Cypress.dom.isJquery(prevSubject)
34
+ ? cy.wrap(prevSubject, { log: false })
35
+ : cy.get(`body`, { log: false });
36
+ target.then($target => {
37
+ const img = $target.find(`img`);
38
+ if (img.length && enabled) {
39
+ const log = Cypress.log({
40
+ displayName: `Wait all images`,
41
+ message: `naturalWidth greaterThan 0`,
42
+ name: `tuiWaitAllImgInside`,
43
+ autoEnd: false,
44
+ consoleProps: () => ({
45
+ prevSubject,
46
+ img,
47
+ }),
48
+ });
49
+ cy.wrap($target, { log: false })
50
+ .get(`img`, { log: false })
51
+ .each((img) => {
52
+ const nativeImage = img.get(0);
53
+ const url = (nativeImage === null || nativeImage === void 0 ? void 0 : nativeImage.src) || (nativeImage === null || nativeImage === void 0 ? void 0 : nativeImage.srcset);
54
+ if (!url) {
55
+ return;
56
+ }
57
+ const offsetParent = img.prop(`offsetParent`);
58
+ return cy.window({ log: false }).then((win) => {
59
+ const rect = nativeImage.getBoundingClientRect();
60
+ const isInViewport = offsetParent &&
61
+ rect.top >= 0 &&
62
+ rect.left >= 0 &&
63
+ rect.bottom <=
64
+ (win.innerHeight ||
65
+ win.document.documentElement.clientHeight) &&
66
+ rect.right <=
67
+ (win.innerWidth ||
68
+ win.document.documentElement.clientWidth);
69
+ if (isInViewport) {
70
+ if (url.includes(`base64`)) {
71
+ expect(nativeImage.naturalWidth).to.be.greaterThan(0);
72
+ }
73
+ else {
74
+ cy.request({
75
+ url,
76
+ failOnStatusCode: false,
77
+ log: false,
78
+ }).then(resp => {
79
+ if (resp.status === 200) {
80
+ cy.get(img, { log: false }).should((el) => expect(el[0].naturalWidth).to.be.greaterThan(0));
81
+ }
82
+ });
83
+ }
84
+ }
85
+ });
86
+ })
87
+ .then(() => log.end());
88
+ }
89
+ });
90
+ return target;
91
+ };
92
+
93
+ /// <reference types="cypress" />
94
+ function tuiAddMatchImageSnapshotCommand(options) {
95
+ const matchSnapshotFn = matchImageSnapshotCommand(options);
96
+ Cypress.Commands.add(`matchImageSnapshot`, { prevSubject: [`optional`, `element`, `window`, `document`] }, (prevSubject, nameOrOptions, options) => {
97
+ var _a;
98
+ const name = typeof nameOrOptions === `string` ? nameOrOptions : undefined;
99
+ const overloadedOptions = typeof nameOrOptions === `object` && !!nameOrOptions
100
+ ? nameOrOptions
101
+ : options;
102
+ tuiWaitAllImgInside(prevSubject, (_a = overloadedOptions === null || overloadedOptions === void 0 ? void 0 : overloadedOptions.waitAllImages) !== null && _a !== void 0 ? _a : true);
103
+ matchSnapshotFn(prevSubject, makeScreenshotName(name), overloadedOptions);
104
+ });
105
+ }
106
+ function makeScreenshotName(name) {
107
+ return (name !== null && name !== void 0 ? name : Cypress.currentTest.titlePath
108
+ .join(`-`)
109
+ .replace(/\s|-/g, `.`)
110
+ .replace(/['[\]`()]/g, ``)
111
+ .toLowerCase());
112
+ }
113
+
114
+ /**
115
+ * Generated bundle index. Do not edit.
116
+ */
117
+
118
+ export { tuiAddMatchImageSnapshotCommand, tuiBeInViewportAssertion, tuiWaitAllImgInside };
119
+ //# sourceMappingURL=taiga-ui-testing-cypress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taiga-ui-testing-cypress.js","sources":["../../../projects/testing/cypress/assertions/be-in-viewport.ts","../../../projects/testing/cypress/commands/wait-all-img-inside.command.ts","../../../projects/testing/cypress/snapshot/command.ts","../../../projects/testing/cypress/taiga-ui-testing-cypress.ts"],"sourcesContent":["/// <reference types=\"cypress\" />\n/// <reference types=\"node\" />\n\n/**\n * Check if element is inside viewport\n *\n * @note WARNING! `.should('be.visible')` doesn't not check if element is inside viewport\n * @see https://github.com/cypress-io/cypress/issues/17483\n * @see https://github.com/cypress-io/cypress/issues/877#issuecomment-342187174\n * @see https://github.com/cypress-io/cypress/issues/877#issuecomment-657583222\n * @example\n ```ts\n cy.get('#test').should('be.inViewport');\n ```\n * */\nexport const tuiBeInViewportAssertion: Chai.ChaiPlugin = _chai => {\n chai.Assertion.addMethod(`inViewport`, function () {\n const subject = this._obj;\n const {top, bottom} = subject[0].getBoundingClientRect();\n\n const viewportHeight: number =\n // @ts-ignore TS2339: Property 'state' does not exist on type 'cy & CyEventEmitter'.\n Cypress.$(cy.state(`window`)).height() || 0;\n\n const subjectOverlapsAllViewport = top < 0 && bottom > viewportHeight;\n const topBorderIsVisible = top >= 0 && top < viewportHeight;\n const bottomBorderIsVisible = bottom >= 0 && bottom < viewportHeight;\n\n this.assert(\n subjectOverlapsAllViewport || topBorderIsVisible || bottomBorderIsVisible,\n `expected #{this} to be in viewport`,\n `expected #{this} to not be in viewport`,\n subject,\n );\n });\n};\n","/// <reference types=\"cypress\" />\n\nexport const tuiWaitAllImgInside = (\n prevSubject: Cypress.PrevSubjectMap<void>[Cypress.PrevSubject],\n enabled: boolean = true,\n): Cypress.Chainable<JQuery<HTMLBodyElement>> | Cypress.Chainable<JQuery> => {\n const target =\n prevSubject && Cypress.dom.isJquery(prevSubject)\n ? cy.wrap(prevSubject, {log: false})\n : cy.get(`body`, {log: false});\n\n target.then($target => {\n const img = $target.find(`img`);\n\n if (img.length && enabled) {\n const log = Cypress.log({\n displayName: `Wait all images`,\n message: `naturalWidth greaterThan 0`,\n name: `tuiWaitAllImgInside`,\n autoEnd: false,\n consoleProps: () => ({\n prevSubject,\n img,\n }),\n });\n\n cy.wrap($target, {log: false})\n .get(`img`, {log: false})\n .each((img: JQuery<HTMLImageElement>) => {\n const nativeImage = img.get(0);\n const url = nativeImage?.src || nativeImage?.srcset;\n\n if (!url) {\n return;\n }\n\n const offsetParent = img.prop(`offsetParent`);\n\n return cy.window({log: false}).then((win: Window) => {\n const rect = nativeImage.getBoundingClientRect();\n const isInViewport =\n offsetParent &&\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <=\n (win.innerHeight ||\n win.document.documentElement.clientHeight) &&\n rect.right <=\n (win.innerWidth ||\n win.document.documentElement.clientWidth);\n\n if (isInViewport) {\n if (url.includes(`base64`)) {\n (expect as any)(\n nativeImage.naturalWidth,\n ).to.be.greaterThan(0);\n } else {\n cy.request({\n url,\n failOnStatusCode: false,\n log: false,\n }).then(resp => {\n if (resp.status === 200) {\n cy.get(img as any, {log: false}).should(\n (el: JQuery<HTMLImageElement>) =>\n (expect as any)(\n el[0].naturalWidth,\n ).to.be.greaterThan(0),\n );\n }\n });\n }\n }\n });\n })\n .then(() => log.end());\n }\n });\n\n return target;\n};\n","/// <reference types=\"cypress\" />\n\nimport {Options} from 'cypress-image-snapshot';\nimport {matchImageSnapshotCommand} from 'cypress-image-snapshot/command';\n\nimport {tuiWaitAllImgInside} from '../commands/wait-all-img-inside.command';\n\ndeclare module 'cypress-image-snapshot/command' {\n function matchImageSnapshotCommand(options: Options): (...args: unknown[]) => void;\n}\n\ninterface TuiSnapshotCommandOptions {\n waitAllImages?: boolean;\n}\n\ndeclare global {\n namespace Cypress {\n interface Chainable {\n matchImageSnapshot(\n name: string,\n options?: Options & TuiSnapshotCommandOptions,\n ): void;\n }\n }\n}\n\nexport function tuiAddMatchImageSnapshotCommand(\n options: Options & TuiSnapshotCommandOptions,\n): void {\n const matchSnapshotFn = matchImageSnapshotCommand(options);\n\n Cypress.Commands.add(\n `matchImageSnapshot`,\n {prevSubject: [`optional`, `element`, `window`, `document`]},\n (\n prevSubject,\n nameOrOptions: string | (Options & TuiSnapshotCommandOptions),\n options?: Options & TuiSnapshotCommandOptions,\n ) => {\n const name = typeof nameOrOptions === `string` ? nameOrOptions : undefined;\n const overloadedOptions =\n typeof nameOrOptions === `object` && !!nameOrOptions\n ? nameOrOptions\n : options;\n\n tuiWaitAllImgInside(prevSubject, overloadedOptions?.waitAllImages ?? true);\n\n matchSnapshotFn(prevSubject, makeScreenshotName(name), overloadedOptions);\n },\n );\n}\n\nfunction makeScreenshotName(name?: string): string {\n return (\n name ??\n Cypress.currentTest.titlePath\n .join(`-`)\n .replace(/\\s|-/g, `.`)\n .replace(/['[\\]`()]/g, ``)\n .toLowerCase()\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ class TuiElementIsNotInputException extends Error {
2
+ constructor(automationId) {
3
+ super(`Element ${automationId} is not <input />`);
4
+ }
5
+ }
6
+
7
+ class TuiFieldNotFoundException extends Error {
8
+ constructor(automationId) {
9
+ super(`Field ${automationId} not found`);
10
+ }
11
+ }
12
+
13
+ /**
14
+ * Generated bundle index. Do not edit.
15
+ */
16
+
17
+ export { TuiElementIsNotInputException, TuiFieldNotFoundException };
18
+ //# sourceMappingURL=taiga-ui-testing-exceptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taiga-ui-testing-exceptions.js","sources":["../../../projects/testing/exceptions/element-is-not-input.exception.ts","../../../projects/testing/exceptions/field-not-found.exception.ts","../../../projects/testing/exceptions/taiga-ui-testing-exceptions.ts"],"sourcesContent":["export class TuiElementIsNotInputException extends Error {\n constructor(automationId: string) {\n super(`Element ${automationId} is not <input />`);\n }\n}\n","export class TuiFieldNotFoundException extends Error {\n constructor(automationId: string) {\n super(`Field ${automationId} not found`);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAM,MAAO,6BAA8B,SAAQ,KAAK,CAAA;AACpD,IAAA,WAAA,CAAY,YAAoB,EAAA;AAC5B,QAAA,KAAK,CAAC,CAAA,QAAA,EAAW,YAAY,CAAA,iBAAA,CAAmB,CAAC,CAAC;KACrD;AACJ;;ACJK,MAAO,yBAA0B,SAAQ,KAAK,CAAA;AAChD,IAAA,WAAA,CAAY,YAAoB,EAAA;AAC5B,QAAA,KAAK,CAAC,CAAA,MAAA,EAAS,YAAY,CAAA,UAAA,CAAY,CAAC,CAAC;KAC5C;AACJ;;ACJD;;AAEG;;;;"}
@@ -0,0 +1,32 @@
1
+ import { TUI_SANITIZER } from '@taiga-ui/core';
2
+
3
+ class TuiMockEvent extends Event {
4
+ constructor(type, options = {}) {
5
+ super(type, options);
6
+ const event = new Event(type);
7
+ for (const key in options) {
8
+ Object.defineProperty(event, key, { value: options[key] });
9
+ }
10
+ // @ts-ignore
11
+ return event;
12
+ }
13
+ }
14
+
15
+ const TUI_SANITIZER_MOCK = {
16
+ provide: TUI_SANITIZER,
17
+ useValue: {
18
+ sanitize(_context, src) {
19
+ // Skip error
20
+ // WARNING: sanitizing HTML stripped some content, see
21
+ // https://g.co/ng/security#xss
22
+ return src;
23
+ },
24
+ },
25
+ };
26
+
27
+ /**
28
+ * Generated bundle index. Do not edit.
29
+ */
30
+
31
+ export { TUI_SANITIZER_MOCK, TuiMockEvent };
32
+ //# sourceMappingURL=taiga-ui-testing-mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taiga-ui-testing-mocks.js","sources":["../../../projects/testing/mocks/event.ts","../../../projects/testing/mocks/sanitizer.ts","../../../projects/testing/mocks/taiga-ui-testing-mocks.ts"],"sourcesContent":["export class TuiMockEvent<T> extends Event {\n constructor(type: string, options: CustomEventInit<T> & Record<string, any> = {}) {\n super(type, options);\n\n const event = new Event(type);\n\n for (const key in options) {\n Object.defineProperty(event, key, {value: options[key]});\n }\n\n // @ts-ignore\n return event;\n }\n}\n","import {SecurityContext} from '@angular/core';\nimport {TUI_SANITIZER} from '@taiga-ui/core';\n\nexport const TUI_SANITIZER_MOCK = {\n provide: TUI_SANITIZER,\n useValue: {\n sanitize(_context: SecurityContext, src: string) {\n // Skip error\n // WARNING: sanitizing HTML stripped some content, see\n // https://g.co/ng/security#xss\n return src;\n },\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAAM,MAAO,YAAgB,SAAQ,KAAK,CAAA;IACtC,WAAY,CAAA,IAAY,EAAE,OAAA,GAAoD,EAAE,EAAA;AAC5E,QAAA,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AAE9B,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACvB,YAAA,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;AAC5D,SAAA;;AAGD,QAAA,OAAO,KAAK,CAAC;KAChB;AACJ;;ACVY,MAAA,kBAAkB,GAAG;AAC9B,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,QAAQ,EAAE;QACN,QAAQ,CAAC,QAAyB,EAAE,GAAW,EAAA;;;;AAI3C,YAAA,OAAO,GAAG,CAAC;SACd;AACJ,KAAA;;;ACZL;;AAEG;;;;"}
@@ -0,0 +1,138 @@
1
+ const { TextEncoder: TextEncoderMock, TextDecoder: TextDecoderMock } = require(`util`);
2
+ global.TextEncoder = TextEncoderMock;
3
+ global.TextDecoder = TextDecoderMock;
4
+ const jsdom = require(`jsdom`);
5
+ const { JSDOM } = jsdom;
6
+ const dom = new JSDOM(`<!DOCTYPE html><html><head></head><body></body></html>`, {
7
+ url: `https://localhost:3333`,
8
+ });
9
+ // noinspection JSConstantReassignment
10
+ global.window = dom.window;
11
+ // noinspection JSConstantReassignment
12
+ global.document = dom.window.document;
13
+ // @ts-ignore
14
+ global.document.execCommand = function execCommandMock() { };
15
+ // you can also pass the mock implementation
16
+ // to jest.fn as an argument
17
+ global.window.IntersectionObserver = jest.fn(() => ({
18
+ observe: jest.fn(),
19
+ unobserve: jest.fn(),
20
+ disconnect: jest.fn(),
21
+ }));
22
+ // Simulate window resize events
23
+ const resizeEvent = document.createEvent(`Event`);
24
+ resizeEvent.initEvent(`resize`, true, true);
25
+ global.window.resizeTo = width => {
26
+ global.window.innerWidth = width || global.window.innerWidth;
27
+ global.window.innerHeight = width || global.window.innerHeight;
28
+ global.window.dispatchEvent(resizeEvent);
29
+ };
30
+ global.URL.createObjectURL = jest.fn(blob => `${blob}`);
31
+ global.URL.revokeObjectURL = jest.fn();
32
+ Object.defineProperty(global.window, `CSS`, { value: null });
33
+ Object.defineProperty(global.window, `getComputedStyle`, {
34
+ value: () => {
35
+ return {
36
+ display: `none`,
37
+ appearance: [`-webkit-appearance`],
38
+ };
39
+ },
40
+ });
41
+ Object.defineProperty(global.document, `doctype`, {
42
+ value: `<!DOCTYPE html>`,
43
+ });
44
+ Object.defineProperty(global.document.body.style, `transform`, {
45
+ value: () => {
46
+ return {
47
+ enumerable: true,
48
+ configurable: true,
49
+ };
50
+ },
51
+ });
52
+ Object.defineProperty(global.window, `matchMedia`, {
53
+ writable: true,
54
+ value: jest.fn().mockImplementation(query => ({
55
+ matches: false,
56
+ media: query,
57
+ onchange: null,
58
+ addListener: jest.fn(),
59
+ removeListener: jest.fn(),
60
+ addEventListener: jest.fn(),
61
+ removeEventListener: jest.fn(),
62
+ dispatchEvent: jest.fn(),
63
+ })),
64
+ });
65
+ Object.defineProperty(global.document, `elementFromPoint`, {
66
+ writable: true,
67
+ value: jest.fn().mockImplementation(() => null),
68
+ });
69
+ Object.defineProperty(global.document, `createRange`, {
70
+ writable: true,
71
+ value: () => {
72
+ const range = new Range();
73
+ range.getBoundingClientRect = () => ({
74
+ x: 0,
75
+ y: 0,
76
+ bottom: 0,
77
+ height: 0,
78
+ left: 0,
79
+ right: 0,
80
+ top: 0,
81
+ width: 0,
82
+ toJSON: () => { },
83
+ });
84
+ range.getClientRects = () => {
85
+ return {
86
+ item: () => null,
87
+ length: 0,
88
+ [Symbol.iterator]: jest.fn(),
89
+ };
90
+ };
91
+ return range;
92
+ },
93
+ });
94
+ Object.defineProperty(window, `scrollTo`, jest.fn());
95
+ Object.defineProperty(global.window, `getComputedStyle`, {
96
+ value: () => ({
97
+ getPropertyValue: (_prop) => {
98
+ return ``;
99
+ },
100
+ }),
101
+ });
102
+ global.DataTransfer = class {
103
+ constructor() {
104
+ this.data = new Map();
105
+ }
106
+ setData(format, data) {
107
+ this.data.set(format, data);
108
+ }
109
+ getData(format) {
110
+ return this.data.get(format);
111
+ }
112
+ };
113
+ class TransferMockEvent {
114
+ constructor(type, options) {
115
+ this.type = type;
116
+ this.options = options;
117
+ this.dataTransfer = options.clipboardData;
118
+ this.relatedTarget = options.relatedTarget;
119
+ }
120
+ }
121
+ global.DragEvent = TransferMockEvent;
122
+ global.ClipboardEvent = TransferMockEvent;
123
+ /**
124
+ * in our jest setupFilesAfterEnv file,
125
+ * however when running with ng test those
126
+ * imports are already done by angular
127
+ * resulting in duplicate imports
128
+ * and conflicts resulting in the above error
129
+ */
130
+ if (!(`Zone` in global)) {
131
+ require(`zone.js`);
132
+ require(`zone.js/testing`);
133
+ }
134
+
135
+ /**
136
+ * Generated bundle index. Do not edit.
137
+ */
138
+ //# sourceMappingURL=taiga-ui-testing-setup-jest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taiga-ui-testing-setup-jest.js","sources":["../../../projects/testing/setup-jest/index.ts","../../../projects/testing/setup-jest/taiga-ui-testing-setup-jest.ts"],"sourcesContent":["const {TextEncoder: TextEncoderMock, TextDecoder: TextDecoderMock} = require(`util`);\n\nglobal.TextEncoder = TextEncoderMock;\nglobal.TextDecoder = TextDecoderMock;\n\nconst jsdom = require(`jsdom`);\nconst {JSDOM} = jsdom;\n\nconst dom = new JSDOM(`<!DOCTYPE html><html><head></head><body></body></html>`, {\n url: `https://localhost:3333`,\n});\n\n// noinspection JSConstantReassignment\nglobal.window = dom.window;\n\n// noinspection JSConstantReassignment\nglobal.document = dom.window.document;\n\n// @ts-ignore\nglobal.document.execCommand = function execCommandMock() {};\n\n// you can also pass the mock implementation\n// to jest.fn as an argument\n(global.window as any).IntersectionObserver = jest.fn(() => ({\n observe: jest.fn(),\n unobserve: jest.fn(),\n disconnect: jest.fn(),\n}));\n\n// Simulate window resize events\nconst resizeEvent = document.createEvent(`Event`);\n\nresizeEvent.initEvent(`resize`, true, true);\n\nglobal.window.resizeTo = width => {\n (global.window as any).innerWidth = width || global.window.innerWidth;\n (global.window as any).innerHeight = width || global.window.innerHeight;\n global.window.dispatchEvent(resizeEvent);\n};\n\nglobal.URL.createObjectURL = jest.fn(blob => `${blob}`);\nglobal.URL.revokeObjectURL = jest.fn();\n\nObject.defineProperty(global.window, `CSS`, {value: null});\n\nObject.defineProperty(global.window, `getComputedStyle`, {\n value: () => {\n return {\n display: `none`,\n appearance: [`-webkit-appearance`],\n };\n },\n});\n\nObject.defineProperty(global.document, `doctype`, {\n value: `<!DOCTYPE html>`,\n});\n\nObject.defineProperty(global.document.body.style, `transform`, {\n value: () => {\n return {\n enumerable: true,\n configurable: true,\n };\n },\n});\n\nObject.defineProperty(global.window, `matchMedia`, {\n writable: true,\n value: jest.fn().mockImplementation(query => ({\n matches: false,\n media: query,\n onchange: null,\n addListener: jest.fn(),\n removeListener: jest.fn(),\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n })),\n});\n\nObject.defineProperty(global.document, `elementFromPoint`, {\n writable: true,\n value: jest.fn().mockImplementation(() => null),\n});\n\nObject.defineProperty(global.document, `createRange`, {\n writable: true,\n value: () => {\n const range = new Range();\n\n range.getBoundingClientRect = () => ({\n x: 0,\n y: 0,\n bottom: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n width: 0,\n toJSON: () => {},\n });\n\n range.getClientRects = () => {\n return {\n item: () => null,\n length: 0,\n [Symbol.iterator]: jest.fn(),\n };\n };\n\n return range;\n },\n});\n\nObject.defineProperty(window, `scrollTo`, jest.fn());\n\nObject.defineProperty(global.window, `getComputedStyle`, {\n value: () => ({\n getPropertyValue: (_prop: string) => {\n return ``;\n },\n }),\n});\n\nglobal.DataTransfer = class {\n private readonly data = new Map();\n\n setData(format: string, data: string): void {\n this.data.set(format, data);\n }\n\n getData(format: string): string {\n return this.data.get(format);\n }\n} as unknown as typeof DataTransfer;\n\nclass TransferMockEvent {\n dataTransfer: DataTransfer;\n relatedTarget: EventTarget;\n\n constructor(\n readonly type: string,\n readonly options: {\n clipboardData: DataTransfer;\n relatedTarget: EventTarget;\n },\n ) {\n this.dataTransfer = options.clipboardData;\n this.relatedTarget = options.relatedTarget;\n }\n}\n\nglobal.DragEvent = TransferMockEvent as unknown as typeof DragEvent;\nglobal.ClipboardEvent = TransferMockEvent as unknown as typeof ClipboardEvent;\n\n/**\n * in our jest setupFilesAfterEnv file,\n * however when running with ng test those\n * imports are already done by angular\n * resulting in duplicate imports\n * and conflicts resulting in the above error\n */\nif (!(`Zone` in global)) {\n require(`zone.js`);\n require(`zone.js/testing`);\n}\n\n// @note: build empty entry point\nexport {};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}