diff --git a/src/adapter.ts b/src/adapter.ts index 51de9df..a152221 100644 --- a/src/adapter.ts +++ b/src/adapter.ts @@ -13,3 +13,5 @@ export class TestAdapter extends BaseTestAdapter { // eslint-disable-next-line n/file-extension-in-import export { DummyPrompt, type DummyPromptOptions, type DummyPromptCallback, type TestAdapterOptions } from '@yeoman/adapter/testing'; + +export type AskedQuestions = Array<{ name: string; answer: any }>; diff --git a/src/run-context.ts b/src/run-context.ts index 0e97de8..036bf06 100644 --- a/src/run-context.ts +++ b/src/run-context.ts @@ -22,7 +22,7 @@ import { create as createMemFsEditor, type MemFsEditorFile, type MemFsEditor } f import type { DefaultGeneratorApi, DefaultEnvironmentApi } from '../types/type-helpers.js'; import RunResult, { type RunResultOptions } from './run-result.js'; import defaultHelpers, { type CreateEnv, type Dependency, type YeomanTest } from './helpers.js'; -import { type DummyPromptOptions, type TestAdapterOptions } from './adapter.js'; +import { type AskedQuestions, type DummyPromptCallback, type DummyPromptOptions, type TestAdapterOptions } from './adapter.js'; import testContext from './test-context.js'; /** @@ -76,6 +76,7 @@ export class RunContextBase; spawnStub?: any; mockedGeneratorFactory: MockedGeneratorFactory; + readonly askedQuestions: AskedQuestions = []; protected environmentPromise?: PromiseRunResult; @@ -664,13 +665,23 @@ export class RunContextBase { await this.prepare(); + const { askedQuestions, adapterOptions } = this; + const promptCallback: DummyPromptCallback = function (this, answer: any, options) { + const { question } = options; + if (question.name) { + askedQuestions.push({ name: question.name, answer }); + } + + return adapterOptions?.callback ? adapterOptions.callback.call(this, answer, options) : answer; + }; + const testEnv = await this.helpers.createTestEnv(this.envOptions.createEnv, { cwd: this.settings.forwardCwd ? this.targetDirectory : undefined, sharedFs: this.memFs, force: true, skipCache: true, skipInstall: true, - adapter: this.helpers.createTestAdapter({ ...this.adapterOptions, mockedAnswers: this.answers }), + adapter: this.helpers.createTestAdapter({ ...this.adapterOptions, mockedAnswers: this.answers, callback: promptCallback }), ...this.envOptions, } as any); this.env = this.envCB ? (await this.envCB(testEnv)) ?? testEnv : testEnv; @@ -727,6 +738,7 @@ export class RunContextBase typeof object === 'object' && object !== null && object !== undefined; @@ -60,6 +61,8 @@ export type RunResultOptions = { settings: RunContextSettings; helpers: YeomanTest; + + askedQuestions: AskedQuestions; }; /** @@ -76,6 +79,7 @@ export default class RunResult; spawnStub?: any; + readonly askedQuestions: AskedQuestions; constructor(options: RunResultOptions) { if (options.memFs && !options.cwd) { @@ -90,6 +94,7 @@ export default class RunResult