yeoman-test 7.0.0 → 7.2.0

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/dist/helpers.d.ts CHANGED
@@ -9,7 +9,7 @@ import type { RunContextSettings } from './run-context.js';
9
9
  /**
10
10
  * Dependencies can be path (autodiscovery) or an array [<generator>, <name>]
11
11
  */
12
- export type Dependency = string | Parameters<Environment['registerStub']>;
12
+ export type Dependency = string | Parameters<Environment['registerStub']> | Parameters<Environment['register']>;
13
13
  type GeneratorNew<GenParameter extends YeomanGenerator = YeomanGenerator> = new (...args: ConstructorParameters<typeof YeomanGenerator<GenParameter['options']>>) => YeomanGenerator<GenParameter['options']>;
14
14
  type GeneratorBuilder<GenParameter extends YeomanGenerator = YeomanGenerator> = (...args: ConstructorParameters<typeof YeomanGenerator<GenParameter['options']>>) => YeomanGenerator<GenParameter['options']>;
15
15
  export type GeneratorConstructor<GenParameter extends YeomanGenerator = YeomanGenerator> = GeneratorNew<GenParameter> | GeneratorBuilder<GenParameter>;
@@ -95,7 +95,7 @@ export declare class YeomanTest {
95
95
  * ];
96
96
  * var angular = createGenerator('angular:app', deps);
97
97
  */
98
- createGenerator<GeneratorType extends YeomanGenerator = YeomanGenerator>(name: string, dependencies: Dependency[], args?: string[], options?: YeomanGenerator.GeneratorOptions, localConfigOnly?: boolean): GeneratorType;
98
+ createGenerator<GeneratorType extends YeomanGenerator = YeomanGenerator>(name: string, dependencies: Dependency[], args?: string[], options?: YeomanGenerator.GeneratorOptions, localConfigOnly?: boolean): GeneratorType | Promise<GeneratorType>;
99
99
  /**
100
100
  * @deprecated
101
101
  * Register a list of dependent generators into the provided env.
@@ -119,16 +119,15 @@ export declare class YeomanTest {
119
119
  * createEnv.restore();
120
120
  * });
121
121
  */
122
- createEnv(...args: Parameters<typeof createEnv>): ReturnType<typeof createEnv>;
122
+ createEnv(...args: Parameters<typeof createEnv>): ReturnType<typeof createEnv> | Promise<ReturnType<typeof createEnv>>;
123
123
  /**
124
124
  * Creates a test environment.
125
125
  *
126
126
  * @param {Function} envContructor - environment constructor method.
127
127
  * @param {Object} [options] - Options to be passed to the environment
128
- * @returns {Object} environment instance
129
128
  * const env = createTestEnv(require('yeoman-environment').createEnv);
130
129
  */
131
- createTestEnv(envContructor?: (args?: string | string[] | undefined, opts?: Environment.Options | undefined, adapter?: import("yeoman-environment/lib/adapter.js") | undefined) => Environment<Environment.Options>, options?: Environment.Options): Environment<Environment.Options>;
130
+ createTestEnv(envContructor?: (args?: string | string[] | undefined, opts?: Environment.Options | undefined, adapter?: import("yeoman-environment/lib/adapter.js") | undefined) => Environment<Environment.Options> | Promise<Environment<Environment.Options>>, options?: Environment.Options): Environment<Environment.Options> | Promise<Environment<Environment.Options>>;
132
131
  /**
133
132
  * Get RunContext type
134
133
  * @return {RunContext}
package/dist/helpers.js CHANGED
@@ -147,9 +147,16 @@ export class YeomanTest {
147
147
  * var angular = createGenerator('angular:app', deps);
148
148
  */
149
149
  createGenerator(name, dependencies, args, options, localConfigOnly = true) {
150
- const env = this.createEnv([], { sharedOptions: { localConfigOnly } });
151
- this.registerDependencies(env, dependencies);
152
- return env.create(name, args, options);
150
+ const maybeEnv = this.createEnv([], { sharedOptions: { localConfigOnly } });
151
+ // TODO convert method to async.
152
+ if ('then' in maybeEnv) {
153
+ return maybeEnv.then(env => {
154
+ this.registerDependencies(env, dependencies);
155
+ return env.create(name, args, options);
156
+ });
157
+ }
158
+ this.registerDependencies(maybeEnv, dependencies);
159
+ return maybeEnv.create(name, args, options);
153
160
  }
154
161
  /**
155
162
  * @deprecated
@@ -161,7 +168,12 @@ export class YeomanTest {
161
168
  registerDependencies(env, dependencies) {
162
169
  for (const dependency of dependencies) {
163
170
  if (Array.isArray(dependency)) {
164
- env.registerStub(dependency[0], dependency[1]);
171
+ if (typeof dependency[0] === 'string') {
172
+ env.register(...dependency);
173
+ }
174
+ else {
175
+ env.registerStub(...dependency);
176
+ }
165
177
  }
166
178
  else {
167
179
  env.register(dependency);
@@ -191,7 +203,6 @@ export class YeomanTest {
191
203
  *
192
204
  * @param {Function} envContructor - environment constructor method.
193
205
  * @param {Object} [options] - Options to be passed to the environment
194
- * @returns {Object} environment instance
195
206
  * const env = createTestEnv(require('yeoman-environment').createEnv);
196
207
  */
197
208
  createTestEnv(envContructor = this.createEnv, options = { localConfigOnly: true }) {
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { default, createHelpers, YeomanTest, type Dependency } from './helpers.js';
2
2
  export { default as RunContext, RunContextBase, type RunContextSettings } from './run-context.js';
3
3
  export { default as RunResult, type RunResultOptions } from './run-result.js';
4
+ export { default as context } from './test-context.js';
4
5
  export { DummyPrompt, TestAdapter } from './adapter.js';
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { default, createHelpers, YeomanTest } from './helpers.js';
2
2
  export { default as RunContext, RunContextBase } from './run-context.js';
3
3
  export { default as RunResult } from './run-result.js';
4
+ export { default as context } from './test-context.js';
4
5
  export { DummyPrompt, TestAdapter } from './adapter.js';
@@ -31,7 +31,7 @@ export type RunContextSettings = {
31
31
  namespace?: string;
32
32
  };
33
33
  type PromiseRunResult<GeneratorType extends Generator> = Promise<RunResult<GeneratorType>>;
34
- export declare class RunContextBase<GeneratorType extends Generator> extends EventEmitter {
34
+ export declare class RunContextBase<GeneratorType extends Generator = Generator> extends EventEmitter {
35
35
  readonly mockedGenerators: Record<string, Generator>;
36
36
  env: Environment;
37
37
  generator: GeneratorType;
@@ -54,6 +54,7 @@ export declare class RunContextBase<GeneratorType extends Generator> extends Eve
54
54
  private oldCwd?;
55
55
  private eventListenersSet;
56
56
  private envCB;
57
+ private built;
57
58
  private ran;
58
59
  private errored;
59
60
  /**
@@ -32,6 +32,7 @@ export class RunContextBase extends EventEmitter {
32
32
  oldCwd;
33
33
  eventListenersSet = false;
34
34
  envCB;
35
+ built = false;
35
36
  ran = false;
36
37
  errored = false;
37
38
  /**
@@ -47,14 +48,9 @@ export class RunContextBase extends EventEmitter {
47
48
  constructor(generatorType, settings, envOptions = {}, helpers = defaultHelpers) {
48
49
  super();
49
50
  this.settings = {
50
- namespace: 'gen:test',
51
51
  ...settings,
52
52
  };
53
53
  this.Generator = generatorType;
54
- if (typeof generatorType !== 'string') {
55
- const { namespace, resolved } = this.settings;
56
- this.withGenerators([[generatorType, namespace, resolved]]);
57
- }
58
54
  this.envOptions = envOptions;
59
55
  this.withOptions({
60
56
  force: true,
@@ -72,7 +68,8 @@ export class RunContextBase extends EventEmitter {
72
68
  * @return {PromiseRunResult} Promise a RunResult instance.
73
69
  */
74
70
  async run() {
75
- if (!this.ran) {
71
+ this.ran = true;
72
+ if (!this.built) {
76
73
  await this.build();
77
74
  }
78
75
  try {
@@ -288,13 +285,20 @@ export class RunContextBase extends EventEmitter {
288
285
  */
289
286
  withGenerators(dependencies) {
290
287
  assert(Array.isArray(dependencies), 'dependencies should be an array');
291
- return this.onEnvironment(env => {
288
+ return this.onEnvironment(async (env) => {
292
289
  for (const dependency of dependencies) {
293
290
  if (Array.isArray(dependency)) {
294
- env.registerStub(...dependency);
291
+ if (typeof dependency[0] === 'string') {
292
+ // eslint-disable-next-line no-await-in-loop, @typescript-eslint/await-thenable
293
+ await env.register(...dependency);
294
+ }
295
+ else {
296
+ env.registerStub(...dependency);
297
+ }
295
298
  }
296
299
  else {
297
- env.register(dependency);
300
+ // eslint-disable-next-line no-await-in-loop, @typescript-eslint/await-thenable
301
+ await env.register(dependency);
298
302
  }
299
303
  }
300
304
  });
@@ -397,7 +401,7 @@ export class RunContextBase extends EventEmitter {
397
401
  return this;
398
402
  }
399
403
  assertNotBuild() {
400
- if (this.ran || this.completed) {
404
+ if (this.built || this.completed) {
401
405
  throw new Error('The context is already built');
402
406
  }
403
407
  }
@@ -407,7 +411,7 @@ export class RunContextBase extends EventEmitter {
407
411
  */
408
412
  async build() {
409
413
  this.assertNotBuild();
410
- this.ran = true;
414
+ this.built = true;
411
415
  if (!this.targetDirectory && this.settings.tmpdir !== false) {
412
416
  this.inTmpDir();
413
417
  }
@@ -424,7 +428,7 @@ export class RunContextBase extends EventEmitter {
424
428
  if (!this.targetDirectory) {
425
429
  throw new Error('targetDirectory is required');
426
430
  }
427
- const testEnv = this.helpers.createTestEnv(this.envOptions.createEnv, {
431
+ const testEnv = await this.helpers.createTestEnv(this.envOptions.createEnv, {
428
432
  cwd: this.settings.forwardCwd ? this.targetDirectory : undefined,
429
433
  ...this.options,
430
434
  ...this.envOptions,
@@ -439,13 +443,14 @@ export class RunContextBase extends EventEmitter {
439
443
  // eslint-disable-next-line no-await-in-loop
440
444
  await onEnvironmentCallback.call(this, this.env);
441
445
  }
442
- let { namespace } = this.settings;
443
- if (typeof this.Generator === 'string') {
444
- namespace = this.env.namespace(this.Generator);
445
- if (namespace !== this.Generator) {
446
- // Generator is a file path, it should be registered.
447
- this.env.register(this.Generator);
448
- }
446
+ const { namespace = typeof this.Generator === 'string' ? this.env.namespace(this.Generator) : 'gen:test' } = this.settings;
447
+ if (typeof this.Generator === 'string' && namespace !== this.Generator) {
448
+ // Generator is a file path, it should be registered.
449
+ this.env.register(this.Generator, namespace);
450
+ }
451
+ else if (typeof this.Generator !== 'string') {
452
+ const { resolved } = this.settings;
453
+ this.env.registerStub(this.Generator, namespace, resolved);
449
454
  }
450
455
  // eslint-disable-next-line @typescript-eslint/await-thenable
451
456
  this.generator = (await this.env.create(namespace, this.args, this.options));
@@ -1,6 +1,5 @@
1
1
  import type RunContext from './run-context.js';
2
2
  declare class TestContext {
3
- autoCleanup: boolean;
4
3
  private runContext?;
5
4
  startNewContext(runContext: RunContext<any>): void;
6
5
  }
@@ -1,5 +1,4 @@
1
1
  class TestContext {
2
- autoCleanup = false;
3
2
  runContext;
4
3
  startNewContext(runContext) {
5
4
  this.runContext?.cleanupTemporaryDir();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yeoman-test",
3
- "version": "7.0.0",
3
+ "version": "7.2.0",
4
4
  "description": "Test utilities for Yeoman generators",
5
5
  "homepage": "http://yeoman.io/authoring/testing.html",
6
6
  "author": "The Yeoman Team",
@@ -26,7 +26,7 @@
26
26
  "doc_path": "../yeoman-test-doc"
27
27
  },
28
28
  "devDependencies": {
29
- "@esbuild-kit/esm-loader": "^2.5.1",
29
+ "@node-loaders/esbuild": "^0.6.0",
30
30
  "@types/mocha": "^10.0.0",
31
31
  "@types/sinon": "^10.0.13",
32
32
  "coveralls": "^3.1.1",