apextestlist 1.12.2 → 1.12.4

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 (63) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/lib/commands/apextests/list.d.ts +2 -5
  3. package/lib/commands/apextests/list.js +10 -64
  4. package/lib/commands/apextests/list.js.map +1 -1
  5. package/lib/core/listTests.d.ts +2 -0
  6. package/lib/core/listTests.js +54 -0
  7. package/lib/core/listTests.js.map +1 -0
  8. package/lib/parsers/manifestParser.d.ts +10 -0
  9. package/lib/parsers/manifestParser.js +27 -0
  10. package/lib/parsers/manifestParser.js.map +1 -0
  11. package/lib/parsers/testNameParser.d.ts +7 -0
  12. package/lib/parsers/testNameParser.js +19 -0
  13. package/lib/parsers/testNameParser.js.map +1 -0
  14. package/lib/parsers/testSuiteParser.d.ts +15 -0
  15. package/lib/parsers/testSuiteParser.js +40 -0
  16. package/lib/parsers/testSuiteParser.js.map +1 -0
  17. package/lib/readers/directorySearcher.d.ts +10 -0
  18. package/lib/readers/directorySearcher.js +82 -0
  19. package/lib/readers/directorySearcher.js.map +1 -0
  20. package/lib/readers/testSuiteSearcher.d.ts +9 -0
  21. package/lib/readers/testSuiteSearcher.js +74 -0
  22. package/lib/readers/testSuiteSearcher.js.map +1 -0
  23. package/lib/utils/concurrencyThreshold.d.ts +1 -0
  24. package/lib/utils/concurrencyThreshold.js +7 -0
  25. package/lib/utils/concurrencyThreshold.js.map +1 -0
  26. package/lib/utils/constants.d.ts +5 -0
  27. package/lib/utils/constants.js +7 -0
  28. package/lib/utils/constants.js.map +1 -0
  29. package/lib/{helpers → utils}/formatters.d.ts +1 -1
  30. package/lib/utils/formatters.js.map +1 -0
  31. package/lib/utils/getPackageDirectories.js.map +1 -0
  32. package/lib/{helpers → utils}/getRepoRoot.js +1 -1
  33. package/lib/utils/getRepoRoot.js.map +1 -0
  34. package/lib/utils/matchWildcard.d.ts +1 -0
  35. package/lib/utils/matchWildcard.js +5 -0
  36. package/lib/utils/matchWildcard.js.map +1 -0
  37. package/lib/utils/types.d.ts +22 -0
  38. package/lib/{helpers → utils}/types.js.map +1 -1
  39. package/lib/utils/validateTests.js.map +1 -0
  40. package/oclif.lock +90 -71
  41. package/oclif.manifest.json +2 -1
  42. package/package.json +2 -2
  43. package/lib/helpers/constants.d.ts +0 -2
  44. package/lib/helpers/constants.js +0 -4
  45. package/lib/helpers/constants.js.map +0 -1
  46. package/lib/helpers/formatters.js.map +0 -1
  47. package/lib/helpers/getPackageDirectories.js.map +0 -1
  48. package/lib/helpers/getRepoRoot.js.map +0 -1
  49. package/lib/helpers/parsers.d.ts +0 -32
  50. package/lib/helpers/parsers.js +0 -87
  51. package/lib/helpers/parsers.js.map +0 -1
  52. package/lib/helpers/readers.d.ts +0 -21
  53. package/lib/helpers/readers.js +0 -158
  54. package/lib/helpers/readers.js.map +0 -1
  55. package/lib/helpers/types.d.ts +0 -10
  56. package/lib/helpers/validateTests.js.map +0 -1
  57. /package/lib/{helpers → utils}/formatters.js +0 -0
  58. /package/lib/{helpers → utils}/getPackageDirectories.d.ts +0 -0
  59. /package/lib/{helpers → utils}/getPackageDirectories.js +0 -0
  60. /package/lib/{helpers → utils}/getRepoRoot.d.ts +0 -0
  61. /package/lib/{helpers → utils}/types.js +0 -0
  62. /package/lib/{helpers → utils}/validateTests.d.ts +0 -0
  63. /package/lib/{helpers → utils}/validateTests.js +0 -0
@@ -1,158 +0,0 @@
1
- /* eslint-disable no-console */
2
- 'use strict';
3
- import { availableParallelism } from 'node:os';
4
- import { readdirSync, readFileSync } from 'node:fs';
5
- import { queue } from 'async';
6
- import { parseTestsNames, parseTestSuiteFile, parseTestSuitesNames } from './parsers.js';
7
- const TEST_NAME_REGEX = /@tests\s*:\s*([^/\n]+)/gi;
8
- const TEST_SUITE_NAME_REGEX = /@testsuites\s*:\s*([^/\n]+)/gi;
9
- const TEST_CLASS_ANNOTATION_REGEX = /@istest/gi;
10
- export function getConcurrencyThreshold() {
11
- const AVAILABLE_PARALLELISM = availableParallelism ? availableParallelism() : Infinity;
12
- return Math.min(AVAILABLE_PARALLELISM, 6);
13
- }
14
- /**
15
- * Given a certain directory, search its contents for files that end with
16
- * '.testSuite-meta.xml' and extract the class names mentioned in the test
17
- * suites.
18
- *
19
- * @param directory directory within the project to search for files
20
- * @returns a Promise<string> with a list of test names
21
- */
22
- export async function searchDirectoryForTestNamesInTestSuites(directory, packageDirectories) {
23
- const testClassesNames = new Set();
24
- let readDir;
25
- try {
26
- readDir = readdirSync(directory, { recursive: true });
27
- }
28
- catch (error) {
29
- throw new Error(`Invalid or inaccessible directory: ${directory}`);
30
- }
31
- // Gets the list of test suites
32
- const suiteFiles = readDir.filter((file) => file.endsWith('.testSuite-meta.xml'));
33
- const wildcards = new Set();
34
- let requiresWildcardSearch = false;
35
- // Function that handles the parsing of test suites and helps to build the
36
- // list of test classes for the next steps
37
- const testSuiteNameHandler = (fileName) => {
38
- const path = `${directory}/${fileName}`;
39
- const data = readFileSync(path, 'utf-8');
40
- const classes = parseTestSuiteFile(data);
41
- // TODO: Support for wildcards
42
- for (const test of classes) {
43
- if (test.includes('*')) {
44
- requiresWildcardSearch = true;
45
- wildcards.add(test);
46
- continue;
47
- }
48
- testClassesNames.add(test);
49
- }
50
- };
51
- // define the processors
52
- const testSuiteNameProcessor = queue((f, cb) => {
53
- testSuiteNameHandler(f);
54
- cb();
55
- }, getConcurrencyThreshold());
56
- // initialize the processor with the names of files we want to process
57
- await testSuiteNameProcessor.push(suiteFiles);
58
- // make sure no dangling process is left before continuing
59
- if (testSuiteNameProcessor.length() > 0) {
60
- await testSuiteNameProcessor.drain();
61
- }
62
- if (requiresWildcardSearch && packageDirectories) {
63
- for (const pkgDir of packageDirectories) {
64
- // eslint-disable-next-line no-await-in-loop
65
- const searchResult = await searchDirectoryForTestClasses(pkgDir, null);
66
- const testClassesInDir = searchResult.classes;
67
- for (const test of testClassesInDir) {
68
- // if the test class name matches the wildcard, add it to the list
69
- for (const wildcard of wildcards) {
70
- if (!matchWildcard(wildcard, test)) {
71
- continue;
72
- }
73
- testClassesNames.add(test);
74
- }
75
- }
76
- }
77
- }
78
- return Array.from(testClassesNames).sort();
79
- }
80
- export function matchWildcard(wildcard, test) {
81
- const regex = new RegExp(`^${wildcard.replace('*', '.*')}$`);
82
- return regex.test(test);
83
- }
84
- /**
85
- * Given a certain directory, search its contents for files that end with '.cls' or '.trigger'.
86
- * Extracts the test names from the annotations on those files, and returns a list with those.
87
- *
88
- * @param directory directory within the project to search for files
89
- * @param names names of test files
90
- * @returns list of test classes
91
- */
92
- export async function searchDirectoryForTestClasses(directory, names) {
93
- const testClassesNames = new Set();
94
- const testSuitesNames = new Set();
95
- const warnings = [];
96
- let readDir;
97
- try {
98
- readDir = readdirSync(directory, { recursive: true });
99
- }
100
- catch (error) {
101
- throw new Error(`Invalid or inaccessible directory: ${directory}`);
102
- }
103
- // Gets the list of Apex files (classes and triggers)
104
- const apexFiles = readDir.filter((file) => {
105
- if (!file.endsWith('.cls') && !file.endsWith('.trigger')) {
106
- return false;
107
- }
108
- const fileFullName = file.split('/').pop()?.split('.');
109
- if (!names) {
110
- return true;
111
- }
112
- if (fileFullName && fileFullName.length > 0) {
113
- const formattedName = `${fileFullName[1] === 'cls' ? 'ApexClass' : 'ApexTrigger'}:${fileFullName[0]}`;
114
- return names.includes(formattedName);
115
- }
116
- });
117
- const testClassNameHandler = (fileName) => {
118
- const path = `${directory}/${fileName}`;
119
- const data = readFileSync(path, 'utf-8');
120
- const testNameMatches = Array.from(data.matchAll(TEST_NAME_REGEX));
121
- const testSuiteMatches = Array.from(data.matchAll(TEST_SUITE_NAME_REGEX));
122
- const testClassAnnotationMatches = data.match(TEST_CLASS_ANNOTATION_REGEX);
123
- let hasAnnotation = false;
124
- if (testNameMatches.length > 0) {
125
- hasAnnotation = true;
126
- for (const match of testNameMatches) {
127
- parseTestsNames(match).forEach((testMethod) => testClassesNames.add(testMethod));
128
- }
129
- }
130
- if (testSuiteMatches.length > 0) {
131
- hasAnnotation = true;
132
- for (const match of testSuiteMatches) {
133
- parseTestSuitesNames(match).forEach((testMethod) => testSuitesNames.add(testMethod));
134
- }
135
- }
136
- if (testClassAnnotationMatches && testClassAnnotationMatches.length > 0) {
137
- hasAnnotation = true;
138
- testClassesNames.add(fileName.split('.').shift());
139
- }
140
- if (!hasAnnotation) {
141
- warnings.push(`File "${fileName}" does not contain @tests, @testsuites, or @istest annotations`);
142
- }
143
- };
144
- const testClassNameProcessor = queue((f, cb) => {
145
- testClassNameHandler(f);
146
- cb();
147
- }, getConcurrencyThreshold());
148
- await testClassNameProcessor.push(apexFiles);
149
- if (testClassNameProcessor.length() > 0) {
150
- await testClassNameProcessor.drain();
151
- }
152
- return {
153
- classes: Array.from(testClassesNames),
154
- testSuites: Array.from(testSuitesNames),
155
- warnings,
156
- };
157
- }
158
- //# sourceMappingURL=readers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readers.js","sourceRoot":"","sources":["../../src/helpers/readers.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- export type SfdxProject = {
2
- packageDirectories: Array<{
3
- path: string;
4
- }>;
5
- };
6
- export type SearchResult = {
7
- classes: string[];
8
- testSuites: string[];
9
- warnings: string[];
10
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateTests.js","sourceRoot":"","sources":["../../src/helpers/validateTests.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,gBAA0B,EAC1B,kBAA4B;IAE5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,8CAA8C;IAC9C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,eAAe,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAClF,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,6CAA6C,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,kBAA4B;IAC/E,yDAAyD;IACzD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAEjH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAgB,EAAE,WAAmB;IACpE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzC,oEAAoE;IACpE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AACxD,CAAC"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes