@travetto/test 3.4.0-rc.0 → 3.4.0-rc.1

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/README.md CHANGED
@@ -79,6 +79,7 @@ would translate to:
79
79
  "use strict";
80
80
  Object.defineProperty(exports, "__esModule", { value: true });
81
81
  const tslib_1 = require("tslib");
82
+ const Ⲑ_util_1 = tslib_1.__importStar(require("@travetto/test/src/execute/util.js"));
82
83
  const Ⲑ_check_1 = tslib_1.__importStar(require("@travetto/test/src/assert/check.js"));
83
84
  const Ⲑ_root_index_1 = tslib_1.__importStar(require("@travetto/manifest/src/root-index.js"));
84
85
  const Ⲑ_decorator_1 = tslib_1.__importStar(require("@travetto/registry/src/decorator.js"));
@@ -88,6 +89,8 @@ const test_1 = require("@travetto/test");
88
89
  let SimpleTest = class SimpleTest {
89
90
  static Ⲑinit = Ⲑ_root_index_1.RootIndex.registerFunction(SimpleTest, ᚕf, 1887908328, { test: { hash: 102834457 } }, false, false);
90
91
  async test() {
92
+ if (Ⲑ_util_1.RunnerUtil.tryDebugger)
93
+ debugger;
91
94
  Ⲑ_check_1.AssertCheck.check({ file: ᚕf, line: 10, text: "{ size: 20, address: { state: 'VA' } }", operator: "deepStrictEqual" }, true, { size: 20, address: { state: 'VA' } }, {});
92
95
  }
93
96
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@travetto/test",
3
- "version": "3.4.0-rc.0",
3
+ "version": "3.4.0-rc.1",
4
4
  "description": "Declarative test framework",
5
5
  "keywords": [
6
6
  "unit-testing",
@@ -27,15 +27,15 @@
27
27
  "directory": "module/test"
28
28
  },
29
29
  "dependencies": {
30
- "@travetto/base": "^3.4.0-rc.0",
31
- "@travetto/registry": "^3.4.0-rc.0",
30
+ "@travetto/base": "^3.4.0-rc.1",
31
+ "@travetto/registry": "^3.4.0-rc.1",
32
32
  "@travetto/terminal": "^3.4.0-rc.0",
33
- "@travetto/worker": "^3.4.0-rc.0",
34
- "@travetto/yaml": "^3.4.0-rc.0"
33
+ "@travetto/worker": "^3.4.0-rc.1",
34
+ "@travetto/yaml": "^3.4.0-rc.1"
35
35
  },
36
36
  "peerDependencies": {
37
- "@travetto/cli": "^3.4.0-rc.0",
38
- "@travetto/transformer": "^3.4.0-rc.0"
37
+ "@travetto/cli": "^3.4.0-rc.2",
38
+ "@travetto/transformer": "^3.4.0-rc.1"
39
39
  },
40
40
  "peerDependenciesMeta": {
41
41
  "@travetto/transformer": {
@@ -47,7 +47,7 @@
47
47
  },
48
48
  "travetto": {
49
49
  "displayName": "Testing",
50
- "profiles": [
50
+ "roles": [
51
51
  "test"
52
52
  ]
53
53
  },
@@ -30,7 +30,7 @@ export class Runner {
30
30
  async runFiles(): Promise<boolean> {
31
31
  const consumer = await RunnableTestConsumer.get(this.#state.consumer ?? this.#state.format);
32
32
 
33
- const files = (await RunnerUtil.getTestFiles(this.patterns));
33
+ const files = (await RunnerUtil.getTestFiles(this.patterns)).map(f => f.sourceFile);
34
34
 
35
35
  console.debug('Running', { files, patterns: this.patterns });
36
36
 
@@ -2,7 +2,7 @@ import { createReadStream } from 'fs';
2
2
  import readline from 'readline';
3
3
 
4
4
  import { ExecUtil, ShutdownManager, TimeUtil } from '@travetto/base';
5
- import { RootIndex } from '@travetto/manifest';
5
+ import { IndexedFile, RootIndex } from '@travetto/manifest';
6
6
 
7
7
  /**
8
8
  * Simple Test Utilities
@@ -36,12 +36,16 @@ export class RunnerUtil {
36
36
  /**
37
37
  * Find all valid test files given the globs
38
38
  */
39
- static async getTestFiles(globs: RegExp[]): Promise<string[]> {
40
- const files = RootIndex.findTest({})
41
- .filter(f => globs.some(g => g.test(f.import)));
39
+ static async getTestFiles(globs?: RegExp[]): Promise<IndexedFile[]> {
40
+ const files = RootIndex.find({
41
+ module: m => m.roles.includes('test') || m.roles.includes('std'),
42
+ folder: f => f === 'test',
43
+ file: f => f.role === 'test'
44
+ })
45
+ .filter(f => globs?.some(g => g.test(f.import)) ?? true);
42
46
 
43
47
  const validFiles = files
44
- .map(f => this.isTestFile(f.sourceFile).then(valid => ({ file: f.sourceFile, valid })));
48
+ .map(f => this.isTestFile(f.sourceFile).then(valid => ({ file: f, valid })));
45
49
 
46
50
  return (await Promise.all(validFiles))
47
51
  .filter(x => x.valid)
@@ -61,4 +65,14 @@ export class RunnerUtil {
61
65
  }
62
66
  return countRes.valid ? +countRes.stdout : 0;
63
67
  }
68
+
69
+ /**
70
+ * Determine if we should invoke the debugger
71
+ */
72
+ static get tryDebugger(): boolean {
73
+ if (process.env.TRV_TEST_BREAK_ENTRY === '1') {
74
+ return true;
75
+ }
76
+ return false;
77
+ }
64
78
  }
@@ -8,6 +8,7 @@ import { buildStandardTestManager } from '../worker/standard';
8
8
  import { TestConsumerRegistry } from '../consumer/registry';
9
9
  import { CumulativeSummaryConsumer } from '../consumer/types/cumulative';
10
10
  import { RunEvent } from '../worker/types';
11
+ import { RunnerUtil } from './util';
11
12
 
12
13
  function isRunEvent(ev: unknown): ev is RunEvent {
13
14
  return ObjectUtil.isPlainObject(ev) && 'type' in ev && typeof ev.type === 'string' && ev.type === 'run-test';
@@ -78,7 +79,7 @@ export class TestWatcher {
78
79
  process.send?.('ready');
79
80
 
80
81
  if (runAllOnStart) {
81
- for (const test of await RootIndex.findTest({})) {
82
+ for (const test of await RunnerUtil.getTestFiles()) {
82
83
  await import(test.import);
83
84
  itr.add(test.sourceFile);
84
85
  }
@@ -19,9 +19,9 @@ export class TestCountCommand {
19
19
  // Load all tests
20
20
  for (const file of files) {
21
21
  try {
22
- await import(RootIndex.getFromSource(file)!.import);
22
+ await import(file.import);
23
23
  } catch (err) {
24
- console.error('Failed to import', file, err);
24
+ console.error('Failed to import', file.sourceFile, err);
25
25
  }
26
26
  }
27
27
 
@@ -4,18 +4,40 @@ import {
4
4
  TransformerState, DecoratorMeta, OnMethod, OnClass, CoreUtil, DecoratorUtil
5
5
  } from '@travetto/transformer';
6
6
 
7
+ const RUN_UTIL = 'RunnerUtil';
8
+
9
+ const RunUtilⲐ = Symbol.for('@travetto/test:runner');
10
+
11
+ /**
12
+ * Annotate transformation state
13
+ */
14
+ interface AnnotateState {
15
+ [RunUtilⲐ]?: ts.Expression;
16
+ }
17
+
7
18
  /**
8
19
  * Annotate tests and suites for better diagnostics
9
20
  */
10
21
  export class AnnotationTransformer {
11
22
 
23
+
24
+ /**
25
+ * Initialize transformer state
26
+ */
27
+ static initState(state: TransformerState & AnnotateState): void {
28
+ if (!state[RunUtilⲐ]) {
29
+ const runUtil = state.importFile('@travetto/test/src/execute/util').ident;
30
+ state[RunUtilⲐ] = CoreUtil.createAccess(state.factory, runUtil, RUN_UTIL, 'tryDebugger');
31
+ }
32
+ }
33
+
12
34
  /**
13
35
  * Build source annotation, indicating line ranges
14
36
  * @param state
15
37
  * @param node
16
38
  * @param dec
17
39
  */
18
- static buildAnnotation(state: TransformerState, node: ts.Node, dec: ts.Decorator, expression: ts.CallExpression): ts.Decorator {
40
+ static buildAnnotation(state: TransformerState & AnnotateState, node: ts.Node, dec: ts.Decorator, expression: ts.CallExpression): ts.Decorator {
19
41
  const ogN = (CoreUtil.hasOriginal(node) ? node.original : node);
20
42
  const n = ts.isMethodDeclaration(ogN) ? ogN : undefined;
21
43
 
@@ -40,7 +62,7 @@ export class AnnotationTransformer {
40
62
  }
41
63
 
42
64
  @OnClass('Suite')
43
- static annotateSuiteDetails(state: TransformerState, node: ts.ClassDeclaration, dm?: DecoratorMeta): ts.ClassDeclaration {
65
+ static annotateSuiteDetails(state: TransformerState & AnnotateState, node: ts.ClassDeclaration, dm?: DecoratorMeta): ts.ClassDeclaration {
44
66
  const dec = dm?.dec;
45
67
 
46
68
  if (dec && ts.isCallExpression(dec.expression)) {
@@ -57,7 +79,9 @@ export class AnnotationTransformer {
57
79
  }
58
80
 
59
81
  @OnMethod('Test')
60
- static annotateTestDetails(state: TransformerState, node: ts.MethodDeclaration, dm?: DecoratorMeta): ts.MethodDeclaration {
82
+ static annotateTestDetails(state: TransformerState & AnnotateState, node: ts.MethodDeclaration, dm?: DecoratorMeta): ts.MethodDeclaration {
83
+ this.initState(state);
84
+
61
85
  const dec = dm?.dec;
62
86
 
63
87
  if (dec && ts.isCallExpression(dec.expression)) {
@@ -70,7 +94,11 @@ export class AnnotationTransformer {
70
94
  node.typeParameters,
71
95
  node.parameters,
72
96
  node.type,
73
- node.body
97
+ node.body ? state.factory.updateBlock(node.body, [
98
+ state.factory.createIfStatement(state[RunUtilⲐ]!,
99
+ state.factory.createExpressionStatement(state.factory.createIdentifier('debugger'))),
100
+ ...node.body.statements
101
+ ]) : node.body
74
102
  );
75
103
  }
76
104
  return node;