yeoman-test 6.3.0 → 7.0.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/lib/index.js DELETED
@@ -1,345 +0,0 @@
1
- /* eslint-disable max-params */
2
-
3
- 'use strict';
4
- const {
5
- writeFile,
6
- mkdirSync,
7
- existsSync,
8
- rmdirSync,
9
- rmSync = rmdirSync
10
- } = require('fs');
11
- const _ = require('lodash');
12
- const path = require('path');
13
- const sinon = require('sinon');
14
- const adapter = require('./adapter');
15
-
16
- /**
17
- * Collection of unit test helpers. (mostly related to Mocha syntax)
18
- * @class YeomanTest
19
- */
20
-
21
- class YeomanTest {}
22
-
23
- /**
24
- * Create a function that will clean up the test directory,
25
- * cd into it, and create a dummy gruntfile inside. Intended for use
26
- * as a callback for the mocha `before` hook.
27
- *
28
- * @param {String} dir - path to the test directory
29
- * @returns {Function} mocha callback
30
- */
31
-
32
- YeomanTest.prototype.setUpTestDirectory = function (dir) {
33
- return (done) => {
34
- this.testDirectory(dir, () => {
35
- this.gruntfile({dummy: true}, done);
36
- });
37
- };
38
- };
39
-
40
- /**
41
- *
42
- * Generates a new Gruntfile.js in the current working directory based on
43
- * options hash passed in.
44
- *
45
- * @param {Object} options - Grunt configuration
46
- * @param {Function} done - callback to call on completion
47
- * @example
48
- * before(helpers.gruntfile({
49
- * foo: {
50
- * bar: '<config.baz>'
51
- * }
52
- * }));
53
- *
54
- */
55
-
56
- YeomanTest.prototype.gruntfile = function (options, done) {
57
- let config = 'grunt.initConfig(' + JSON.stringify(options, null, 2) + ');';
58
-
59
- config = config
60
- .split('\n')
61
- .map(function (line) {
62
- return ' ' + line;
63
- })
64
- .join('\n');
65
-
66
- const out = ['module.exports = function (grunt) {', config, '};'];
67
-
68
- writeFile('Gruntfile.js', out.join('\n'), done);
69
- };
70
-
71
- /**
72
- * Clean-up the test directory and cd into it.
73
- * Call given callback after entering the test directory.
74
- * @param {String} dir - path to the test directory
75
- * @param {Function} cb - callback executed after setting working directory to dir
76
- * @example
77
- * testDirectory(path.join(__dirname, './temp'), function () {
78
- * fs.writeFileSync('testfile', 'Roses are red.');
79
- * });
80
- */
81
-
82
- YeomanTest.prototype.testDirectory = function (dir, cb) {
83
- if (!dir) {
84
- throw new Error('Missing directory');
85
- }
86
-
87
- dir = path.resolve(dir);
88
-
89
- // Make sure we're not deleting CWD by moving to top level folder. As we `cd` in the
90
- // test dir after cleaning up, this shouldn't be perceivable.
91
- process.chdir('/');
92
-
93
- try {
94
- if (existsSync(dir)) {
95
- rmSync(dir, {recursive: true});
96
- }
97
-
98
- mkdirSync(dir, {recursive: true});
99
- process.chdir(dir);
100
- cb();
101
- } catch (error) {
102
- return cb(error);
103
- }
104
- };
105
-
106
- /**
107
- * Answer prompt questions for the passed-in generator
108
- * @param {Generator|Environment} generator - a Yeoman generator or environment
109
- * @param {Object} answers - an object where keys are the
110
- * generators prompt names and values are the answers to
111
- * the prompt questions
112
- * @param {Function|Object} options - Options or callback
113
- * @example
114
- * mockPrompt(angular, {'bootstrap': 'Y', 'compassBoostrap': 'Y'});
115
- */
116
-
117
- YeomanTest.prototype.mockPrompt = function (
118
- envOrGenerator,
119
- mockedAnswers,
120
- options
121
- ) {
122
- envOrGenerator = envOrGenerator.env || envOrGenerator;
123
- const {promptModule} = envOrGenerator.adapter;
124
- const {DummyPrompt} = adapter;
125
-
126
- Object.keys(promptModule.prompts).forEach(function (name) {
127
- promptModule.registerPrompt(
128
- name,
129
- class CustomDummyPrompt extends DummyPrompt {
130
- constructor(question, rl, answers) {
131
- super(mockedAnswers, options, question, rl, answers);
132
- }
133
- }
134
- );
135
- });
136
- };
137
-
138
- /**
139
- * Restore defaults prompts on a generator.
140
- * @param {Generator|Environment} generator or environment
141
- */
142
- YeomanTest.prototype.restorePrompt = function (envOrGenerator) {
143
- envOrGenerator = envOrGenerator.env || envOrGenerator;
144
- envOrGenerator.adapter.promptModule.restoreDefaultPrompts();
145
- };
146
-
147
- /**
148
- * Provide mocked values to the config
149
- * @param {Generator} generator - a Yeoman generator
150
- * @param {Object} localConfig - localConfig - should look just like if called config.getAll()
151
- */
152
- YeomanTest.prototype.mockLocalConfig = function (generator, localConfig) {
153
- generator.config.defaults(localConfig);
154
- };
155
-
156
- /**
157
- * Create a mocked generator
158
- */
159
-
160
- YeomanTest.prototype.createMockedGenerator = (
161
- Generator = class MockedGenerator extends require('yeoman-generator') {}
162
- ) => {
163
- const generator = sinon.spy(Generator);
164
- ['run', 'queueTasks', 'runWithOptions', 'queueOwnTasks'].forEach(
165
- (methodName) => {
166
- if (Generator.prototype[methodName]) {
167
- generator.prototype[methodName] = sinon.stub();
168
- }
169
- }
170
- );
171
- return generator;
172
- };
173
-
174
- /**
175
- * Create a simple, dummy generator
176
- */
177
-
178
- YeomanTest.prototype.createDummyGenerator = (
179
- Generator = require('yeoman-generator')
180
- ) =>
181
- class extends Generator {
182
- test() {
183
- this.shouldRun = true;
184
- }
185
- };
186
-
187
- /**
188
- * Create a generator, using the given dependencies and controller arguments
189
- * Dependecies can be path (autodiscovery) or an array [{generator}, {name}]
190
- *
191
- * @param {String} name - the name of the generator
192
- * @param {Array} dependencies - paths to the generators dependencies
193
- * @param {Array|String} args - arguments to the generator;
194
- * if String, will be split on spaces to create an Array
195
- * @param {Object} options - configuration for the generator
196
- * @param {Boolean} [localConfigOnly=true] - passes localConfigOnly to the generators
197
- * @example
198
- * var deps = ['../../app',
199
- * '../../common',
200
- * '../../controller',
201
- * '../../main',
202
- * [createDummyGenerator(), 'testacular:app']
203
- * ];
204
- * var angular = createGenerator('angular:app', deps);
205
- */
206
-
207
- YeomanTest.prototype.createGenerator = function (
208
- name,
209
- dependencies,
210
- args,
211
- options,
212
- localConfigOnly = true
213
- ) {
214
- const env = this.createEnv([], {sharedOptions: {localConfigOnly}});
215
- this.registerDependencies(env, dependencies);
216
-
217
- return env.create(name, {arguments: args, options});
218
- };
219
-
220
- /**
221
- * Register a list of dependent generators into the provided env.
222
- * Dependecies can be path (autodiscovery) or an array [{generator}, {name}]
223
- *
224
- * @param {Array} dependencies - paths to the generators dependencies
225
- */
226
-
227
- YeomanTest.prototype.registerDependencies = function (env, dependencies) {
228
- dependencies.forEach(function (dependency) {
229
- if (Array.isArray(dependency)) {
230
- env.registerStub(...dependency);
231
- } else {
232
- env.register(dependency);
233
- }
234
- });
235
- };
236
-
237
- /**
238
- * Shortcut to the Environment's createEnv.
239
- *
240
- * @param {...any} args - environment constructor arguments.
241
- * @returns {Object} environment instance
242
- *
243
- * Use to test with specific Environment version:
244
- * let createEnv;
245
- * before(() => {
246
- * createEnv = stub(helper, 'createEnv').callsFake(Environment.creatEnv);
247
- * });
248
- * after(() => {
249
- * createEnv.restore();
250
- * });
251
- */
252
-
253
- YeomanTest.prototype.createEnv = (...args) => {
254
- return require('yeoman-environment').createEnv(...args);
255
- };
256
-
257
- /**
258
- * Creates a test environment.
259
- *
260
- * @param {Function} envContructor - environment constructor method.
261
- * @param {Object} [options] - Options to be passed to the environment
262
- * @returns {Object} environment instance
263
- * const env = createTestEnv(require('yeoman-environment').createEnv);
264
- */
265
-
266
- YeomanTest.prototype.createTestEnv = function (
267
- envContructor = this.createEnv,
268
- options = {localConfigOnly: true}
269
- ) {
270
- const envOptions = _.cloneDeep(this.environmentOptions || {});
271
- if (typeof options === 'boolean') {
272
- options = {
273
- newErrorHandler: true,
274
- ...envOptions,
275
- sharedOptions: {
276
- localConfigOnly: options,
277
- ...envOptions.sharedOptions
278
- }
279
- };
280
- } else {
281
- options = {
282
- newErrorHandler: true,
283
- ...envOptions,
284
- ...options
285
- };
286
- options.sharedOptions = {
287
- localConfigOnly: true,
288
- ...envOptions.sharedOptions,
289
- ...options.sharedOptions
290
- };
291
- }
292
-
293
- return envContructor([], options, new adapter.TestAdapter());
294
- };
295
-
296
- /**
297
- * Run the provided Generator
298
- * @param {String|Function} GeneratorOrNamespace - Generator constructor or namespace
299
- * @return {RunContext}
300
- */
301
-
302
- YeomanTest.prototype.run = function (
303
- GeneratorOrNamespace,
304
- settings,
305
- envOptions
306
- ) {
307
- const RunContext = require('./run-context');
308
- const contextSettings = _.cloneDeep(this.settings || {});
309
- const generatorOptions = _.cloneDeep(this.generatorOptions || {});
310
- return new RunContext(
311
- GeneratorOrNamespace,
312
- {...contextSettings, ...settings},
313
- envOptions,
314
- this
315
- ).withOptions(generatorOptions);
316
- };
317
-
318
- /**
319
- * Prepare a run context
320
- * @param {String|Function} GeneratorOrNamespace - Generator constructor or namespace
321
- * @return {RunContext}
322
- */
323
-
324
- YeomanTest.prototype.create = function (
325
- GeneratorOrNamespace,
326
- settings,
327
- envOptions
328
- ) {
329
- return this.run(
330
- GeneratorOrNamespace,
331
- {...settings, runEnvironment: true},
332
- envOptions
333
- );
334
- };
335
-
336
- const helpers = new YeomanTest();
337
- helpers.YeomanTest = YeomanTest;
338
-
339
- module.exports = helpers;
340
-
341
- helpers.createHelpers = (options) => {
342
- const helpers = new YeomanTest();
343
- Object.assign(helpers, options);
344
- return helpers;
345
- };