From e5ed1efca4bd8a29356450b467b82f31d69e6edc Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Tue, 29 Dec 2015 18:14:11 -0500 Subject: [PATCH 01/10] Update test helpers --- package.json | 4 +++- test/test-appname-substitution.js | 12 +++++++----- test/test-apppath.js | 13 +++++++------ test/test-file-creation.js | 15 ++++++++------- test/test-load.js | 2 +- test/test-route-creation.js | 9 +++++---- 6 files changed, 31 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 57d2dd5a0..fe13f702e 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,9 @@ "grunt-conventional-github-releaser": "^0.5.0", "load-grunt-tasks": "^3.1.0", "mocha": "*", - "underscore.string": "^3.0.3" + "underscore.string": "^3.0.3", + "yeoman-assert": "^2.1.1", + "yeoman-test": "^1.0.0" }, "engines": { "node": ">=0.10.0" diff --git a/test/test-appname-substitution.js b/test/test-appname-substitution.js index 3a5820ece..e4212cbe0 100644 --- a/test/test-appname-substitution.js +++ b/test/test-appname-substitution.js @@ -2,6 +2,8 @@ var path = require('path'); var helpers = require('yeoman-generator').test; +var assert = require('yeoman-assert'); + describe('Angular generator template', function () { var angular; @@ -40,27 +42,27 @@ describe('Angular generator template', function () { it('should generate the same appName in every file', function (done) { angular.run({}, function () { - helpers.assertFile([ + assert.file([ 'app/scripts/app.js', 'app/scripts/controllers/main.js', 'app/index.html', 'test/spec/controllers/main.js' ]); - helpers.assertFileContent( + assert.fileContent( 'app/scripts/app.js', new RegExp('module\\(\'' + appName + 'App\'') ); - helpers.assertFileContent( + assert.fileContent( 'app/scripts/controllers/main.js', new RegExp('module\\(\'' + appName + 'App\'') ); - helpers.assertFileContent( + assert.fileContent( 'test/spec/controllers/main.js', new RegExp('module\\(\'' + appName + 'App\'') ); - helpers.assertFileContent( + assert.fileContent( 'app/index.html', new RegExp('ng-app=\"' + appName + 'App\"') ); diff --git a/test/test-apppath.js b/test/test-apppath.js index e71e9dc6a..153bca5c4 100644 --- a/test/test-apppath.js +++ b/test/test-apppath.js @@ -2,6 +2,7 @@ var path = require('path'); var helpers = require('yeoman-generator').test; +var assert = require('yeoman-assert'); var _ = require('underscore.string'); describe('Angular generator appPath option', function () { @@ -62,14 +63,14 @@ describe('Angular generator appPath option', function () { describe('App files', function () { it('should generate dotfiles for apppath', function (done) { angular.run({}, function () { - helpers.assertFile(expected); + assert.file(expected); done(); }); }); it('creates expected JS files', function (done) { angular.run({}, function() { - helpers.assertFile([].concat(expected, [ + assert.file([].concat(expected, [ '.jscsrc', appPath + '/scripts/app.js', appPath + '/scripts/controllers/main.js', @@ -82,7 +83,7 @@ describe('Angular generator appPath option', function () { it('creates CoffeeScript files', function (done) { angular.env.options.coffee = true; angular.run([], function () { - helpers.assertFile([].concat(expected, [ + assert.file([].concat(expected, [ appPath + '/scripts/app.coffee', appPath + '/scripts/controllers/main.coffee', 'test/spec/controllers/main.coffee' @@ -101,7 +102,7 @@ describe('Angular generator appPath option', function () { angular.run([], function () { angularGenerator.run([], function () { - helpers.assertFileContent([ + assert.fileContent([ [ path.join(appPath + '/scripts', targetDirectory, name + '.js'), new RegExp( @@ -147,7 +148,7 @@ describe('Angular generator appPath option', function () { helpers.mockPrompt(angular, mockPrompts); angular.run([], function () { angularView.run([], function () { - helpers.assertFile([appPath + '/views/foo.html']); + assert.file([appPath + '/views/foo.html']); done(); }); }); @@ -161,7 +162,7 @@ describe('Angular generator appPath option', function () { helpers.mockPrompt(angular, mockPrompts); angular.run([], function () { angularView.run([], function () { - helpers.assertFile([appPath + '/views/foo/bar.html']); + assert.file([appPath + '/views/foo/bar.html']); done(); }); }); diff --git a/test/test-file-creation.js b/test/test-file-creation.js index 2a6e9e8ea..64b32bdb0 100644 --- a/test/test-file-creation.js +++ b/test/test-file-creation.js @@ -2,6 +2,7 @@ var path = require('path'); var helpers = require('yeoman-generator').test; +var assert = require('yeoman-assert'); var _ = require('underscore.string'); describe('Angular generator file creation', function () { @@ -60,14 +61,14 @@ describe('Angular generator file creation', function () { describe('App files', function () { it('should generate dotfiles', function (done) { angular.run({}, function () { - helpers.assertFile(expected); + assert.file(expected); done(); }); }); it('creates expected JS files', function (done) { angular.run({}, function() { - helpers.assertFile([].concat(expected, [ + assert.file([].concat(expected, [ '.jscsrc', 'app/scripts/app.js', 'app/scripts/controllers/main.js', @@ -80,7 +81,7 @@ describe('Angular generator file creation', function () { it('creates CoffeeScript files', function (done) { angular.env.options.coffee = true; angular.run([], function () { - helpers.assertFile([].concat(expected, [ + assert.file([].concat(expected, [ 'app/scripts/app.coffee', 'app/scripts/controllers/main.coffee', 'test/spec/controllers/main.coffee' @@ -98,7 +99,7 @@ describe('Angular generator file creation', function () { angular.run([], function () { genTester.run([], function () { - helpers.assertFileContent([ + assert.fileContent([ [ path.join('app/scripts', targetDirectory, name + '.js'), new RegExp( @@ -166,7 +167,7 @@ describe('Angular generator file creation', function () { angular.env.options.typescript = true; angular.run([], function () { - helpers.assertFiles(expected); + assert.file(expected); done(); }); }); @@ -180,7 +181,7 @@ describe('Angular generator file creation', function () { helpers.mockPrompt(angularView, mockPrompts); angularView.run([], function () { - helpers.assertFile(['app/views/foo.html']); + assert.file(['app/views/foo.html']); done(); }); }); @@ -192,7 +193,7 @@ describe('Angular generator file creation', function () { helpers.mockPrompt(angularView, mockPrompts); angularView.run([], function () { - helpers.assertFile(['app/views/foo/bar.html']); + assert.file(['app/views/foo/bar.html']); done(); }); }); diff --git a/test/test-load.js b/test/test-load.js index 22dd67ad1..b9afa13cf 100644 --- a/test/test-load.js +++ b/test/test-load.js @@ -1,6 +1,6 @@ 'use strict'; -var assert = require('yeoman-generator').assert; +var assert = require('assert'); describe('Angular-Module generator load test', function () { it('can be imported without blowing up', function () { diff --git a/test/test-route-creation.js b/test/test-route-creation.js index 74b87bba3..cded2d6a9 100644 --- a/test/test-route-creation.js +++ b/test/test-route-creation.js @@ -2,6 +2,7 @@ var path = require('path'); var helpers = require('yeoman-generator').test; +var assert = require('yeoman-assert'); describe('Angular generator route', function () { var angular; @@ -64,8 +65,8 @@ describe('Angular generator route', function () { describe('create routes', function () { it('should generate default route items', function(done){ angular.run({}, function(e) { - helpers.assertFile(expected); - helpers.assertFileContent( + assert.file(expected); + assert.fileContent( 'app/scripts/app.js', new RegExp('when\\(\'/' + route + '\'') ); @@ -80,8 +81,8 @@ describe('Angular generator route', function () { angular.options.uri = uri; angular.run({}, function() { - helpers.assertFile(expected); - helpers.assertFileContent( + assert.file(expected); + assert.fileContent( 'app/scripts/app.js', new RegExp('when\\(\'/' + uri + '\'') ); From 6bc529210d36d44f461d0ea35945e341773fbf8b Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Tue, 29 Dec 2015 22:08:00 -0500 Subject: [PATCH 02/10] Update route tests to latest yeoman style --- test/test-route-creation.js | 142 +++++++++++++++++------------------- 1 file changed, 66 insertions(+), 76 deletions(-) diff --git a/test/test-route-creation.js b/test/test-route-creation.js index cded2d6a9..b7c4b84f6 100644 --- a/test/test-route-creation.js +++ b/test/test-route-creation.js @@ -1,94 +1,84 @@ 'use strict'; var path = require('path'); -var helpers = require('yeoman-generator').test; +var helpers = require('yeoman-test'); var assert = require('yeoman-assert'); -describe('Angular generator route', function () { - var angular; - var route = 'simpleroute'; - var expected = [ - 'app/scripts/controllers/' + route + '.js', - 'test/spec/controllers/' + route + '.js', - 'app/views/' + route + '.html' - ]; - var genOptions = { - 'appPath': 'app', - 'skip-install': true, - 'skip-welcome-message': true, - 'skip-message': true - }; - var mockPrompts = { - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: ['routeModule'] - }; +function generateFullProject(cb) { + helpers.run(require.resolve('../app')) + .withGenerators([ + require.resolve('../common'), + require.resolve('../controller'), + require.resolve('../main'), + require.resolve('../route'), + require.resolve('../view'), + [ helpers.createDummyGenerator(), 'karma:app'] + ]) + .withOptions({ + 'appPath': 'app', + 'skip-welcome-message': true, + 'skip-message': true + }) + .withPrompts({ + compass: true, + bootstrap: true, + compassBootstrap: true, + modules: ['routeModule'] + }) + .on('end', cb); +} +describe('angular:route', function () { beforeEach(function (done) { - helpers.testDirectory(path.join(__dirname, 'tmp', route), function (err) { - if (err) { - done(err); - } - angular = helpers.createGenerator( - 'angular:app', - [ - '../../../app', - '../../../common', - '../../../controller', - '../../../main', - '../../../route', - '../../../view', - [ helpers.createDummyGenerator(), 'karma:app'] - ], - false, - genOptions - ); - helpers.mockPrompt(angular, mockPrompts); - angular.run({}, function () { - angular = helpers.createGenerator( - 'angular:route', - [ - '../../../controller', - '../../../route', - '../../../view' - ], - [route], - genOptions - ); - helpers.mockPrompt(angular, mockPrompts); - done(); - }); - }); - }); + generateFullProject(function () { + this.angularRoute = helpers.run(require.resolve('../route')) + .withGenerators([ + require.resolve('../controller'), + require.resolve('../view') + ]) + .withOptions({ + appPath: 'app' + }) + .withArguments(['simpleroute']); - describe('create routes', function () { - it('should generate default route items', function(done){ - angular.run({}, function(e) { - assert.file(expected); - assert.fileContent( - 'app/scripts/app.js', - new RegExp('when\\(\'/' + route + '\'') - ); + // Hack to not clear the directory + this.angularRoute.inDirSet = true; - done(); - }); - }); + done(); + }.bind(this)); + }); - // Test with URI specified explicitly - it('should generate route items with the route uri given', function(done){ - var uri = 'segment1/segment2/:parameter'; + it('generates default route items', function (done) { + this.angularRoute.on('end', function () { + assert.file([ + 'app/scripts/controllers/simpleroute.js', + 'test/spec/controllers/simpleroute.js', + 'app/views/simpleroute.html' + ]); + assert.fileContent( + 'app/scripts/app.js', + /when\('\/simpleroute'/ + ); + done(); + }); + }); - angular.options.uri = uri; - angular.run({}, function() { - assert.file(expected); + it('generates route items with the route uri given', function (done) { + this.angularRoute + .withOptions({ + uri: 'segment1/segment2/:parameter' + }) + .on('end', function () { + assert.file([ + 'app/scripts/controllers/simpleroute.js', + 'test/spec/controllers/simpleroute.js', + 'app/views/simpleroute.html' + ]); assert.fileContent( 'app/scripts/app.js', - new RegExp('when\\(\'/' + uri + '\'') + /when\('\/segment1\/segment2\/\:parameter'/ ); - done(); }); - }); }); }); From 5e1bf4c641f98a890ec284dbcee71eea61584462 Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Wed, 30 Dec 2015 02:20:48 -0500 Subject: [PATCH 03/10] Refactor appname substitution test --- test/app-with-appname.js | 59 +++++++++++++++++++ test/{test-route-creation.js => route.js} | 0 test/test-appname-substitution.js | 72 ----------------------- 3 files changed, 59 insertions(+), 72 deletions(-) create mode 100644 test/app-with-appname.js rename test/{test-route-creation.js => route.js} (100%) delete mode 100644 test/test-appname-substitution.js diff --git a/test/app-with-appname.js b/test/app-with-appname.js new file mode 100644 index 000000000..7343488d7 --- /dev/null +++ b/test/app-with-appname.js @@ -0,0 +1,59 @@ +'use strict'; + +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + + +describe('angular:app appName', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../app')) + .withGenerators([ + require.resolve('../common'), + require.resolve('../controller'), + require.resolve('../main'), + [helpers.createDummyGenerator(), 'karma:app'] + ]) + .withOptions({ + 'appPath': 'app', + 'skip-welcome-message': true, + 'skip-message': true + }) + .withArguments(['upperCaseBug']) + .withPrompts({ + compass: true, + bootstrap: true, + compassBootstrap: true, + modules: [] + }) + .on('end', done); + }); + + it('generates the same appName in every file', function () { + assert.file([ + 'app/scripts/app.js', + 'app/scripts/controllers/main.js', + 'app/index.html', + 'test/spec/controllers/main.js' + ]); + + assert.fileContent( + 'app/scripts/app.js', + /module\('upperCaseBugApp'/ + ); + assert.fileContent( + 'app/scripts/controllers/main.js', + /module\('upperCaseBugApp'/ + ); + assert.fileContent( + 'test/spec/controllers/main.js', + /module\('upperCaseBugApp'/ + ); + + assert.fileContent( + 'app/index.html', + /ng-app="upperCaseBugApp"/ + ); + }); +}); diff --git a/test/test-route-creation.js b/test/route.js similarity index 100% rename from test/test-route-creation.js rename to test/route.js diff --git a/test/test-appname-substitution.js b/test/test-appname-substitution.js deleted file mode 100644 index e4212cbe0..000000000 --- a/test/test-appname-substitution.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -var path = require('path'); -var helpers = require('yeoman-generator').test; -var assert = require('yeoman-assert'); - - -describe('Angular generator template', function () { - var angular; - var appName = 'upperCaseBug'; - - beforeEach(function (done) { - var deps = [ - '../../../app', - '../../../common', - '../../../controller', - '../../../main', - [ helpers.createDummyGenerator(), 'karma:app' ] - ]; - helpers.testDirectory(path.join(__dirname, 'tmp', appName), function (err) { - if (err) { - done(err); - } - - angular = helpers.createGenerator('angular:app', deps, [appName], { - 'appPath': 'app', - 'skip-welcome-message': true, - 'skip-install': true, - 'skip-message': true - }); - - helpers.mockPrompt(angular, { - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: [] - }); - - done(); - }); - }); - - it('should generate the same appName in every file', function (done) { - angular.run({}, function () { - assert.file([ - 'app/scripts/app.js', - 'app/scripts/controllers/main.js', - 'app/index.html', - 'test/spec/controllers/main.js' - ]); - - assert.fileContent( - 'app/scripts/app.js', - new RegExp('module\\(\'' + appName + 'App\'') - ); - assert.fileContent( - 'app/scripts/controllers/main.js', - new RegExp('module\\(\'' + appName + 'App\'') - ); - assert.fileContent( - 'test/spec/controllers/main.js', - new RegExp('module\\(\'' + appName + 'App\'') - ); - - assert.fileContent( - 'app/index.html', - new RegExp('ng-app=\"' + appName + 'App\"') - ); - done(); - }); - }); -}); From f3fd17e94b6a787073d53a0be6931a0c1a3a1d26 Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Wed, 30 Dec 2015 03:00:23 -0500 Subject: [PATCH 04/10] Split up test for subgenerators in their own files --- test/app-with-appname.js | 1 - test/app-with-apppath.js | 83 +++++++++++++++++++ test/constant.js | 22 +++++ test/controller.js | 28 +++++++ test/directive.js | 28 +++++++ test/factory.js | 22 +++++ test/filter.js | 28 +++++++ test/provider.js | 22 +++++ test/route.js | 57 +++++-------- test/service.js | 28 +++++++ test/test-apppath.js | 171 --------------------------------------- test/utils.js | 25 ++++++ test/value.js | 22 +++++ test/view.js | 37 +++++++++ 14 files changed, 364 insertions(+), 210 deletions(-) create mode 100644 test/app-with-apppath.js create mode 100644 test/constant.js create mode 100644 test/controller.js create mode 100644 test/directive.js create mode 100644 test/factory.js create mode 100644 test/filter.js create mode 100644 test/provider.js create mode 100644 test/service.js delete mode 100644 test/test-apppath.js create mode 100644 test/utils.js create mode 100644 test/value.js create mode 100644 test/view.js diff --git a/test/app-with-appname.js b/test/app-with-appname.js index 7343488d7..158f338f8 100644 --- a/test/app-with-appname.js +++ b/test/app-with-appname.js @@ -4,7 +4,6 @@ var path = require('path'); var helpers = require('yeoman-test'); var assert = require('yeoman-assert'); - describe('angular:app appName', function () { beforeEach(function (done) { helpers diff --git a/test/app-with-apppath.js b/test/app-with-apppath.js new file mode 100644 index 000000000..c10f9e927 --- /dev/null +++ b/test/app-with-apppath.js @@ -0,0 +1,83 @@ +'use strict'; + +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); +var _ = require('underscore.string'); + +describe('Angular generator appPath option', function () { + var appPath = 'customAppPath'; + var expected = [ + appPath + '/404.html', + appPath + '/favicon.ico', + appPath + '/robots.txt', + appPath + '/styles/main.scss', + appPath + '/views/main.html', + appPath + '/index.html', + '.bowerrc', + '.editorconfig', + '.gitignore', + '.jshintrc', + 'Gruntfile.js', + 'package.json', + 'bower.json' + ]; + + beforeEach(function () { + this.angular = helpers + .run(require.resolve('../app')) + .withGenerators([ + require.resolve('../common'), + require.resolve('../controller'), + require.resolve('../main'), + [helpers.createDummyGenerator(), 'karma:app'] + ]) + .withOptions({ + 'appPath': appPath, + 'skip-welcome-message': true, + 'skip-message': true + }) + .withArguments(['upperCaseBug']) + .withPrompts({ + compass: true, + bootstrap: true, + compassBootstrap: true, + modules: [] + }); + }); + + describe('default settings', function () { + beforeEach(function (done) { + this.angular.on('end', done); + }); + + it('generates base files inside the appPath', function () { + assert.file(expected); + }); + + it('creates JS files in appPath', function () { + assert.file([ + '.jscsrc', + appPath + '/scripts/app.js', + appPath + '/scripts/controllers/main.js', + 'test/spec/controllers/main.js' + ]); + }); + }); + + describe('--coffee', function () { + beforeEach(function (done) { + this.angular.withOptions({ + coffee: true + }).on('end', done); + }); + + it('creates CoffeeScript files', function () { + assert.file([].concat(expected, [ + appPath + '/scripts/app.coffee', + appPath + '/scripts/controllers/main.coffee', + 'test/spec/controllers/main.coffee' + ])); + }); + }); +}); diff --git a/test/constant.js b/test/constant.js new file mode 100644 index 000000000..5ece658f2 --- /dev/null +++ b/test/constant.js @@ -0,0 +1,22 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:constant', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../constant')) + .withArguments('foo') + .on('end', done); + }); + + it('generates a new constant', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /constant\('foo'/ + ); + }); +}); diff --git a/test/controller.js b/test/controller.js new file mode 100644 index 000000000..13ca026fb --- /dev/null +++ b/test/controller.js @@ -0,0 +1,28 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:controller', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../controller')) + .withArguments('foo') + .inTmpDir(function (dir) { + fs.writeFileSync( + path.join(dir, 'bower.json'), + '{"appPath": "app"}' + ); + }) + .on('end', done); + }); + + it('generates a new controller', function () { + assert.file('test/spec/controllers/foo.js'); + assert.fileContent( + path.join('app/scripts/controllers/foo.js'), + /controller\('FooCtrl'/ + ); + }); +}); diff --git a/test/directive.js b/test/directive.js new file mode 100644 index 000000000..c11585354 --- /dev/null +++ b/test/directive.js @@ -0,0 +1,28 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:directive', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../directive')) + .withArguments('foo') + .inTmpDir(function (dir) { + fs.writeFileSync( + path.join(dir, 'bower.json'), + '{"appPath": "app"}' + ); + }) + .on('end', done); + }); + + it('generates a new directive', function () { + assert.file('test/spec/directives/foo.js'); + assert.fileContent( + path.join('app/scripts/directives/foo.js'), + /directive\('foo'/ + ); + }); +}); diff --git a/test/factory.js b/test/factory.js new file mode 100644 index 000000000..56a131fdd --- /dev/null +++ b/test/factory.js @@ -0,0 +1,22 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:factory', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../factory')) + .withArguments('foo') + .on('end', done); + }); + + it('generates a new factory', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /factory\('foo'/ + ); + }); +}); diff --git a/test/filter.js b/test/filter.js new file mode 100644 index 000000000..ad92eec09 --- /dev/null +++ b/test/filter.js @@ -0,0 +1,28 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:filter', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../filter')) + .withArguments('foo') + .inTmpDir(function (dir) { + fs.writeFileSync( + path.join(dir, 'bower.json'), + '{"appPath": "app"}' + ); + }) + .on('end', done); + }); + + it('generates a new filter', function () { + assert.file('test/spec/filters/foo.js'); + assert.fileContent( + path.join('app/scripts/filters/foo.js'), + /filter\('foo'/ + ); + }); +}); diff --git a/test/provider.js b/test/provider.js new file mode 100644 index 000000000..0b8f66033 --- /dev/null +++ b/test/provider.js @@ -0,0 +1,22 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:provider', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../provider')) + .withArguments('foo') + .on('end', done); + }); + + it('generates a new provider', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /provider\('foo'/ + ); + }); +}); diff --git a/test/route.js b/test/route.js index b7c4b84f6..76609328a 100644 --- a/test/route.js +++ b/test/route.js @@ -3,49 +3,30 @@ var path = require('path'); var helpers = require('yeoman-test'); var assert = require('yeoman-assert'); - -function generateFullProject(cb) { - helpers.run(require.resolve('../app')) - .withGenerators([ - require.resolve('../common'), - require.resolve('../controller'), - require.resolve('../main'), - require.resolve('../route'), - require.resolve('../view'), - [ helpers.createDummyGenerator(), 'karma:app'] - ]) - .withOptions({ - 'appPath': 'app', - 'skip-welcome-message': true, - 'skip-message': true - }) - .withPrompts({ - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: ['routeModule'] - }) - .on('end', cb); -} +var generateFullProject = require('./utils').generateFullProject; describe('angular:route', function () { beforeEach(function (done) { - generateFullProject(function () { - this.angularRoute = helpers.run(require.resolve('../route')) - .withGenerators([ - require.resolve('../controller'), - require.resolve('../view') - ]) - .withOptions({ - appPath: 'app' - }) - .withArguments(['simpleroute']); + generateFullProject() + .withPrompts({ + modules: ['routeModule'] + }) + .on('end', function () { + this.angularRoute = helpers.run(require.resolve('../route')) + .withGenerators([ + require.resolve('../controller'), + require.resolve('../view') + ]) + .withOptions({ + appPath: 'app' + }) + .withArguments(['simpleroute']); - // Hack to not clear the directory - this.angularRoute.inDirSet = true; + // Hack to not clear the directory + this.angularRoute.inDirSet = true; - done(); - }.bind(this)); + done(); + }.bind(this)); }); it('generates default route items', function (done) { diff --git a/test/service.js b/test/service.js new file mode 100644 index 000000000..1ddcd40a8 --- /dev/null +++ b/test/service.js @@ -0,0 +1,28 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:service', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../service')) + .withArguments('foo') + .inTmpDir(function (dir) { + fs.writeFileSync( + path.join(dir, 'bower.json'), + '{"appPath": "app"}' + ); + }) + .on('end', done); + }); + + it('generates a new service', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /service\('foo'/ + ); + }); +}); diff --git a/test/test-apppath.js b/test/test-apppath.js deleted file mode 100644 index 153bca5c4..000000000 --- a/test/test-apppath.js +++ /dev/null @@ -1,171 +0,0 @@ -'use strict'; - -var path = require('path'); -var helpers = require('yeoman-generator').test; -var assert = require('yeoman-assert'); -var _ = require('underscore.string'); - -describe('Angular generator appPath option', function () { - var angular; - var appPath = 'customAppPath'; - var expected = [ - appPath + '/404.html', - appPath + '/favicon.ico', - appPath + '/robots.txt', - appPath + '/styles/main.scss', - appPath + '/views/main.html', - appPath + '/index.html', - '.bowerrc', - '.editorconfig', - '.gitignore', - '.jshintrc', - 'Gruntfile.js', - 'package.json', - 'bower.json' - ]; - var mockPrompts = { - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: [] - }; - var genOptions = { - 'appPath': appPath, - 'skip-install': true, - 'skip-welcome-message': true, - 'skip-message': true - }; - - beforeEach(function (done) { - helpers.testDirectory(path.join(__dirname, 'tmp', 'app'), function (err) { - if (err) { - done(err); - } - - angular = helpers.createGenerator( - 'angular:app', - [ - '../../../app', - '../../../common', - '../../../controller', - '../../../main', - [ helpers.createDummyGenerator(), 'karma:app' ] - ], - false, - genOptions - ); - helpers.mockPrompt(angular, mockPrompts); - - done(); - }); - }); - - describe('App files', function () { - it('should generate dotfiles for apppath', function (done) { - angular.run({}, function () { - assert.file(expected); - done(); - }); - }); - - it('creates expected JS files', function (done) { - angular.run({}, function() { - assert.file([].concat(expected, [ - '.jscsrc', - appPath + '/scripts/app.js', - appPath + '/scripts/controllers/main.js', - 'test/spec/controllers/main.js' - ])); - done(); - }); - }); - - it('creates CoffeeScript files', function (done) { - angular.env.options.coffee = true; - angular.run([], function () { - assert.file([].concat(expected, [ - appPath + '/scripts/app.coffee', - appPath + '/scripts/controllers/main.coffee', - 'test/spec/controllers/main.coffee' - ])); - done(); - }); - }); - }); - - describe('Service Subgenerators', function () { - var generatorTest = function (generatorType, specType, targetDirectory, scriptNameFn, specNameFn, suffix, done) { - var angularGenerator; - var name = 'foo'; - var deps = [path.join('../../..', generatorType)]; - angularGenerator = helpers.createGenerator('angular:' + generatorType, deps, [name], genOptions); - - angular.run([], function () { - angularGenerator.run([], function () { - assert.fileContent([ - [ - path.join(appPath + '/scripts', targetDirectory, name + '.js'), - new RegExp( - generatorType + '\\(\'' + scriptNameFn(name) + suffix + '\'', - 'g' - ) - ] - ]); - done(); - }); - }); - }; - - it('should generate a new controller', function (done) { - generatorTest('controller', 'controller', 'controllers', _.classify, _.classify, 'Ctrl', done); - }); - - it('should generate a new directive', function (done) { - generatorTest('directive', 'directive', 'directives', _.camelize, _.camelize, '', done); - }); - - it('should generate a new filter', function (done) { - generatorTest('filter', 'filter', 'filters', _.camelize, _.camelize, '', done); - }); - - ['constant', 'factory', 'provider', 'value'].forEach(function(t) { - it('should generate a new ' + t, function (done) { - generatorTest(t, 'service', 'services', _.camelize, _.camelize, '', done); - }); - }); - - it('should generate a new service', function (done) { - generatorTest('service', 'service', 'services', _.capitalize, _.capitalize, '', done); - }); - }); - - describe('View', function () { - it('should generate a new view', function (done) { - var angularView; - var deps = [ '../../../view' ]; - angularView = helpers.createGenerator('angular:view', deps, ['foo'], genOptions); - - helpers.mockPrompt(angular, mockPrompts); - angular.run([], function () { - angularView.run([], function () { - assert.file([appPath + '/views/foo.html']); - done(); - }); - }); - }); - - it('should generate a new view in subdirectories', function (done) { - var angularView; - var deps = [ '../../../view' ]; - angularView = helpers.createGenerator('angular:view', deps, ['foo/bar'], genOptions); - - helpers.mockPrompt(angular, mockPrompts); - angular.run([], function () { - angularView.run([], function () { - assert.file([appPath + '/views/foo/bar.html']); - done(); - }); - }); - }); - }); -}); diff --git a/test/utils.js b/test/utils.js new file mode 100644 index 000000000..6c8d1e361 --- /dev/null +++ b/test/utils.js @@ -0,0 +1,25 @@ +'use strict'; +var helpers = require('yeoman-test'); + +exports.generateFullProject = function (cb) { + return helpers.run(require.resolve('../app')) + .withGenerators([ + require.resolve('../common'), + require.resolve('../controller'), + require.resolve('../main'), + require.resolve('../route'), + require.resolve('../view'), + [helpers.createDummyGenerator(), 'karma:app'] + ]) + .withOptions({ + 'appPath': 'app', + 'skip-welcome-message': true, + 'skip-message': true + }) + .withPrompts({ + compass: true, + bootstrap: true, + compassBootstrap: true, + modules: [] + }); +} diff --git a/test/value.js b/test/value.js new file mode 100644 index 000000000..2d4b6d760 --- /dev/null +++ b/test/value.js @@ -0,0 +1,22 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:value', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../value')) + .withArguments('foo') + .on('end', done); + }); + + it('generates a new value', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /value\('foo'/ + ); + }); +}); diff --git a/test/view.js b/test/view.js new file mode 100644 index 000000000..1f0c1434d --- /dev/null +++ b/test/view.js @@ -0,0 +1,37 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:constant', function () { + beforeEach(function () { + this.angularView = helpers + .run(require.resolve('../view')) + .withArguments('foo/bar'); + }); + + describe('default settings', function () { + beforeEach(function (done) { + this.angularView.on('end', done); + }); + + it('generates a new view', function () { + assert.file('app/views/foo/bar.html'); + }); + }); + + describe('--appPath', function () { + beforeEach(function (done) { + this.angularView + .withOptions({ + appPath: 'alternative' + }) + .on('end', done); + }); + + it('generates a new view', function () { + assert.file('alternative/views/foo/bar.html'); + }); + }); +}); From e4127d9b8bf41759d2ed925b900ef603a14648ba Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Wed, 30 Dec 2015 03:01:01 -0500 Subject: [PATCH 05/10] Remove useless test-load.js --- test/test-load.js | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 test/test-load.js diff --git a/test/test-load.js b/test/test-load.js deleted file mode 100644 index b9afa13cf..000000000 --- a/test/test-load.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var assert = require('assert'); - -describe('Angular-Module generator load test', function () { - it('can be imported without blowing up', function () { - assert(require('../app') !== undefined); - assert(require('../common') !== undefined); - assert(require('../constant') !== undefined); - assert(require('../controller') !== undefined); - assert(require('../decorator') !== undefined); - assert(require('../directive') !== undefined); - assert(require('../factory') !== undefined); - assert(require('../filter') !== undefined); - assert(require('../main') !== undefined); - assert(require('../provider') !== undefined); - assert(require('../route') !== undefined); - assert(require('../service') !== undefined); - assert(require('../value') !== undefined); - assert(require('../view') !== undefined); - }); -}); From f4cb5f794bb9303719e3321528f147eacb0093ea Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Wed, 30 Dec 2015 03:23:07 -0500 Subject: [PATCH 06/10] Combine and refactor angular:app tests --- test/app-with-appname.js | 58 ----------- test/app-with-apppath.js | 83 --------------- test/app.js | 144 ++++++++++++++++++++++++++ test/test-file-creation.js | 201 ------------------------------------- 4 files changed, 144 insertions(+), 342 deletions(-) delete mode 100644 test/app-with-appname.js delete mode 100644 test/app-with-apppath.js create mode 100644 test/app.js delete mode 100644 test/test-file-creation.js diff --git a/test/app-with-appname.js b/test/app-with-appname.js deleted file mode 100644 index 158f338f8..000000000 --- a/test/app-with-appname.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -var path = require('path'); -var helpers = require('yeoman-test'); -var assert = require('yeoman-assert'); - -describe('angular:app appName', function () { - beforeEach(function (done) { - helpers - .run(require.resolve('../app')) - .withGenerators([ - require.resolve('../common'), - require.resolve('../controller'), - require.resolve('../main'), - [helpers.createDummyGenerator(), 'karma:app'] - ]) - .withOptions({ - 'appPath': 'app', - 'skip-welcome-message': true, - 'skip-message': true - }) - .withArguments(['upperCaseBug']) - .withPrompts({ - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: [] - }) - .on('end', done); - }); - - it('generates the same appName in every file', function () { - assert.file([ - 'app/scripts/app.js', - 'app/scripts/controllers/main.js', - 'app/index.html', - 'test/spec/controllers/main.js' - ]); - - assert.fileContent( - 'app/scripts/app.js', - /module\('upperCaseBugApp'/ - ); - assert.fileContent( - 'app/scripts/controllers/main.js', - /module\('upperCaseBugApp'/ - ); - assert.fileContent( - 'test/spec/controllers/main.js', - /module\('upperCaseBugApp'/ - ); - - assert.fileContent( - 'app/index.html', - /ng-app="upperCaseBugApp"/ - ); - }); -}); diff --git a/test/app-with-apppath.js b/test/app-with-apppath.js deleted file mode 100644 index c10f9e927..000000000 --- a/test/app-with-apppath.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -var path = require('path'); -var helpers = require('yeoman-test'); -var assert = require('yeoman-assert'); -var _ = require('underscore.string'); - -describe('Angular generator appPath option', function () { - var appPath = 'customAppPath'; - var expected = [ - appPath + '/404.html', - appPath + '/favicon.ico', - appPath + '/robots.txt', - appPath + '/styles/main.scss', - appPath + '/views/main.html', - appPath + '/index.html', - '.bowerrc', - '.editorconfig', - '.gitignore', - '.jshintrc', - 'Gruntfile.js', - 'package.json', - 'bower.json' - ]; - - beforeEach(function () { - this.angular = helpers - .run(require.resolve('../app')) - .withGenerators([ - require.resolve('../common'), - require.resolve('../controller'), - require.resolve('../main'), - [helpers.createDummyGenerator(), 'karma:app'] - ]) - .withOptions({ - 'appPath': appPath, - 'skip-welcome-message': true, - 'skip-message': true - }) - .withArguments(['upperCaseBug']) - .withPrompts({ - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: [] - }); - }); - - describe('default settings', function () { - beforeEach(function (done) { - this.angular.on('end', done); - }); - - it('generates base files inside the appPath', function () { - assert.file(expected); - }); - - it('creates JS files in appPath', function () { - assert.file([ - '.jscsrc', - appPath + '/scripts/app.js', - appPath + '/scripts/controllers/main.js', - 'test/spec/controllers/main.js' - ]); - }); - }); - - describe('--coffee', function () { - beforeEach(function (done) { - this.angular.withOptions({ - coffee: true - }).on('end', done); - }); - - it('creates CoffeeScript files', function () { - assert.file([].concat(expected, [ - appPath + '/scripts/app.coffee', - appPath + '/scripts/controllers/main.coffee', - 'test/spec/controllers/main.coffee' - ])); - }); - }); -}); diff --git a/test/app.js b/test/app.js new file mode 100644 index 000000000..5e2116cf2 --- /dev/null +++ b/test/app.js @@ -0,0 +1,144 @@ +'use strict'; + +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +var getDefaultFilesForAppPath = function (appPath) { + return [ + appPath + '/404.html', + appPath + '/favicon.ico', + appPath + '/robots.txt', + appPath + '/styles/main.scss', + appPath + '/views/main.html', + appPath + '/index.html', + '.bowerrc', + '.editorconfig', + '.gitignore', + '.jshintrc', + 'Gruntfile.js', + 'package.json', + 'bower.json' + ]; +}; + +describe('angular:app', function () { + var appPath = 'customAppPath'; + + beforeEach(function () { + this.angular = helpers + .run(require.resolve('../app')) + .withGenerators([ + require.resolve('../common'), + require.resolve('../controller'), + require.resolve('../main'), + [helpers.createDummyGenerator(), 'karma:app'] + ]) + .withOptions({ + 'skip-welcome-message': true, + 'skip-message': true + }) + .withArguments(['upperCaseBug']) + .withPrompts({ + compass: true, + bootstrap: true, + compassBootstrap: true, + modules: [] + }); + }); + + describe('default settings', function () { + beforeEach(function (done) { + this.angular.on('end', done); + }); + + it('generates base files', function () { + assert.file(getDefaultFilesForAppPath('app')); + assert.file([ + '.jscsrc', + 'app/index.html', + 'app/scripts/app.js', + 'app/scripts/controllers/main.js', + 'test/spec/controllers/main.js' + ]); + }); + }); + + describe('--coffee', function () { + beforeEach(function (done) { + this.angular.withOptions({ + coffee: true + }).on('end', done); + }); + + it('generates CoffeeScript files', function () { + assert.file([].concat(getDefaultFilesForAppPath('app'), [ + 'app/scripts/app.coffee', + 'app/scripts/controllers/main.coffee', + 'test/spec/controllers/main.coffee' + ])); + }); + }); + + describe('--typescript', function () { + beforeEach(function (done) { + this.angular.withOptions({ + typescript: true + }).on('end', done); + }); + + it('generates CoffeeScript files', function () { + assert.file([].concat(getDefaultFilesForAppPath('app'), [ + 'app/scripts/app.ts', + 'app/scripts/controllers/main.ts', + 'test/spec/controllers/main.ts' + ])); + }); + }); + + describe('--appPath', function () { + beforeEach(function (done) { + this.angular.withOptions({ + appPath: 'alternative' + }).on('end', done); + }); + + it('generates base files inside the appPath', function () { + assert.file(getDefaultFilesForAppPath('alternative')); + assert.file([ + '.jscsrc', + 'alternative/scripts/app.js', + 'alternative/scripts/controllers/main.js', + 'test/spec/controllers/main.js' + ]); + }); + }); + + describe('--appName', function () { + beforeEach(function (done) { + this.angular + .withArguments(['upperCaseBug']) + .on('end', done); + }); + + it('generates the same appName in every file', function () { + assert.fileContent( + 'app/scripts/app.js', + /module\('upperCaseBugApp'/ + ); + assert.fileContent( + 'app/scripts/controllers/main.js', + /module\('upperCaseBugApp'/ + ); + assert.fileContent( + 'test/spec/controllers/main.js', + /module\('upperCaseBugApp'/ + ); + + assert.fileContent( + 'app/index.html', + /ng-app="upperCaseBugApp"/ + ); + }); + }); +}); diff --git a/test/test-file-creation.js b/test/test-file-creation.js deleted file mode 100644 index 64b32bdb0..000000000 --- a/test/test-file-creation.js +++ /dev/null @@ -1,201 +0,0 @@ -'use strict'; - -var path = require('path'); -var helpers = require('yeoman-generator').test; -var assert = require('yeoman-assert'); -var _ = require('underscore.string'); - -describe('Angular generator file creation', function () { - var angular; - var expected = [ - 'app/404.html', - 'app/favicon.ico', - 'app/robots.txt', - 'app/styles/main.scss', - 'app/views/main.html', - 'app/index.html', - '.bowerrc', - '.editorconfig', - '.gitignore', - '.jshintrc', - 'Gruntfile.js', - 'package.json', - 'bower.json' - ]; - var mockPrompts = { - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: [] - }; - var genOptions = { - 'appPath': 'app', - 'skip-install': true, - 'skip-welcome-message': true, - 'skip-message': true - }; - - beforeEach(function (done) { - helpers.testDirectory(path.join(__dirname, 'tmp', 'file'), function (err) { - if (err) { - done(err); - } - angular = helpers.createGenerator( - 'angular:app', - [ - '../../../app', - '../../../common', - '../../../controller', - '../../../main', - [ helpers.createDummyGenerator(), 'karma:app' ] - ], - false, - genOptions - ); - helpers.mockPrompt(angular, mockPrompts); - - done(); - }); - }); - - describe('App files', function () { - it('should generate dotfiles', function (done) { - angular.run({}, function () { - assert.file(expected); - done(); - }); - }); - - it('creates expected JS files', function (done) { - angular.run({}, function() { - assert.file([].concat(expected, [ - '.jscsrc', - 'app/scripts/app.js', - 'app/scripts/controllers/main.js', - 'test/spec/controllers/main.js' - ])); - done(); - }); - }); - - it('creates CoffeeScript files', function (done) { - angular.env.options.coffee = true; - angular.run([], function () { - assert.file([].concat(expected, [ - 'app/scripts/app.coffee', - 'app/scripts/controllers/main.coffee', - 'test/spec/controllers/main.coffee' - ])); - done(); - }); - }); - }); - - describe('Service Subgenerators', function () { - var generatorTest = function (generatorType, specType, targetDirectory, scriptNameFn, specNameFn, suffix, done) { - var name = 'foo'; - var deps = [path.join('../../..', generatorType)]; - var genTester = helpers.createGenerator('angular:' + generatorType, deps, [name], genOptions); - - angular.run([], function () { - genTester.run([], function () { - assert.fileContent([ - [ - path.join('app/scripts', targetDirectory, name + '.js'), - new RegExp( - generatorType + '\\(\'' + scriptNameFn(name) + suffix + '\'', - 'g' - ) - ], - [ - path.join('test/spec', targetDirectory, name + '.js'), - new RegExp( - 'describe\\(\'' + _.classify(specType) + ': ' + specNameFn(name) + suffix + '\'', - 'g' - ) - ] - ]); - done(); - }); - }); - }; - - it('should generate a new controller', function (done) { - generatorTest('controller', 'controller', 'controllers', _.classify, _.classify, 'Ctrl', done); - }); - - it('should generate a new directive', function (done) { - generatorTest('directive', 'directive', 'directives', _.camelize, _.camelize, '', done); - }); - - it('should generate a new filter', function (done) { - generatorTest('filter', 'filter', 'filters', _.camelize, _.camelize, '', done); - }); - - ['constant', 'factory', 'provider', 'value'].forEach(function(t) { - it('should generate a new ' + t, function (done) { - generatorTest(t, 'service', 'services', _.camelize, _.camelize, '', done); - }); - }); - - it('should generate a new service', function (done) { - generatorTest('service', 'service', 'services', _.capitalize, _.capitalize, '', done); - }); - - it('creates typescript files', function (done) { - var expected = [ - 'app/404.html', - 'app/favicon.ico', - 'app/robots.txt', - 'app/styles/main.scss', - 'app/views/main.html', - '.bowerrc', - 'Gruntfile.js', - 'package.json', - 'bower.json', - 'app/scripts/app.ts', - 'app/index.html', - 'app/scripts/controllers/main.ts', - 'test/spec/controllers/main.ts' - ]; - helpers.mockPrompt(angular, { - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: [] - }); - - angular.env.options.typescript = true; - angular.run([], function () { - assert.file(expected); - done(); - }); - }); - }); - - describe('View', function () { - it('should generate a new view', function (done) { - var angularView; - var deps = [ '../../../view' ]; - angularView = helpers.createGenerator('angular:view', deps, ['foo'], genOptions); - - helpers.mockPrompt(angularView, mockPrompts); - angularView.run([], function () { - assert.file(['app/views/foo.html']); - done(); - }); - }); - - it('should generate a new view in subdirectories', function (done) { - var angularView; - var deps = [ '../../../view' ]; - angularView = helpers.createGenerator('angular:view', deps, ['foo/bar'], genOptions); - - helpers.mockPrompt(angularView, mockPrompts); - angularView.run([], function () { - assert.file(['app/views/foo/bar.html']); - done(); - }); - }); - }); -}); From 67da47df9c0b2dc8e7268f2d54afb7c26e5dcc3c Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Wed, 30 Dec 2015 03:24:33 -0500 Subject: [PATCH 07/10] Simplify some tests --- test/controller.js | 6 ------ test/directive.js | 6 ------ test/filter.js | 6 ------ test/service.js | 6 ------ 4 files changed, 24 deletions(-) diff --git a/test/controller.js b/test/controller.js index 13ca026fb..91932126e 100644 --- a/test/controller.js +++ b/test/controller.js @@ -9,12 +9,6 @@ describe('angular:controller', function () { helpers .run(require.resolve('../controller')) .withArguments('foo') - .inTmpDir(function (dir) { - fs.writeFileSync( - path.join(dir, 'bower.json'), - '{"appPath": "app"}' - ); - }) .on('end', done); }); diff --git a/test/directive.js b/test/directive.js index c11585354..094e1365b 100644 --- a/test/directive.js +++ b/test/directive.js @@ -9,12 +9,6 @@ describe('angular:directive', function () { helpers .run(require.resolve('../directive')) .withArguments('foo') - .inTmpDir(function (dir) { - fs.writeFileSync( - path.join(dir, 'bower.json'), - '{"appPath": "app"}' - ); - }) .on('end', done); }); diff --git a/test/filter.js b/test/filter.js index ad92eec09..86973fb6e 100644 --- a/test/filter.js +++ b/test/filter.js @@ -9,12 +9,6 @@ describe('angular:filter', function () { helpers .run(require.resolve('../filter')) .withArguments('foo') - .inTmpDir(function (dir) { - fs.writeFileSync( - path.join(dir, 'bower.json'), - '{"appPath": "app"}' - ); - }) .on('end', done); }); diff --git a/test/service.js b/test/service.js index 1ddcd40a8..71cafed0e 100644 --- a/test/service.js +++ b/test/service.js @@ -9,12 +9,6 @@ describe('angular:service', function () { helpers .run(require.resolve('../service')) .withArguments('foo') - .inTmpDir(function (dir) { - fs.writeFileSync( - path.join(dir, 'bower.json'), - '{"appPath": "app"}' - ); - }) .on('end', done); }); From ac5f33b0ddba71a6aefc7ac0b84d829e43253cc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=8C=81=20s=C9=AA=C9=B4=E1=B4=85=CA=80=E1=B4=87=20s?= =?UTF-8?q?=E1=B4=8F=CA=80=CA=9C=E1=B4=9Cs=20=E2=8C=81?= Date: Fri, 15 Jan 2016 23:18:44 +0100 Subject: [PATCH 08/10] chore(readme): add gitter badge --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 6dcee086c..dd8b4d320 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -# AngularJS generator [![Build Status](https://secure.travis-ci.org/yeoman/generator-angular.svg?branch=master)](http://travis-ci.org/yeoman/generator-angular) +# AngularJS generator [![Build Status](https://secure.travis-ci.org/yeoman/generator-angular.svg?branch=master)](http://travis-ci.org/yeoman/generator-angular) [![Gitter](https://img.shields.io/badge/Gitter-Join_the_Yeoman_chat_%E2%86%92-00d06f.svg)](https://gitter.im/yeoman/yeoman) > Yeoman generator for AngularJS - lets you quickly set up a project with sensible defaults and best practices. From e6fcffac44da7247fb371b7ea2ab5f59121d41b6 Mon Sep 17 00:00:00 2001 From: Eddie Monge Date: Tue, 19 Jan 2016 13:23:57 -0800 Subject: [PATCH 09/10] docs(readme): remove note about mixed environments Mixed environments are rare. There is a bug that makes the `--lang=false` flag not work correctly as well --- readme.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/readme.md b/readme.md index dd8b4d320..102204250 100644 --- a/readme.md +++ b/readme.md @@ -234,11 +234,6 @@ angular.module('demoApp') .controller('UserCtrl', demoApp.UserCtrl); ``` - -A project can mix TypeScript, CoffeScript, and JavaScript files. - -To output JavaScript files, even if CoffeeScript (or TypeScript) files exist (the default is to output CoffeeScript files if the generator finds any in the project), use `--coffee=false` and/or `--typescript=false`. - ### Minification Safe **tl;dr**: You don't need to write annotated code as the build step will From 4eb440ff0db7f6917cfa57588873ad9b34d8a316 Mon Sep 17 00:00:00 2001 From: Ryan Oaks Date: Fri, 22 Jan 2016 22:05:48 -0800 Subject: [PATCH 10/10] chore(gen): bump yeoman-generator from 0.16.0 to 0.18.0 Minimal set of changes needed to get on to yeoman-generator 0.18.0. Related to #1092 --- app/index.js | 35 ++++++++++++++++------------------- package.json | 2 +- route/index.js | 9 ++++++--- script-base.js | 2 +- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/app/index.js b/app/index.js index 3f9e710cf..b79d8bdba 100644 --- a/app/index.js +++ b/app/index.js @@ -10,16 +10,11 @@ var chalk = require('chalk'); var Generator = module.exports = function Generator(args, options) { yeoman.generators.Base.apply(this, arguments); - this.argument('appname', { type: String, required: false }); - this.appname = this.appname || path.basename(process.cwd()); - this.appname = this._.camelize(this._.slugify(this._.humanize(this.appname))); - this.option('app-suffix', { desc: 'Allow a custom suffix to be added to the module name', type: String }); this.env.options['app-suffix'] = this.options['app-suffix']; - this.scriptAppName = this.appname + angularUtils.appName(this); args = ['main']; @@ -71,18 +66,6 @@ var Generator = module.exports = function Generator(args, options) { this.env.options.typescript = this.options.typescript; } - this.hookFor('angular:common', { - args: args - }); - - this.hookFor('angular:main', { - args: args - }); - - this.hookFor('angular:controller', { - args: args - }); - this.on('end', function () { var jsExt = this.options.coffee ? 'coffee' : 'js'; @@ -95,7 +78,7 @@ var Generator = module.exports = function Generator(args, options) { bowerComments.push('endbower'); } - this.invoke('karma:app', { + this.composeWith('karma:app', { options: { 'skip-install': this.options['skip-install'], 'base-path': '../', @@ -118,7 +101,7 @@ var Generator = module.exports = function Generator(args, options) { }); if (this.env.options.ngRoute) { - this.invoke('angular:route', { + this.composeWith('angular:route', { args: ['about'] }); } @@ -130,6 +113,13 @@ var Generator = module.exports = function Generator(args, options) { util.inherits(Generator, yeoman.generators.Base); +Generator.prototype.initializing = function initializing() { + this.argument('appname', { type: String, required: false }); + this.appname = this.appname || path.basename(process.cwd()); + this.appname = this._.camelize(this._.slugify(this._.humanize(this.appname))); + this.scriptAppName = this.appname + angularUtils.appName(this); +} + Generator.prototype.welcome = function welcome() { if (!this.options['skip-welcome-message']) { this.log(yosay()); @@ -377,3 +367,10 @@ Generator.prototype._injectDependencies = function _injectDependencies() { this.spawnCommand(taskRunner, ['wiredep']); } }; + +Generator.prototype.install = function install() { + var args = ['main']; + this.composeWith('angular:common', {args: args}); + this.composeWith('angular:main', {args: args}); + this.composeWith('angular:controller', {args: args}); +}; diff --git a/package.json b/package.json index fe13f702e..ab8af7ea9 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "dependencies": { "chalk": "^1.0.0", "wiredep": "^2.2.0", - "yeoman-generator": "^0.16.0", + "yeoman-generator": "^0.18.0", "yosay": "^1.0.2" }, "peerDependencies": { diff --git a/route/index.js b/route/index.js index 70ed11ff7..c3c2a60c5 100644 --- a/route/index.js +++ b/route/index.js @@ -29,9 +29,6 @@ var Generator = module.exports = function Generator() { ) { this.foundWhenForRoute = true; } - - this.hookFor('angular:controller'); - this.hookFor('angular:view'); }; util.inherits(Generator, ScriptBase); @@ -78,3 +75,9 @@ Generator.prototype.rewriteAppJs = function () { angularUtils.rewriteFile(config); }; + +Generator.prototype.install = function install() { + var args = [this.name]; + this.composeWith('angular:controller', {args: args}); + this.composeWith('angular:view', {args: args}); +}; diff --git a/script-base.js b/script-base.js index de4ff1c3f..e161e380c 100644 --- a/script-base.js +++ b/script-base.js @@ -121,7 +121,7 @@ Generator.prototype.addScriptToIndex = function (script) { Generator.prototype.generateSourceAndTest = function (appTemplate, testTemplate, targetDirectory, skipAdd) { // Services use classified names - if (this.generatorName.toLowerCase() === 'service') { + if (this.rootGeneratorName().toLowerCase() === 'service') { this.cameledName = this.classedName; }