@o3r/testing 12.5.0-prerelease.6 → 12.5.0-prerelease.60
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.
- package/core/angular/angular-materials/autocomplete-material.js +9 -20
- package/core/angular/angular-materials/autocomplete-material.js.map +1 -1
- package/core/angular/angular-materials/index.js +1 -1
- package/core/angular/angular-materials/select-material.js +42 -91
- package/core/angular/angular-materials/select-material.js.map +1 -1
- package/core/angular/angular-materials/slider-material.js +8 -11
- package/core/angular/angular-materials/slider-material.js.map +1 -1
- package/core/angular/component-fixture.js +68 -148
- package/core/angular/component-fixture.js.map +1 -1
- package/core/angular/element.js +44 -50
- package/core/angular/element.js.map +1 -1
- package/core/angular/elements/checkbox-element.js +12 -16
- package/core/angular/elements/checkbox-element.js.map +1 -1
- package/core/angular/elements/index.js +1 -1
- package/core/angular/elements/radio-element.js +12 -16
- package/core/angular/elements/radio-element.js.map +1 -1
- package/core/angular/elements/select-element.js +28 -49
- package/core/angular/elements/select-element.js.map +1 -1
- package/core/angular/elements/slider-element.js +38 -42
- package/core/angular/elements/slider-element.js.map +1 -1
- package/core/angular/group.js +9 -14
- package/core/angular/group.js.map +1 -1
- package/core/angular/groups/index.js +1 -1
- package/core/angular/groups/radio-group.js +25 -62
- package/core/angular/groups/radio-group.js.map +1 -1
- package/core/angular/index.js +1 -1
- package/core/angular/page-fixture.js +8 -11
- package/core/angular/page-fixture.js.map +1 -1
- package/core/angular-materials/autocomplete-material.js +8 -11
- package/core/angular-materials/autocomplete-material.js.map +1 -1
- package/core/angular-materials/index.js +1 -1
- package/core/angular-materials/select-material.js +12 -15
- package/core/angular-materials/select-material.js.map +1 -1
- package/core/angular-materials/slider-material.js +5 -8
- package/core/angular-materials/slider-material.js.map +1 -1
- package/core/component-fixture.js +28 -33
- package/core/component-fixture.js.map +1 -1
- package/core/element.js +24 -26
- package/core/element.js.map +1 -1
- package/core/elements/checkbox-element.js +12 -16
- package/core/elements/checkbox-element.js.map +1 -1
- package/core/elements/index.js +1 -1
- package/core/elements/radio-element.js +12 -16
- package/core/elements/radio-element.js.map +1 -1
- package/core/elements/select-element.js +10 -13
- package/core/elements/select-element.js.map +1 -1
- package/core/elements/slider-element.js +5 -8
- package/core/elements/slider-element.js.map +1 -1
- package/core/group.js +9 -15
- package/core/group.js.map +1 -1
- package/core/groups/index.js +1 -1
- package/core/groups/radio-group.js +8 -11
- package/core/groups/radio-group.js.map +1 -1
- package/core/helpers.js +11 -16
- package/core/helpers.js.map +1 -1
- package/core/index.js +1 -1
- package/core/page-fixture.js +8 -11
- package/core/page-fixture.js.map +1 -1
- package/core/playwright/angular-materials/autocomplete-material.js +26 -56
- package/core/playwright/angular-materials/autocomplete-material.js.map +1 -1
- package/core/playwright/angular-materials/index.js +1 -1
- package/core/playwright/angular-materials/select-material.js +48 -110
- package/core/playwright/angular-materials/select-material.js.map +1 -1
- package/core/playwright/angular-materials/slider-material.js +7 -10
- package/core/playwright/angular-materials/slider-material.js.map +1 -1
- package/core/playwright/component-fixture.js +88 -173
- package/core/playwright/component-fixture.js.map +1 -1
- package/core/playwright/element.js +38 -90
- package/core/playwright/element.js.map +1 -1
- package/core/playwright/elements/checkbox-element.js +49 -94
- package/core/playwright/elements/checkbox-element.js.map +1 -1
- package/core/playwright/elements/index.js +1 -1
- package/core/playwright/elements/radio-element.js +18 -34
- package/core/playwright/elements/radio-element.js.map +1 -1
- package/core/playwright/elements/select-element.js +14 -21
- package/core/playwright/elements/select-element.js.map +1 -1
- package/core/playwright/elements/slider-element.js +78 -157
- package/core/playwright/elements/slider-element.js.map +1 -1
- package/core/playwright/group.js +9 -14
- package/core/playwright/group.js.map +1 -1
- package/core/playwright/groups/index.js +1 -1
- package/core/playwright/groups/radio-group.js +27 -64
- package/core/playwright/groups/radio-group.js.map +1 -1
- package/core/playwright/index.js +1 -1
- package/core/playwright/page-fixture.js +8 -18
- package/core/playwright/page-fixture.js.map +1 -1
- package/core/protractor/angular-materials/autocomplete-material.js +12 -26
- package/core/protractor/angular-materials/autocomplete-material.js.map +1 -1
- package/core/protractor/angular-materials/index.js +1 -1
- package/core/protractor/angular-materials/select-material.js +45 -97
- package/core/protractor/angular-materials/select-material.js.map +1 -1
- package/core/protractor/component-fixture.js +89 -200
- package/core/protractor/component-fixture.js.map +1 -1
- package/core/protractor/element.js +46 -118
- package/core/protractor/element.js.map +1 -1
- package/core/protractor/elements/checkbox-element.js +18 -40
- package/core/protractor/elements/checkbox-element.js.map +1 -1
- package/core/protractor/elements/index.js +1 -1
- package/core/protractor/elements/radio-element.js +20 -42
- package/core/protractor/elements/radio-element.js.map +1 -1
- package/core/protractor/elements/select-element.js +16 -37
- package/core/protractor/elements/select-element.js.map +1 -1
- package/core/protractor/group.js +9 -14
- package/core/protractor/group.js.map +1 -1
- package/core/protractor/groups/index.js +1 -1
- package/core/protractor/groups/radio-group.js +29 -66
- package/core/protractor/groups/radio-group.js.map +1 -1
- package/core/protractor/index.js +1 -1
- package/core/protractor/page-fixture.js +9 -12
- package/core/protractor/page-fixture.js.map +1 -1
- package/core/protractor/utils.js +1 -1
- package/core/protractor/utils.js.map +1 -1
- package/errors/fixture-usage-error.js +5 -10
- package/errors/fixture-usage-error.js.map +1 -1
- package/errors/index.js +1 -1
- package/errors/transpilation-purpose-only.js +5 -10
- package/errors/transpilation-purpose-only.js.map +1 -1
- package/kassette/index.js +1 -1
- package/kassette/update-dates-in-mocks.js +66 -85
- package/kassette/update-dates-in-mocks.js.map +1 -1
- package/localization/index.js +1 -1
- package/localization/localization-mock.js +38 -60
- package/localization/localization-mock.js.map +1 -1
- package/mocks/index.js +1 -1
- package/mocks/mock-component-generator.js +54 -53
- package/mocks/mock-component-generator.js.map +1 -1
- package/package.json +27 -20
- package/public_api.js +1 -1
- package/schematics/ng-add/index.d.ts.map +1 -1
- package/schematics/ng-add/index.js +31 -26
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/playwright/index.d.ts.map +1 -1
- package/schematics/ng-add/playwright/index.js +17 -15
- package/schematics/ng-add/playwright/index.js.map +1 -1
- package/store/index.js +1 -1
- package/store/testable-select.js +13 -13
- package/store/testable-select.js.map +1 -1
- package/tools/index.js +1 -1
- package/tools/path-replacement/index.js +1 -1
- package/tools/path-replacement/path-replacement.js +24 -19
- package/tools/path-replacement/path-replacement.js.map +1 -1
- package/tools/protractor/fetch-manager/_fetch-manager.d.ts +1 -0
- package/tools/protractor/fetch-manager/_fetch-manager.d.ts.map +1 -0
- package/tools/protractor/fetch-manager/_fetch-manager.js +127 -0
- package/tools/protractor/fetch-manager/_fetch-manager.js.map +1 -0
- package/tools/protractor/fetch-manager/index.js +1 -1
- package/tools/protractor/fetch-manager/utils.js +15 -51
- package/tools/protractor/fetch-manager/utils.js.map +1 -1
- package/tools/protractor/index.js +1 -1
- package/tools/protractor/post-message-interceptor/_post-message-interceptor.d.ts +5 -0
- package/tools/protractor/post-message-interceptor/_post-message-interceptor.d.ts.map +1 -0
- package/tools/protractor/post-message-interceptor/_post-message-interceptor.js +157 -0
- package/tools/protractor/post-message-interceptor/_post-message-interceptor.js.map +1 -0
- package/tools/protractor/post-message-interceptor/index.js +1 -1
- package/tools/protractor/post-message-interceptor/post-message-interceptor.js +30 -103
- package/tools/protractor/post-message-interceptor/post-message-interceptor.js.map +1 -1
- package/visual-test/index.js +1 -1
- package/visual-test/utils.js +18 -7
- package/visual-test/utils.js.map +1 -1
- package/visual-test/visual-test.js +29 -34
- package/visual-test/visual-test.js.map +1 -1
- package/visual-testing-reporter/index.d.ts.map +1 -1
- package/visual-testing-reporter/index.js +37 -40
- package/visual-testing-reporter/index.js.map +1 -1
@@ -1,71 +1,52 @@
|
|
1
1
|
"use strict";
|
2
|
+
var LocalizationDependencyMocks_1;
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
4
|
exports.LocalizationDependencyMocks = exports.O3rTranslatePipeMock = exports.TranslatePipeMock = void 0;
|
4
5
|
exports.mockTranslationModules = mockTranslationModules;
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
const tslib_1 = require("tslib");
|
7
|
+
const core_1 = require("@angular/core");
|
8
|
+
const core_2 = require("@ngx-translate/core");
|
9
|
+
const localization_1 = require("@o3r/localization");
|
10
|
+
const rxjs_1 = require("rxjs");
|
11
|
+
const defaultLocalizationConfiguration = {
|
11
12
|
supportedLocales: ['en'],
|
12
13
|
language: 'en',
|
13
14
|
endPointUrl: '',
|
14
15
|
fallbackLanguage: 'en'
|
15
16
|
};
|
16
|
-
|
17
|
-
|
17
|
+
let TranslatePipeMock = class TranslatePipeMock {
|
18
|
+
transform(...args) {
|
19
|
+
return args && args.map((arg) => JSON.parse(arg)).join(', ');
|
18
20
|
}
|
19
|
-
|
20
|
-
var args = [];
|
21
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
22
|
-
args[_i] = arguments[_i];
|
23
|
-
}
|
24
|
-
return args && args.map(function (arg) { return JSON.parse(arg); }).join(', ');
|
25
|
-
};
|
26
|
-
TranslatePipeMock = tslib_1.__decorate([
|
27
|
-
(0, core_1.Pipe)({ name: 'translate' })
|
28
|
-
], TranslatePipeMock);
|
29
|
-
return TranslatePipeMock;
|
30
|
-
}());
|
21
|
+
};
|
31
22
|
exports.TranslatePipeMock = TranslatePipeMock;
|
32
|
-
|
33
|
-
|
23
|
+
exports.TranslatePipeMock = TranslatePipeMock = tslib_1.__decorate([
|
24
|
+
(0, core_1.Pipe)({ name: 'translate' })
|
25
|
+
], TranslatePipeMock);
|
26
|
+
let O3rTranslatePipeMock = class O3rTranslatePipeMock {
|
27
|
+
transform(...args) {
|
28
|
+
return args && args.map((arg) => JSON.parse(arg)).join(', ');
|
34
29
|
}
|
35
|
-
|
36
|
-
var args = [];
|
37
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
38
|
-
args[_i] = arguments[_i];
|
39
|
-
}
|
40
|
-
return args && args.map(function (arg) { return JSON.parse(arg); }).join(', ');
|
41
|
-
};
|
42
|
-
O3rTranslatePipeMock = tslib_1.__decorate([
|
43
|
-
(0, core_1.Pipe)({ name: 'o3rTranslate' })
|
44
|
-
], O3rTranslatePipeMock);
|
45
|
-
return O3rTranslatePipeMock;
|
46
|
-
}());
|
30
|
+
};
|
47
31
|
exports.O3rTranslatePipeMock = O3rTranslatePipeMock;
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
if (pipeWithPrefix === void 0) { pipeWithPrefix = false; }
|
32
|
+
exports.O3rTranslatePipeMock = O3rTranslatePipeMock = tslib_1.__decorate([
|
33
|
+
(0, core_1.Pipe)({ name: 'o3rTranslate' })
|
34
|
+
], O3rTranslatePipeMock);
|
35
|
+
let LocalizationDependencyMocks = LocalizationDependencyMocks_1 = class LocalizationDependencyMocks {
|
36
|
+
static forTest(pipeWithPrefix = false) {
|
54
37
|
return {
|
55
38
|
ngModule: LocalizationDependencyMocks_1,
|
56
39
|
providers: [{ provide: localization_1.O3rLocalizationTranslatePipe, useClass: pipeWithPrefix ? O3rTranslatePipeMock : TranslatePipeMock }]
|
57
40
|
};
|
58
|
-
}
|
59
|
-
|
60
|
-
LocalizationDependencyMocks = LocalizationDependencyMocks_1 = tslib_1.__decorate([
|
61
|
-
(0, core_1.NgModule)({
|
62
|
-
declarations: [TranslatePipeMock, O3rTranslatePipeMock],
|
63
|
-
exports: [TranslatePipeMock, O3rTranslatePipeMock]
|
64
|
-
})
|
65
|
-
], LocalizationDependencyMocks);
|
66
|
-
return LocalizationDependencyMocks;
|
67
|
-
}());
|
41
|
+
}
|
42
|
+
};
|
68
43
|
exports.LocalizationDependencyMocks = LocalizationDependencyMocks;
|
44
|
+
exports.LocalizationDependencyMocks = LocalizationDependencyMocks = LocalizationDependencyMocks_1 = tslib_1.__decorate([
|
45
|
+
(0, core_1.NgModule)({
|
46
|
+
declarations: [TranslatePipeMock, O3rTranslatePipeMock],
|
47
|
+
exports: [TranslatePipeMock, O3rTranslatePipeMock]
|
48
|
+
})
|
49
|
+
], LocalizationDependencyMocks);
|
69
50
|
/**
|
70
51
|
* Function to get the list of modules required to test component using Localization module
|
71
52
|
* @param localizationConfiguration Localization configuration
|
@@ -75,22 +56,19 @@ exports.LocalizationDependencyMocks = LocalizationDependencyMocks;
|
|
75
56
|
* @param pipeWithPrefix Enable pipe with prefix
|
76
57
|
* @returns List of modules to import in the TestBed
|
77
58
|
*/
|
78
|
-
function mockTranslationModules(localizationConfiguration, translations, translationCompilerProvider, mockPipe, pipeWithPrefix) {
|
79
|
-
|
80
|
-
|
81
|
-
if (mockPipe === void 0) { mockPipe = false; }
|
82
|
-
if (pipeWithPrefix === void 0) { pipeWithPrefix = false; }
|
83
|
-
return tslib_1.__spreadArray([
|
84
|
-
localization_1.LocalizationModule.forRoot(function () { return localizationConfiguration; }),
|
59
|
+
function mockTranslationModules(localizationConfiguration = defaultLocalizationConfiguration, translations = {}, translationCompilerProvider, mockPipe = false, pipeWithPrefix = false) {
|
60
|
+
return [
|
61
|
+
localization_1.LocalizationModule.forRoot(() => localizationConfiguration),
|
85
62
|
core_2.TranslateModule.forRoot({
|
86
63
|
loader: {
|
87
64
|
provide: core_2.TranslateLoader,
|
88
65
|
useValue: {
|
89
|
-
getTranslation:
|
66
|
+
getTranslation: (lang) => (0, rxjs_1.of)(translations[lang])
|
90
67
|
}
|
91
68
|
},
|
92
69
|
compiler: translationCompilerProvider
|
93
|
-
})
|
94
|
-
|
70
|
+
}),
|
71
|
+
...(mockPipe ? [LocalizationDependencyMocks.forTest(pipeWithPrefix)] : [])
|
72
|
+
];
|
95
73
|
}
|
96
74
|
//# sourceMappingURL=localization-mock.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"localization-mock.js","sourceRoot":"","sources":["../../src/localization/localization-mock.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"localization-mock.js","sourceRoot":"","sources":["../../src/localization/localization-mock.ts"],"names":[],"mappings":";;;;AAsEA,wDAoBC;;AA1FD,wCAMuB;AACvB,8CAG6B;AAC7B,oDAI2B;AAC3B,+BAEc;AAEd,MAAM,gCAAgC,GAAG;IACvC,gBAAgB,EAAE,CAAC,IAAI,CAAC;IACxB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,EAAE;IACf,gBAAgB,EAAE,IAAI;CAC+B,CAAC;AAGjD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACrB,SAAS,CAAC,GAAG,IAAW;QAC7B,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;CACF,CAAA;AAJY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,WAAI,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;GACf,iBAAiB,CAI7B;AAGM,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACxB,SAAS,CAAC,GAAG,IAAW;QAC7B,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;CACF,CAAA;AAJY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,WAAI,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;GAClB,oBAAoB,CAIhC;AAMM,IAAM,2BAA2B,mCAAjC,MAAM,2BAA2B;IAC/B,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,KAAK;QAC1C,OAAO;YACL,QAAQ,EAAE,6BAA2B;YACrC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,2CAA4B,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;SAC5H,CAAC;IACJ,CAAC;CACF,CAAA;AAPY,kEAA2B;sCAA3B,2BAA2B;IAJvC,IAAA,eAAQ,EAAC;QACR,YAAY,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;QACvD,OAAO,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;KACnD,CAAC;GACW,2BAA2B,CAOvC;AASD;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CACpC,4BAAgE,gCAAgC,EAChG,eAAiC,EAAE,EACnC,2BAAsC,EACtC,QAAQ,GAAG,KAAK,EAChB,cAAc,GAAG,KAAK;IAEtB,OAAO;QACL,iCAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC;QAC3D,sBAAe,CAAC,OAAO,CAAC;YACtB,MAAM,EAAE;gBACN,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE;oBACR,cAAc,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAA,SAAE,EAAC,YAAY,CAAC,IAAI,CAAC,CAAC;iBACzD;aACF;YACD,QAAQ,EAAE,2BAA2B;SACtC,CAAC;QACF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC","sourcesContent":["import {\n ModuleWithProviders,\n NgModule,\n Pipe,\n PipeTransform,\n Provider,\n} from '@angular/core';\nimport {\n TranslateLoader,\n TranslateModule,\n} from '@ngx-translate/core';\nimport {\n LocalizationConfiguration,\n LocalizationModule,\n O3rLocalizationTranslatePipe,\n} from '@o3r/localization';\nimport {\n of,\n} from 'rxjs';\n\nconst defaultLocalizationConfiguration = {\n supportedLocales: ['en'],\n language: 'en',\n endPointUrl: '',\n fallbackLanguage: 'en'\n} as const satisfies Partial<LocalizationConfiguration>;\n\n@Pipe({ name: 'translate' })\nexport class TranslatePipeMock implements PipeTransform {\n public transform(...args: any[]): string | undefined {\n return args && args.map((arg) => JSON.parse(arg)).join(', ');\n }\n}\n\n@Pipe({ name: 'o3rTranslate' })\nexport class O3rTranslatePipeMock implements PipeTransform {\n public transform(...args: any[]): string | undefined {\n return args && args.map((arg) => JSON.parse(arg)).join(', ');\n }\n}\n\n@NgModule({\n declarations: [TranslatePipeMock, O3rTranslatePipeMock],\n exports: [TranslatePipeMock, O3rTranslatePipeMock]\n})\nexport class LocalizationDependencyMocks {\n public static forTest(pipeWithPrefix = false): ModuleWithProviders<LocalizationDependencyMocks> {\n return {\n ngModule: LocalizationDependencyMocks,\n providers: [{ provide: O3rLocalizationTranslatePipe, useClass: pipeWithPrefix ? O3rTranslatePipeMock : TranslatePipeMock }]\n };\n }\n}\n\n/** Mock to provide to the MockTranslation module */\nexport interface MockTranslations {\n [lang: string]: {\n [key: string]: any;\n };\n}\n\n/**\n * Function to get the list of modules required to test component using Localization module\n * @param localizationConfiguration Localization configuration\n * @param translations Translations to use\n * @param translationCompilerProvider Provider for translations compiler\n * @param mockPipe Enable translation pipe mocking\n * @param pipeWithPrefix Enable pipe with prefix\n * @returns List of modules to import in the TestBed\n */\nexport function mockTranslationModules(\n localizationConfiguration: Partial<LocalizationConfiguration> = defaultLocalizationConfiguration,\n translations: MockTranslations = {},\n translationCompilerProvider?: Provider,\n mockPipe = false,\n pipeWithPrefix = false\n): ModuleWithProviders<LocalizationModule>[] {\n return [\n LocalizationModule.forRoot(() => localizationConfiguration),\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useValue: {\n getTranslation: (lang: string) => of(translations[lang])\n }\n },\n compiler: translationCompilerProvider\n }),\n ...(mockPipe ? [LocalizationDependencyMocks.forTest(pipeWithPrefix)] : [])\n ];\n}\n"]}
|
package/mocks/index.js
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.generateMockComponent = generateMockComponent;
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
var ts = require("typescript");
|
4
|
+
const core_1 = require("@angular/core");
|
5
|
+
const forms_1 = require("@angular/forms");
|
6
|
+
const ts = require("typescript");
|
8
7
|
/**
|
9
8
|
* Determine if the node in an input field
|
10
9
|
* @param node Typescript AST Node
|
@@ -28,18 +27,18 @@ function isOutputNode(node, source) {
|
|
28
27
|
* @param source Typescript source file
|
29
28
|
*/
|
30
29
|
function getIOName(currentNode, decorator, source) {
|
31
|
-
|
30
|
+
const nameInDecorator = decorator.getText(source).match(/@(input|output) *\( *(["'](.*)["'])? *\) */i);
|
32
31
|
if (nameInDecorator && nameInDecorator[3]) {
|
33
32
|
return nameInDecorator[3];
|
34
33
|
}
|
35
34
|
else {
|
36
|
-
|
37
|
-
currentNode.forEachChild(
|
35
|
+
let name;
|
36
|
+
currentNode.forEachChild((node) => {
|
38
37
|
if (ts.isIdentifier(node)) {
|
39
|
-
|
38
|
+
name = node.getText(source);
|
40
39
|
}
|
41
40
|
});
|
42
|
-
return
|
41
|
+
return name;
|
43
42
|
}
|
44
43
|
}
|
45
44
|
/**
|
@@ -48,30 +47,30 @@ function getIOName(currentNode, decorator, source) {
|
|
48
47
|
* @param source Typescript source file
|
49
48
|
*/
|
50
49
|
function parseIO(parentNode, source) {
|
51
|
-
|
52
|
-
|
53
|
-
parentNode.forEachChild(
|
50
|
+
const outputs = [];
|
51
|
+
const inputs = [];
|
52
|
+
parentNode.forEachChild((node) => {
|
54
53
|
if (isInputNode(node, source)) {
|
55
|
-
|
56
|
-
if (
|
57
|
-
inputs.push(
|
54
|
+
const name = getIOName(parentNode, node, source);
|
55
|
+
if (name) {
|
56
|
+
inputs.push(name);
|
58
57
|
}
|
59
58
|
}
|
60
59
|
else if (isOutputNode(node, source)) {
|
61
|
-
|
62
|
-
if (
|
63
|
-
outputs.push(
|
60
|
+
const name = getIOName(parentNode, node, source);
|
61
|
+
if (name) {
|
62
|
+
outputs.push(name);
|
64
63
|
}
|
65
64
|
}
|
66
65
|
else {
|
67
|
-
|
68
|
-
inputs.push
|
69
|
-
outputs.push
|
66
|
+
const childrenResult = parseIO(node, source);
|
67
|
+
inputs.push(...childrenResult.inputs);
|
68
|
+
outputs.push(...childrenResult.outputs);
|
70
69
|
}
|
71
70
|
});
|
72
71
|
return {
|
73
|
-
outputs
|
74
|
-
inputs
|
72
|
+
outputs,
|
73
|
+
inputs
|
75
74
|
};
|
76
75
|
}
|
77
76
|
/**
|
@@ -81,13 +80,11 @@ function parseIO(parentNode, source) {
|
|
81
80
|
* @param isInDecorator true if the recursive execution is in a decorator
|
82
81
|
* @param isInComponentConfig true if the recursive execution is in a component decorator configuration
|
83
82
|
*/
|
84
|
-
function getSelector(parentNode, source, isInDecorator, isInComponentConfig) {
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
var ret;
|
90
|
-
parentNode.forEachChild(function (node) {
|
83
|
+
function getSelector(parentNode, source, isInDecorator = false, isInComponentConfig = false) {
|
84
|
+
let foundDecorator = false;
|
85
|
+
let foundSelector = false;
|
86
|
+
let ret;
|
87
|
+
parentNode.forEachChild((node) => {
|
91
88
|
if (isInDecorator && isInComponentConfig && ts.isIdentifier(node) && node.getText(source) === 'selector') {
|
92
89
|
foundSelector = true;
|
93
90
|
}
|
@@ -128,35 +125,39 @@ function getSelector(parentNode, source, isInDecorator, isInComponentConfig) {
|
|
128
125
|
* ```
|
129
126
|
*/
|
130
127
|
function generateMockComponent(componentPath, config) {
|
131
|
-
|
132
|
-
|
128
|
+
const program = ts.createProgram([componentPath], {});
|
129
|
+
const source = program.getSourceFile(componentPath);
|
133
130
|
if (!source) {
|
134
131
|
throw new Error('No Source found');
|
135
132
|
}
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
var _this = this;
|
133
|
+
const { outputs, inputs } = parseIO(source, source);
|
134
|
+
const mock = class {
|
135
|
+
constructor() {
|
140
136
|
Object.keys(outputs)
|
141
|
-
.forEach(
|
137
|
+
.forEach((outputName) => this[outputName] = new core_1.EventEmitter());
|
142
138
|
if (config && config.isControlValueAccessor) {
|
143
|
-
this.writeValue =
|
144
|
-
this.registerOnChange =
|
145
|
-
this.registerOnTouched =
|
139
|
+
this.writeValue = () => { };
|
140
|
+
this.registerOnChange = () => { };
|
141
|
+
this.registerOnTouched = () => { };
|
146
142
|
}
|
147
143
|
}
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
144
|
+
};
|
145
|
+
return (0, core_1.Component)({
|
146
|
+
template: config?.template || '',
|
147
|
+
selector: getSelector(source, source) || '',
|
148
|
+
inputs,
|
149
|
+
outputs,
|
150
|
+
...(config && config.isControlValueAccessor)
|
151
|
+
? {
|
152
|
+
providers: [
|
153
|
+
{
|
154
|
+
provide: forms_1.NG_VALUE_ACCESSOR,
|
155
|
+
useExisting: (0, core_1.forwardRef)(() => mock),
|
156
|
+
multi: true
|
157
|
+
}
|
158
|
+
]
|
159
|
+
}
|
160
|
+
: {}
|
161
|
+
})(mock);
|
161
162
|
}
|
162
163
|
//# sourceMappingURL=mock-component-generator.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mock-component-generator.js","sourceRoot":"","sources":["../../src/mocks/mock-component-generator.ts"],"names":[],"mappings":";;AAmIA,sDAyCC
|
1
|
+
{"version":3,"file":"mock-component-generator.js","sourceRoot":"","sources":["../../src/mocks/mock-component-generator.ts"],"names":[],"mappings":";;AAmIA,sDAyCC;AA5KD,wCAKuB;AACvB,0CAEwB;AACxB,iCAAiC;AAEjC;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAa,EAAE,MAAqB;IACvD,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,IAAa,EAAE,MAAqB;IACxD,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,WAAoB,EAAE,SAAuB,EAAE,MAAqB;IACrF,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACvG,IAAI,eAAe,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,IAAI,IAAwB,CAAC;QAC7B,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,OAAO,CAAC,UAAmB,EAAE,MAAqB;IACzD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,UAAmB,EAAE,MAAqB,EAAE,aAAa,GAAG,KAAK,EAAE,mBAAmB,GAAG,KAAK;IACjH,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,GAAuB,CAAC;IAC5B,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,IAAI,aAAa,IAAI,mBAAmB,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;YACzG,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,aAAa,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,aAAa,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE,CAAC;YAC1F,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,aAAa,IAAI,cAAc,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjF,GAAG,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACrG,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,qBAAqB,CAA8B,aAAqB,EAAE,MAAgE;IACxJ,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG;QAKX;YACE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;iBACjB,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAE,IAAY,CAAC,UAAU,CAAC,GAAG,IAAI,mBAAY,EAAO,CAAC,CAAC;YAChF,IAAI,MAAM,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;gBAC5C,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;gBAC3B,IAAI,CAAC,gBAAgB,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;KACF,CAAC;IAEF,OAAO,IAAA,gBAAS,EAAC;QACf,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE;QAChC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;QAC3C,MAAM;QACN,OAAO;QACP,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,sBAAsB,CAAC;YAC1C,CAAC,CAAC;gBACA,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,yBAAiB;wBAC1B,WAAW,EAAE,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC;wBACnC,KAAK,EAAE,IAAI;qBACZ;iBACF;aACF;YACD,CAAC,CAAC,EAAE;KACP,CAAC,CAAC,IAAI,CAAY,CAAC;AACtB,CAAC","sourcesContent":["import {\n Component,\n EventEmitter,\n forwardRef,\n Type,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport * as ts from 'typescript';\n\n/**\n * Determine if the node in an input field\n * @param node Typescript AST Node\n * @param source Typescript source file\n */\nfunction isInputNode(node: ts.Node, source: ts.SourceFile): node is ts.Decorator {\n return ts.isDecorator(node) && node.getText(source).startsWith('@Input');\n}\n\n/**\n * Determine if the node in an output field\n * @param node Typescript AST Node\n * @param source Typescript source file\n */\nfunction isOutputNode(node: ts.Node, source: ts.SourceFile): node is ts.Decorator {\n return ts.isDecorator(node) && node.getText(source).startsWith('@Output');\n}\n\n/**\n * Get the name of the input / output\n * @param currentNode Typescript AST Node\n * @param decorator Current Input/Output decorator node\n * @param source Typescript source file\n */\nfunction getIOName(currentNode: ts.Node, decorator: ts.Decorator, source: ts.SourceFile): string | undefined {\n const nameInDecorator = decorator.getText(source).match(/@(input|output) *\\( *([\"'](.*)[\"'])? *\\) */i);\n if (nameInDecorator && nameInDecorator[3]) {\n return nameInDecorator[3];\n } else {\n let name: string | undefined;\n currentNode.forEachChild((node) => {\n if (ts.isIdentifier(node)) {\n name = node.getText(source);\n }\n });\n return name;\n }\n}\n\n/**\n * Get the list of Input and Output of a component\n * @param parentNode Typescript AST Node\n * @param source Typescript source file\n */\nfunction parseIO(parentNode: ts.Node, source: ts.SourceFile): { outputs: string[]; inputs: string[] } {\n const outputs: string[] = [];\n const inputs: string[] = [];\n\n parentNode.forEachChild((node) => {\n if (isInputNode(node, source)) {\n const name = getIOName(parentNode, node, source);\n if (name) {\n inputs.push(name);\n }\n } else if (isOutputNode(node, source)) {\n const name = getIOName(parentNode, node, source);\n if (name) {\n outputs.push(name);\n }\n } else {\n const childrenResult = parseIO(node, source);\n inputs.push(...childrenResult.inputs);\n outputs.push(...childrenResult.outputs);\n }\n });\n\n return {\n outputs,\n inputs\n };\n}\n\n/**\n * Get the selector of an angular class\n * @param parentNode Typescript AST Node\n * @param source Typescript source file\n * @param isInDecorator true if the recursive execution is in a decorator\n * @param isInComponentConfig true if the recursive execution is in a component decorator configuration\n */\nfunction getSelector(parentNode: ts.Node, source: ts.SourceFile, isInDecorator = false, isInComponentConfig = false) {\n let foundDecorator = false;\n let foundSelector = false;\n let ret: string | undefined;\n parentNode.forEachChild((node) => {\n if (isInDecorator && isInComponentConfig && ts.isIdentifier(node) && node.getText(source) === 'selector') {\n foundSelector = true;\n } else if (foundSelector && ts.isStringLiteral(node)) {\n ret = node.getText(source).replace(/[\"']/gi, '');\n } else if (isInDecorator && ts.isIdentifier(node) && node.getText(source) === 'Component') {\n foundDecorator = true;\n } else if (isInDecorator && foundDecorator && ts.isObjectLiteralExpression(node)) {\n ret = ret || getSelector(node, source, isInDecorator, true);\n } else {\n ret = ret || getSelector(node, source, isInDecorator || ts.isDecorator(node), isInComponentConfig);\n }\n });\n return ret;\n}\n\n/**\n * Generate a mock class base on a component file\n * @param componentPath Path to the component file to mock\n * @param config Object containing the following configurations:\n * template: should be provided if the template contain `<ng-content></ng-content>`\n * isControlValueAccessor: should be provided if the component extends ControlValueAccessor\n * @param config.template\n * @param config.isControlValueAccessor\n * @example\n * ```typescript\n * // hero.component.ts\n * \\@Component({selector: 'hero'})\n * class HeroComponent {\n * \\@Input() name: string;\n * \\@Output() doSomething: EventEmitter<void>\n * }\n *\n * // mock generation\n * class MockComponent extends generateMockComponent('hero.component.ts') {}\n * ```\n */\nexport function generateMockComponent<T = Record<string, unknown>>(componentPath: string, config?: { template?: string; isControlValueAccessor?: boolean }): Type<T> {\n const program = ts.createProgram([componentPath], {});\n const source = program.getSourceFile(componentPath);\n if (!source) {\n throw new Error('No Source found');\n }\n\n const { outputs, inputs } = parseIO(source, source);\n const mock = class {\n public writeValue: any;\n public registerOnChange: any;\n public registerOnTouched: any;\n\n constructor() {\n Object.keys(outputs)\n .forEach((outputName) => (this as any)[outputName] = new EventEmitter<any>());\n if (config && config.isControlValueAccessor) {\n this.writeValue = () => {};\n this.registerOnChange = () => {};\n this.registerOnTouched = () => {};\n }\n }\n };\n\n return Component({\n template: config?.template || '',\n selector: getSelector(source, source) || '',\n inputs,\n outputs,\n ...(config && config.isControlValueAccessor)\n ? {\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => mock),\n multi: true\n }\n ]\n }\n : {}\n })(mock) as Type<T>;\n}\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@o3r/testing",
|
3
|
-
"version": "12.5.0-prerelease.
|
3
|
+
"version": "12.5.0-prerelease.60",
|
4
4
|
"publishConfig": {
|
5
5
|
"access": "public"
|
6
6
|
},
|
@@ -111,10 +111,10 @@
|
|
111
111
|
"@angular/platform-browser": "^19.0.0",
|
112
112
|
"@material/slider": "^14.0.0",
|
113
113
|
"@ngrx/store": "^19.0.0",
|
114
|
-
"@ngx-translate/core": "~16.0.4",
|
115
|
-
"@o3r/core": "^12.5.0-prerelease.
|
116
|
-
"@o3r/localization": "^12.5.0-prerelease.
|
117
|
-
"@o3r/schematics": "^12.5.0-prerelease.
|
114
|
+
"@ngx-translate/core": "^15.0.0 || ~16.0.4",
|
115
|
+
"@o3r/core": "^12.5.0-prerelease.60",
|
116
|
+
"@o3r/localization": "^12.5.0-prerelease.60",
|
117
|
+
"@o3r/schematics": "^12.5.0-prerelease.60",
|
118
118
|
"@playwright/test": "^1.49.0",
|
119
119
|
"@schematics/angular": "^19.0.0",
|
120
120
|
"pixelmatch": "^6.0.0",
|
@@ -123,7 +123,7 @@
|
|
123
123
|
"rxjs": "^7.8.1",
|
124
124
|
"temporal-polyfill": "^0.3.0",
|
125
125
|
"ts-node": "~10.9.2",
|
126
|
-
"type-fest": "^4.
|
126
|
+
"type-fest": "^4.30.1",
|
127
127
|
"typescript": "^5.5.4"
|
128
128
|
},
|
129
129
|
"peerDependenciesMeta": {
|
@@ -139,9 +139,15 @@
|
|
139
139
|
"@angular/cli": {
|
140
140
|
"optional": true
|
141
141
|
},
|
142
|
+
"@angular/forms": {
|
143
|
+
"optional": true
|
144
|
+
},
|
142
145
|
"@material/slider": {
|
143
146
|
"optional": true
|
144
147
|
},
|
148
|
+
"@ngrx/store": {
|
149
|
+
"optional": true
|
150
|
+
},
|
145
151
|
"@ngx-translate/core": {
|
146
152
|
"optional": true
|
147
153
|
},
|
@@ -177,7 +183,7 @@
|
|
177
183
|
}
|
178
184
|
},
|
179
185
|
"dependencies": {
|
180
|
-
"@o3r/schematics": "^12.5.0-prerelease.
|
186
|
+
"@o3r/schematics": "^12.5.0-prerelease.60",
|
181
187
|
"esbuild": "~0.25.1",
|
182
188
|
"module-from-string": "^3.2.0",
|
183
189
|
"tslib": "^2.6.2"
|
@@ -195,7 +201,7 @@
|
|
195
201
|
"@angular/forms": "~19.2.0",
|
196
202
|
"@angular/platform-browser": "~19.2.0",
|
197
203
|
"@angular/platform-browser-dynamic": "~19.2.0",
|
198
|
-
"@babel/core": "~7.
|
204
|
+
"@babel/core": "~7.28.0",
|
199
205
|
"@babel/preset-typescript": "~7.27.0",
|
200
206
|
"@compodoc/compodoc": "^1.1.19",
|
201
207
|
"@eslint-community/eslint-plugin-eslint-comments": "^4.4.0",
|
@@ -204,12 +210,12 @@
|
|
204
210
|
"@ngx-translate/core": "~16.0.4",
|
205
211
|
"@nx/eslint-plugin": "~20.8.0",
|
206
212
|
"@nx/jest": "~20.8.0",
|
207
|
-
"@o3r/build-helpers": "^12.5.0-prerelease.
|
208
|
-
"@o3r/core": "^12.5.0-prerelease.
|
209
|
-
"@o3r/eslint-plugin": "^12.5.0-prerelease.
|
210
|
-
"@o3r/localization": "^12.5.0-prerelease.
|
211
|
-
"@o3r/test-helpers": "^12.5.0-prerelease.
|
212
|
-
"@playwright/test": "~1.
|
213
|
+
"@o3r/build-helpers": "^12.5.0-prerelease.60",
|
214
|
+
"@o3r/core": "^12.5.0-prerelease.60",
|
215
|
+
"@o3r/eslint-plugin": "^12.5.0-prerelease.60",
|
216
|
+
"@o3r/localization": "^12.5.0-prerelease.60",
|
217
|
+
"@o3r/test-helpers": "^12.5.0-prerelease.60",
|
218
|
+
"@playwright/test": "~1.54.0",
|
213
219
|
"@schematics/angular": "~19.2.0",
|
214
220
|
"@stylistic/eslint-plugin": "~3.1.0",
|
215
221
|
"@swc/helpers": "~0.5.0",
|
@@ -217,16 +223,16 @@
|
|
217
223
|
"@types/node": "^20.0.0",
|
218
224
|
"@types/pixelmatch": "^5.2.3",
|
219
225
|
"@types/pngjs": "^6.0.0",
|
220
|
-
"@typescript-eslint/parser": "~8.
|
226
|
+
"@typescript-eslint/parser": "~8.39.0",
|
221
227
|
"angular-eslint": "~19.4.0",
|
222
228
|
"concurrently": "^9.1.0",
|
223
229
|
"cpy-cli": "^5.0.0",
|
224
|
-
"eslint": "~9.
|
230
|
+
"eslint": "~9.33.0",
|
225
231
|
"eslint-import-resolver-node": "~0.3.9",
|
226
232
|
"eslint-import-resolver-typescript": "~3.10.0",
|
227
|
-
"eslint-plugin-import": "~2.
|
233
|
+
"eslint-plugin-import": "~2.32.0",
|
228
234
|
"eslint-plugin-import-newlines": "~1.4.0",
|
229
|
-
"eslint-plugin-jest": "~28.
|
235
|
+
"eslint-plugin-jest": "~28.14.0",
|
230
236
|
"eslint-plugin-jsdoc": "~50.8.0",
|
231
237
|
"eslint-plugin-prefer-arrow": "~1.2.3",
|
232
238
|
"eslint-plugin-unicorn": "~56.0.0",
|
@@ -237,6 +243,7 @@
|
|
237
243
|
"jest-environment-jsdom": "~29.7.0",
|
238
244
|
"jest-junit": "~16.0.0",
|
239
245
|
"jest-preset-angular": "~14.5.0",
|
246
|
+
"jest-util": "~29.7.0",
|
240
247
|
"jsonc-eslint-parser": "~2.4.0",
|
241
248
|
"nx": "~20.8.0",
|
242
249
|
"pid-from-port": "^1.1.3",
|
@@ -246,11 +253,11 @@
|
|
246
253
|
"rxjs": "^7.8.1",
|
247
254
|
"semver": "^7.5.2",
|
248
255
|
"temporal-polyfill": "^0.3.0",
|
249
|
-
"ts-jest": "~29.
|
256
|
+
"ts-jest": "~29.4.0",
|
250
257
|
"ts-node": "~10.9.2",
|
251
258
|
"type-fest": "^4.30.1",
|
252
259
|
"typescript": "~5.8.2",
|
253
|
-
"typescript-eslint": "~8.
|
260
|
+
"typescript-eslint": "~8.39.0",
|
254
261
|
"zone.js": "~0.15.0"
|
255
262
|
},
|
256
263
|
"generatorDependencies": {
|
package/public_api.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../schematics/ng-add/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAQL,IAAI,EAKL,MAAM,4BAA4B,CAAC;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../schematics/ng-add/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAQL,IAAI,EAKL,MAAM,4BAA4B,CAAC;AAgMpC;;;GAGG;AACH,eAAO,MAAM,KAAK,wBAAgC,CAAC"}
|
@@ -6,19 +6,21 @@ const path = require("node:path");
|
|
6
6
|
const prompt_1 = require("@angular/cli/src/utilities/prompt");
|
7
7
|
const schematics_1 = require("@angular-devkit/schematics");
|
8
8
|
const schematics_2 = require("@o3r/schematics");
|
9
|
-
const dependencies_1 = require("@schematics/angular/utility/dependencies");
|
10
9
|
const fixture_1 = require("./fixture");
|
11
10
|
const playwright_1 = require("./playwright");
|
11
|
+
/**
|
12
|
+
* List of external dependencies to be added to the project as peer dependencies
|
13
|
+
*/
|
14
|
+
const dependenciesToInstall = [];
|
15
|
+
/**
|
16
|
+
* List of external dependencies to be added to the project as dev dependencies
|
17
|
+
*/
|
12
18
|
const devDependenciesToInstall = [
|
13
19
|
'pixelmatch',
|
14
20
|
'pngjs',
|
15
|
-
'jest',
|
16
|
-
'jest-environment-jsdom',
|
17
|
-
'jest-preset-angular',
|
18
|
-
'ts-jest',
|
19
|
-
'@angular-builders/jest',
|
20
21
|
'@angular-devkit/build-angular',
|
21
|
-
'@
|
22
|
+
'@angular/core',
|
23
|
+
'@angular/common'
|
22
24
|
];
|
23
25
|
/**
|
24
26
|
* Add Otter testing to an Angular Project
|
@@ -32,26 +34,8 @@ function ngAddFn(options) {
|
|
32
34
|
const depsInfo = (0, schematics_2.getO3rPeerDeps)(testPackageJsonPath);
|
33
35
|
const workspaceProject = options.projectName ? (0, schematics_2.getWorkspaceConfig)(tree)?.projects[options.projectName] : undefined;
|
34
36
|
const workingDirectory = workspaceProject?.root || '.';
|
37
|
+
const projectPackageJson = tree.readJson(path.posix.join(workingDirectory, 'package.json'));
|
35
38
|
const projectType = workspaceProject?.projectType || 'application';
|
36
|
-
const dependencies = depsInfo.o3rPeerDeps.reduce((acc, dep) => {
|
37
|
-
acc[dep] = {
|
38
|
-
inManifest: [{
|
39
|
-
range: `${options.exactO3rVersion ? '' : '~'}${depsInfo.packageVersion}`,
|
40
|
-
types: (0, schematics_2.getProjectNewDependenciesTypes)(workspaceProject)
|
41
|
-
}],
|
42
|
-
ngAddOptions: { exactO3rVersion: options.exactO3rVersion }
|
43
|
-
};
|
44
|
-
return acc;
|
45
|
-
}, (0, schematics_2.getPackageInstallConfig)(testPackageJsonPath, tree, options.projectName, true, !!options.exactO3rVersion));
|
46
|
-
Object.entries((0, schematics_2.getExternalDependenciesVersionRange)(devDependenciesToInstall, testPackageJsonPath, context.logger))
|
47
|
-
.forEach(([dep, range]) => {
|
48
|
-
dependencies[dep] = {
|
49
|
-
inManifest: [{
|
50
|
-
range,
|
51
|
-
types: [dependencies_1.NodeDependencyType.Dev]
|
52
|
-
}]
|
53
|
-
};
|
54
|
-
});
|
55
39
|
let installJest;
|
56
40
|
const testFramework = options.testingFramework || (0, schematics_2.getTestFramework)((0, schematics_2.getWorkspaceConfig)(tree), context);
|
57
41
|
switch (testFramework) {
|
@@ -72,6 +56,27 @@ function ngAddFn(options) {
|
|
72
56
|
break;
|
73
57
|
}
|
74
58
|
}
|
59
|
+
const internalDependenciesInfo = depsInfo.o3rPeerDeps.reduce((acc, dep) => {
|
60
|
+
acc[dep] = {
|
61
|
+
inManifest: [{
|
62
|
+
range: `${options.exactO3rVersion ? '' : '~'}${depsInfo.packageVersion}`,
|
63
|
+
types: (0, schematics_2.getProjectNewDependenciesTypes)(workspaceProject)
|
64
|
+
}],
|
65
|
+
ngAddOptions: { exactO3rVersion: options.exactO3rVersion }
|
66
|
+
};
|
67
|
+
return acc;
|
68
|
+
}, (0, schematics_2.getPackageInstallConfig)(testPackageJsonPath, tree, options.projectName, true, !!options.exactO3rVersion));
|
69
|
+
if (installJest) {
|
70
|
+
devDependenciesToInstall.push('@angular-builders/jest', '@types/jest', 'jest', 'jest-environment-jsdom', 'jest-preset-angular', 'jest-util', 'ts-jest');
|
71
|
+
}
|
72
|
+
const externalDependenciesInfo = (0, schematics_2.getExternalDependenciesInfo)({
|
73
|
+
devDependenciesToInstall,
|
74
|
+
dependenciesToInstall,
|
75
|
+
o3rPackageJsonPath: testPackageJsonPath,
|
76
|
+
projectType: workspaceProject?.projectType,
|
77
|
+
projectPackageJson
|
78
|
+
}, context.logger);
|
79
|
+
const dependencies = { ...internalDependenciesInfo, ...externalDependenciesInfo };
|
75
80
|
let installPlaywright = false;
|
76
81
|
if (projectType === 'application') {
|
77
82
|
installPlaywright = options.enablePlaywright === undefined
|