Skip to content

Commit

Permalink
chore: promisify tests callbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
mshima committed Aug 27, 2024
1 parent dd8bdba commit 46d9723
Show file tree
Hide file tree
Showing 4 changed files with 518 additions and 399 deletions.
137 changes: 79 additions & 58 deletions test/helpers.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import process from 'node:process';
import { createRequire } from 'node:module';
import { existsSync } from 'node:fs';
import { mock } from 'node:test';
import { promisify as promisify_ } from 'node:util';
import Generator from 'yeoman-generator';
import { afterEach, beforeEach, describe, expect, it } from 'esmocha';
import type Environment from 'yeoman-environment';
Expand All @@ -13,6 +14,8 @@ import helpers from '../src/helpers.js';
import { TestAdapter } from '../src/adapter.js';
import RunContext from '../src/run-context.js';

/* Remove argument from promisify return */
const promisify = function_ => () => promisify_(function_)();
const require = createRequire(import.meta.url);
const __dirname = dirname(fileURLToPath(import.meta.url));

Expand Down Expand Up @@ -162,21 +165,27 @@ describe('yeoman-test', () => {

describe('.run()', () => {
describe('with a generator', () => {
it('return a RunContext object', done => {
const context = helpers.run(helpers.createDummyGenerator());
assert(context instanceof RunContext);
context.on('end', done);
});
it(
'return a RunContext object',
promisify(done => {
const context = helpers.run(helpers.createDummyGenerator());
assert(context instanceof RunContext);
context.on('end', done);
}),
);
});

describe('with a namespace', () => {
it('return a RunContext object', done => {
const context = helpers.run('simple:app').withEnvironment(environment => {
environment.register(require.resolve('./fixtures/generator-simple/app'));
});
assert(context instanceof RunContext);
context.on('end', done);
});
it(
'return a RunContext object',
promisify(done => {
const context = helpers.run('simple:app').withEnvironment(environment => {
environment.register(require.resolve('./fixtures/generator-simple/app'));
});
assert(context instanceof RunContext);
context.on('end', done);
}),
);
});

it('pass settings to RunContext', () => {
Expand All @@ -192,55 +201,67 @@ describe('yeoman-test', () => {
assert.equal(runContext.envOptions, environmentOptions);
});

it('catch env errors', done => {
helpers
.run(
class extends helpers.createDummyGenerator() {
throws() {
this.env.emit('error', new Error('an error'));
}
},
)
.on('error', _ => {
done();
});
});

it('catch generator emitted errors', done => {
helpers
.run(
class extends helpers.createDummyGenerator() {
throws() {
this.emit('error', new Error('an error'));
}
},
)
.on('error', _ => {
done();
});
});

it('catch generator thrown errors', done => {
helpers
.run(
class extends helpers.createDummyGenerator() {
throws() {
throw new Error('Some error.');
}
},
)
.on('error', _ => {
done();
});
});
it(
'catch env errors',
promisify(done => {
helpers
.run(
class extends helpers.createDummyGenerator() {
throws() {
this.env.emit('error', new Error('an error'));
}
},
)
.on('error', _ => {
done();
});
}),
);

it(
'catch generator emitted errors',
promisify(done => {
helpers
.run(
class extends helpers.createDummyGenerator() {
throws() {
this.emit('error', new Error('an error'));
}
},
)
.on('error', _ => {
done();
});
}),
);

it(
'catch generator thrown errors',
promisify(done => {
helpers
.run(
class extends helpers.createDummyGenerator() {
throws() {
throw new Error('Some error.');
}
},
)
.on('error', _ => {
done();
});
}),
);

// This is a workaround for corner case were an error is not correctly emitted
// See https://github.com/yeoman/generator/pull/1155
it('catch run errors', done => {
helpers.run(class extends Generator {}, {}, { catchGeneratorError: true }).on('error', _ => {
done();
});
});
it(
'catch run errors',
promisify(done => {
helpers.run(class extends Generator {}, {}, { catchGeneratorError: true }).on('error', _ => {
done();
});
}),
);

describe('with files', () => {
it('write files to mem-fs', async () => {
Expand Down
38 changes: 19 additions & 19 deletions test/run-context-environment.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import process from 'node:process';
import { createRequire } from 'node:module';
import { mock } from 'node:test';
import { type LookupOptions } from '@yeoman/types';
import { afterEach, beforeEach, describe, it } from 'esmocha';
import { after as afterAll, afterEach, before as beforeAll, beforeEach, describe, it } from 'esmocha';
import helpers from '../src/helpers.js';
import RunContext from '../src/run-context.js';
import RunResult from '../src/run-result.js';
Expand Down Expand Up @@ -46,10 +46,10 @@ describe('RunContext running environment', () => {
});

describe('with string', () => {
before(() => {
beforeAll(() => {
gen = require.resolve('./fixtures/generator-simple/app');
});
after(() => {
afterAll(() => {
gen = undefined;
});

Expand Down Expand Up @@ -83,10 +83,10 @@ describe('RunContext running environment', () => {
});

describe('with generator', () => {
before(() => {
beforeAll(() => {
gen = SimpleApp;
});
after(() => {
afterAll(() => {
gen = undefined;
});

Expand All @@ -98,7 +98,7 @@ describe('RunContext running environment', () => {
});

describe('with promised generator', () => {
before(() => {
beforeAll(() => {
gen = 'promised-generator';
build = false;
});
Expand All @@ -108,7 +108,7 @@ describe('RunContext running environment', () => {
mock.method(environment, 'create', () => Promise.resolve(new FakeGenerator([], { env: environment })));
});
});
after(() => {
afterAll(() => {
gen = undefined;
build = true;
});
Expand All @@ -121,10 +121,10 @@ describe('RunContext running environment', () => {
});

describe('with path', () => {
before(() => {
beforeAll(() => {
gen = require.resolve('./fixtures/generator-simple/app');
});
after(() => {
afterAll(() => {
gen = undefined;
});

Expand All @@ -142,11 +142,11 @@ describe('RunContext running environment', () => {
});

describe('with lookups with packagePaths', () => {
before(() => {
beforeAll(() => {
lookups = [{ packagePaths: [path.resolve('./fixtures/generator-simple')] }];
gen = 'simple:app';
});
after(() => {
afterAll(() => {
lookups = [];
gen = undefined;
});
Expand All @@ -165,18 +165,18 @@ describe('RunContext running environment', () => {
});

describe('with lookups with npmPaths', () => {
before(() => {
beforeAll(() => {
lookups = [{ npmPaths: [path.resolve('./fixtures/')] }];
});
after(() => {
afterAll(() => {
lookups = [];
});

describe('and simple generator', () => {
before(() => {
beforeAll(() => {
gen = 'simple:app';
});
after(() => {
afterAll(() => {
gen = undefined;
});

Expand All @@ -194,10 +194,10 @@ describe('RunContext running environment', () => {
});

describe('and generator that throws', () => {
before(() => {
beforeAll(() => {
gen = 'simple:throwing';
});
after(() => {
afterAll(() => {
gen = undefined;
});

Expand All @@ -212,12 +212,12 @@ describe('RunContext running environment', () => {
});

describe('with composing generator', () => {
before(() => {
beforeAll(() => {
lookups = [{ packagePaths: [path.resolve('./fixtures/generator-simple')] }];
gen = 'simple:composing';
build = false;
});
after(() => {
afterAll(() => {
lookups = [];
gen = undefined;
build = true;
Expand Down
Loading

0 comments on commit 46d9723

Please sign in to comment.