From 20433874b62c75fe0666f319fc09409cd36f2194 Mon Sep 17 00:00:00 2001 From: Shayne Boyer Date: Thu, 5 Feb 2015 14:58:33 -0500 Subject: [PATCH 1/2] Removed .remote(), added mocha test coverage for all application types and sub generators. Added scripts section and npm test for Travis CI support. --- .gitignore | 3 +- app/index.js | 59 +++-- package.json | 100 +++++---- samples/empty/Startup.cs | 14 ++ samples/empty/project.json | 21 ++ samples/web/bin/Debug/aspnet50/web.dll | Bin 155136 -> 0 bytes samples/web/bin/Debug/aspnet50/web.xml | 8 - .../bin/Debug/web.0.1-alpha-SNAPSHOT.nupkg | Bin 19197 -> 0 bytes .../web.0.1-alpha-SNAPSHOT.symbols.nupkg | Bin 19313 -> 0 bytes script-base.js | 22 +- test/subgenerators.js | 138 ++++++++++++ test/test-core.js | 206 ++++++++++++++++++ test/test-utility.js | 111 ++++++++++ 13 files changed, 586 insertions(+), 96 deletions(-) create mode 100644 samples/empty/Startup.cs create mode 100644 samples/empty/project.json delete mode 100644 samples/web/bin/Debug/aspnet50/web.dll delete mode 100644 samples/web/bin/Debug/aspnet50/web.xml delete mode 100644 samples/web/bin/Debug/web.0.1-alpha-SNAPSHOT.nupkg delete mode 100644 samples/web/bin/Debug/web.0.1-alpha-SNAPSHOT.symbols.nupkg create mode 100644 test/subgenerators.js create mode 100644 test/test-core.js create mode 100644 test/test-utility.js diff --git a/.gitignore b/.gitignore index 2464c52c..c395d3c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules .DS_Store npm-debug.log -.npmignore \ No newline at end of file +.npmignore +.tmp \ No newline at end of file diff --git a/app/index.js b/app/index.js index cb309e2f..381a3ae1 100644 --- a/app/index.js +++ b/app/index.js @@ -2,7 +2,7 @@ var yeoman = require('yeoman-generator'); var yosay = require('yosay'); var chalk = require('chalk'); - +var path = require('path'); var AspnetGenerator = yeoman.generators.Base.extend({ init: function () { @@ -17,6 +17,10 @@ var AspnetGenerator = yeoman.generators.Base.extend({ name: 'type', message: 'What type of application do you want to create?', choices: [ + { + name: 'Empty Application', + value: 'empty' + }, { name: 'Console Application', value: 'console' @@ -37,7 +41,7 @@ var AspnetGenerator = yeoman.generators.Base.extend({ name: 'Class Library', value: 'classlib' }, - { + { name: 'Unit test project', value: 'unittest' } @@ -55,6 +59,9 @@ var AspnetGenerator = yeoman.generators.Base.extend({ var done = this.async(); var app = ''; switch (this.type) { + case 'empty': + app = 'EmptyApplication'; + break; case 'console': app = 'ConsoleApplication'; break; @@ -70,7 +77,7 @@ var AspnetGenerator = yeoman.generators.Base.extend({ case 'classlib': app = 'ClassLibrary' break; - case 'unittest': + case 'unittest': app = 'UnitTest' break; } @@ -78,7 +85,7 @@ var AspnetGenerator = yeoman.generators.Base.extend({ name: 'applicationName', message: 'What\'s the name of your ASP.NET application?', default: app - } ]; + }]; this.prompt(prompts, function (props) { this.applicationName = props.applicationName; @@ -86,38 +93,28 @@ var AspnetGenerator = yeoman.generators.Base.extend({ }.bind(this)); }, - retrieveContent: function () { - var done = this.async(); - var self = this; - this.remote('OmniSharp', 'generator-aspnet', 'release', function (err, remote) { - if(err) { - self.log.error(err); - process.exit(1); - } - done(); - }, true); - }, - writing: function () { + this.sourceRoot(path.join(__dirname, '../samples/')); + this.mkdir(this.applicationName); switch (this.type) { - case 'console': - this.directory(this.cacheRoot() + '/OmniSharp/generator-aspnet/release/samples/console', this.applicationName); + + case 'empty': + this.template(this.type + '/startup.cs', this.applicationName + '/Startup.cs', { + namespace: this.applicationName + }); + + this.copy(this.type + '/project.json', this.applicationName + '/project.json'); + break; + + case 'console': case 'web': - this.directory(this.cacheRoot() + '/OmniSharp/generator-aspnet/release/samples/web', this.applicationName); - break; case 'mvc': - this.directory(this.cacheRoot() + '/OmniSharp/generator-aspnet/release/samples/mvc', this.applicationName); - break; case 'nancy': - this.directory(this.cacheRoot() + '/OmniSharp/generator-aspnet/release/samples/nancy', this.applicationName); - break; case 'classlib': - this.directory(this.cacheRoot() + '/OmniSharp/generator-aspnet/release/samples/classlib', this.applicationName); - break; - case 'unittest': - this.directory(this.cacheRoot() + '/OmniSharp/generator-aspnet/release/samples/unittest', this.applicationName); + case 'unittest': + this.directory(this.type, this.applicationName); break; default: this.log('Unknown project type'); @@ -125,7 +122,7 @@ var AspnetGenerator = yeoman.generators.Base.extend({ }, end: function () { - this.log(this.cacheRoot()); + //this.log(this.cacheRoot()); if (!this.options['skip-install']) { this.log('\r\n'); this.log('Your project is now created, you can use the following commands to get going'); @@ -136,6 +133,8 @@ var AspnetGenerator = yeoman.generators.Base.extend({ this.log('\r\n'); } } + + }); -module.exports = AspnetGenerator; +module.exports = AspnetGenerator; \ No newline at end of file diff --git a/package.json b/package.json index 53ac16fe..9fb36905 100644 --- a/package.json +++ b/package.json @@ -1,43 +1,43 @@ { - "name": "generator-aspnet", - "version": "0.0.27", - "description": "Yeoman generator for ASP.NET 5 apps", - "license": "Apache License 2.0", - "main": "app/index.js", - "repository": "OmniSharp/generator-aspnet", - "contributors": [ - { - "name": "Sourabh Shirhatti", - "email": "shirhatti@outlook.com", - "url": "https://github.com/shirhatti" - }, - { - "name": "Sayed Hashimi", - "email": "sayed.hashimi@gmail.com" - }, - { - "name": "Shayne Boyer", - "email": "spboyer@live.com", - "url": "https://github.com/spboyer" - }, - { - "name": "Jonathan Channon", - "email": "jonathan@jonathanchannon.com" - }, - { - "name": "Peter Blazejewicz", - "email": "peter.blazejewicz@gmail.com", - "url": "https://github.com/peterblazejewicz" - }, - { - "name": "Suhas Joshi", - "email": "suhasbjoshi@hotmail.com" + "name": "generator-aspnet", + "version": "0.0.27", + "description": "Yeoman generator for ASP.NET 5 apps", + "license": "Apache License 2.0", + "main": "app/index.js", + "repository": "OmniSharp/generator-aspnet", + "contributors": [ + { + "name": "Sourabh Shirhatti", + "email": "shirhatti@outlook.com", + "url": "https://github.com/shirhatti" + }, + { + "name": "Sayed Hashimi", + "email": "sayed.hashimi@gmail.com" + }, + { + "name": "Shayne Boyer", + "email": "spboyer@live.com", + "url": "https://github.com/spboyer" + }, + { + "name": "Jonathan Channon", + "email": "jonathan@jonathanchannon.com" + }, + { + "name": "Peter Blazejewicz", + "email": "peter.blazejewicz@gmail.com", + "url": "https://github.com/peterblazejewicz" + }, + { + "name": "Suhas Joshi", + "email": "suhasbjoshi@hotmail.com" } ], - "engines": { - "node": ">=0.10.0" - }, - "keywords": [ + "engines": { + "node": ">=0.10.0" + }, + "keywords": [ "yeoman-generator", "ASP.NET", "aspnet", @@ -45,12 +45,20 @@ "net", "vNext" ], - "dependencies": { - "yeoman-generator": "~0.18.5", - "yosay": "^0.1.0", - "chalk": "~0.4.0" - }, - "peerDependencies": { - "yo": ">=1.0.0" - } -} + "dependencies": { + "chai": "^1.10.0", + "chalk": "~0.4.0", + "fs-extra": "^0.16.3", + "gulp": "^3.8.10", + "mocha": "^2.1.0", + "yeoman-generator": "~0.18.5", + "yosay": "^0.1.0" + }, + "peerDependencies": { + "yo": ">=1.0.0" + }, + "scripts": { + "test": "mocha" + } + +} \ No newline at end of file diff --git a/samples/empty/Startup.cs b/samples/empty/Startup.cs new file mode 100644 index 00000000..33a10b69 --- /dev/null +++ b/samples/empty/Startup.cs @@ -0,0 +1,14 @@ +using System; +using Microsoft.AspNet.Builder; +using Microsoft.AspNet.Http; + +namespace <%= namespace %> +{ + public class Startup + { + public void Configure(IApplicationBuilder app) + { + // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 + } + } +} diff --git a/samples/empty/project.json b/samples/empty/project.json new file mode 100644 index 00000000..3aad53db --- /dev/null +++ b/samples/empty/project.json @@ -0,0 +1,21 @@ +{ + "webroot": "wwwroot", + "version": "1.0.0-*", + "exclude": [ + "wwwroot" + ], + "packExclude": [ + "node_modules", + "bower_components", + "**.kproj", + "**.user", + "**.vspscc" + ], + "dependencies": { + "Microsoft.AspNet.Server.IIS": "1.0.0-beta2" + }, + "frameworks": { + "aspnet50": {}, + "aspnetcore50": {} + } +} \ No newline at end of file diff --git a/samples/web/bin/Debug/aspnet50/web.dll b/samples/web/bin/Debug/aspnet50/web.dll deleted file mode 100644 index 9049a280bd3992060eb00e58c6b72d51637cf2cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155136 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 z 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 B8pi+t diff --git a/samples/web/bin/Debug/aspnet50/web.xml b/samples/web/bin/Debug/aspnet50/web.xml deleted file mode 100644 index d1e1c429..00000000 --- a/samples/web/bin/Debug/aspnet50/web.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - web - - - - diff --git a/samples/web/bin/Debug/web.0.1-alpha-SNAPSHOT.nupkg b/samples/web/bin/Debug/web.0.1-alpha-SNAPSHOT.nupkg deleted file mode 100644 index 63b1ab62a8916bddecb88e501998033a08e6fb9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19197 zcmY(qWmFr$);01dp}4y{6fIudrC4!y4enOlwb0@Y#R3#}DDDo$-QlL^yyvd< ztu>SRkw2N4z4tt_qaqK07lna&_YOuQ<+D^2hKgw?3=9l9EDQ_^bTx7|w{>A<`S)o) zA!y&rhKjh+A$In`v6{ZEHU~RV*aOWOR^z)J`4pgVW#FV7hJY}cNcaa~%@;0xwEYEaP( zG`jx$5KBq${_I-|2IVfkN=~hUFqWxaJz@I7X4R#VimUvI? zGR;Q!!jBB{cOC8yPRbW%DuIvwC{K4+cmY`~BdyljC{e?msPE`u#gd3bFbKV2ILHb! zJ5jL2!mdKp=b!2sYB3d0U7JSRV8Z7}HpKL&{>dh*M>L8x_O0AucaLX#)=Y1w%*NL`-PhiTR9*r9??p8>rj__fL2t+q4h9>#*jjyI zHF0sYH+SV`WBqq)X12B`IcUb%eGhMWIxOUopWea3bAh*+!E!X?5ahTvf& zj;w|e>z|IdpgrRx7TYrN)MkJLhIGL1ta|WJ{ zg&Jg3qb(`^G$K-;|9Y3XN;)qWUovFd$d|*C*J{Y)lbK`DHlxqpHMg=;H$=_PuOpG- z_h%Hoj0W@hIkZl|tt;H5<^h`n*Z2qghl{$dhRKi&5^R)9Hs%X&0KABaym6MjiZ_~G z$_u*hqbQqg@ly`jEfw`(Tt0IUT%}Q1!dU*p;>XV4wAD9L6Gi)s`_$RxHPJZKq>Gz% zaMcp!b>kc-Q6(^(Uw%-aOf;YS)&BaFfC%!QH1B|ksC$OMKk}*}H+re0!>&fnz|=+k z!YQqf#|SRjI^}|;Jg8f8v3zenaqK&%z(ketA#n`EKt4;P7M_Z9!4qj10J=3F+ZBUN~c7Q|84+5U7Ro2i9s zAn6;*H)m%42eyQM7;7TT=QQB{KGW!7{2?JHV;63eG5(m2XVto*t5LhOnhVF~cVakU zaLP@o6E1406KS%zp*>kyQ0FADe{&j>4?%jm1y7;);!s6?o4f{9p%P4Zo`BHP91;dM zi0~o+v%dqM=4YaEdqm9LH>@>flatstv;9?|npgR(D6MrJCf86VYf*o6rsF`X$Wut! zNQ_L>wDjV7?0POke`qG4ct~qbSAbz%$|RA$YQk^mo6rl(>RXhh z*CT1By>Dn~xs}hax3p5xQoFj_385GCUv@|9o{y+Yprfvh!_tFSUjK<1wZq4(U-Icy zB{z%H-%33u{p>|^N>QvDT=12RWQtZzJs%kfPqKz*p6lspw1Qt??DFpRsgETC{fk+_7qM*9f0F zy_B**3`)0Y_SQGl3a&0rdd(e9YY{4!XE19%ZWvNxtn6l39KO|4wR1?QWY!E98aQnT zT~Xz?_%y4(Xj!Y{n~LBZd|cp@M7eHeq1ItrKh#9WQ|ZR-Q{jv{@Uua%a509Ab~yHr z>8z)I1^e=vY6t&$&~)1;_hfaeVNdSDmCheSr>4z1%RUTOzxIbZlNMR3<6jw4)l*tm zL2WqmmL9OV8d;W=YrV59(TcaDu2l_!5)S6By&AK_x!msM`ZjK@5)L{ix~)kXb>pVB z!*0ytHb3{bu38z*qvQRz<$h{g6l84`DQb>TESIHfCK)^*H0gdYT4D0>v!0P^tDRTu zn*D6AaauE?WYl_mu}HL#6776NFot$bS~5nsYSH6|c@frF*SIJ_rZ7yJ=@;9uHFX-2 zS3h#N)2y^`!f>3LqU3I=*FmkpDNLGX+0uUon^dPHcr#)4-w_FxBiPRmbHDBcBs1i$IWt2v8whr zx38Cz6nUW{6O?65w+vFX1@+yg7mq??nnDH6(Y@U~-_PoYUo=h%OLwBYW&WQ0Fr19= z=v@k^8nHrec5XS72t97}K0b|z!|{}!8VIQGo$o)ZPf9=3H@$1gR=jqWxk-t(794A) z$Rw(5Pc;0v*s7|@V%osV{$v;Lq_+DSZ+@lwBxjkzxrJ8#EQ(^TS$=%m=lT0#jJyfe zPke8XxpqdQq)+Z_WKwWaxFSYtel^AR?b^q%Pqa_bTCZKC_0t1g0bj+lQefW+k3DsI z@6xR0#eF8)T>6x)$D{*C#9f1~W)G;GRPO!|eFWk4C%xUMQG;3hw3*>;Tr=I1()P0*aO&m_OjjRG;F zp(@HEkR?>SJ|3!TJruh{xkBO0ZFgNPe8oaH8o-@m`mEjqdmP%VB;Zy%u$3#*b#JpM zEElgaf8b=WMeW*gdJkGo6MJ1qaw=j5c@&wup0w9xE-hYVILoc)@4I6%-whH1n0ZN_ zANQ_JAl%A^wUfH1$PscQ!qSYGnj_4iE!M3#R=x%o`k@A28&_1#b5KvbOHL-8$9nHe zf9`VRIMsiuUXdcDn6hccsG8rKa(RgRdb4D!CRRPhX?3H^IaUn-bTr-J_FU_Hu09!0 zGpWz~kU#sKF#!J0-l>xMm^;~u#Ps3nz?S@m#Wdg+>z4X~n<-x&3AOM-p#@&+47^;! zxhf}GX$DT(-t5b^nlu_zr2cXW9OEdZxdW=w?Yw?WU&=z7$M}A1D3f02Lt-+_BF{zjS`NfOVrj%jeubSxvcmK8X0FS16&(~(&dv4If48d+S zWqC@T*s&a}4+*4yZ)`9s#qoK~qrg%B<+)9`X#JUKe_{7=o&U{&hQ$lwl9Kg^ zYJl`VqFW!~3Iah1HSz(HR6_5N(FG1Hi{gOmsUfdEpXLKtL$}1&j2wOk!^aQ5y(`-!=W(3}JL11#q4YQr;_QZ5j{7)1!1; z-*Ce)=Y-^Z!JWntFDwci=(-Y!4zG**$n#RwwfjpsYleaJRK#L%+x$!@f1fbs>Hd(0 z$AX^Xe4TN@Pmk7Ilb?tl`^k)GY$utYxJrJHN6^>3S%O9;4Bj40roCkQoFgP6IhwPh z{|$Kxfipm4Us1tTN|oHC0Ly7(s&SM5yq3>tBMSZq+=ev@Zf3yy_y=&cRRPpwd~VM2 zC!M`mPql}AU7k}M326K3PY_bGZbkrjReO_EOju_myC*oeZUHAP^2C((=ne;>7l2v_ zAH`WJD4xj4Xr}PR%*4I}I)h7sKdAC-FoB@NQ3ycm=OvTbN^$#yDMW>;d8Z9>x zfV(B(znm){Rs_^XOSEr7py#1T^zu2<{2|01~9v)-YA*~XxmJs02&4ndm=gK$2xDEzyVn}s2~{R zND1slG)yu}dT|ZS#8wVo?{FO7{R#Y`u^!jTKC`w6mY<(ptWvz1P!aQ>;8$u*^0>)! z>{F&4_1^04Soh`s>S;n`i|exfRTSLZAHG>vK+keS*gcvzgF_EG{zV?i$Hu613%#)l z;2!mY$ay*}kf&bXh zsFW9~SNbF|y-OG^h(|tzbEg&+jP()T6*e;4yEj?aVAy>4qDKi-gf z>jzYYh(w?jL_pA-Y{5+e(W7Xj^yqcS z@MWQ<5aIjcQp;{n?LV0^G*kC*F`R6<@fV?Nk#plg&lckT^&h%wT@hdA^Ipw+VF>p> zyN?8}sVHpwvk@NJBTuiQ77L~6g9Kz)R@kL{acGIITF<{p}O zu}HC~c6LdFkjUKRnSETJO;NmR9og>^iflE$NArHbGQTtkl#0CBt=wsyo>W`@`1jId zqU~-E?~Rqpg`6s55*04*@cy#*)R$hkNY8sBrtC+w2p)XgPxM|rH~KZXapS!SD-KU%f_P97NiL26puxb4Ty{HxbdCO#TeWJK04gTB?0215cA0mfM-4~0tsXA zaGye@m{p#)$Nc`Ri#~s7q08!ssYMts5c1@_+?b$?Ea_$A5E}?qcq

(0yUGM2$lm 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

r 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 diff --git a/samples/web/bin/Debug/web.0.1-alpha-SNAPSHOT.symbols.nupkg b/samples/web/bin/Debug/web.0.1-alpha-SNAPSHOT.symbols.nupkg deleted file mode 100644 index 795b8b38f498e28ca181eeb0b9ff13eef6e4aaea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19313 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 l%-OxHcsG8x!FAoe*@(x0uTTI diff --git a/script-base.js b/script-base.js index 824268f2..c18366c8 100644 --- a/script-base.js +++ b/script-base.js @@ -5,22 +5,22 @@ var yeoman = require('yeoman-generator'); var chalk = require('chalk'); var NamedGenerator = module.exports = function NamedGenerator() { - yeoman.generators.NamedBase.apply(this, arguments); + yeoman.generators.NamedBase.apply(this, arguments); - var sourceRoot = '/templates/'; - this.sourceRoot(path.join(__dirname, sourceRoot)); + var sourceRoot = '/templates/'; + this.sourceRoot(path.join(__dirname, sourceRoot)); }; util.inherits(NamedGenerator, yeoman.generators.NamedBase); -NamedGenerator.prototype.generateTemplateFile = function(templateFile, targetFile, templateData) { - this.log('You called the aspnet subgenerator with the arg ' + this.name); +NamedGenerator.prototype.generateTemplateFile = function (templateFile, targetFile, templateData) { + this.log('You called the aspnet subgenerator with the arg ' + this.name); - if(templateData !== null){ - this.template(templateFile, targetFile, templateData); - } else { - this.template(templateFile, targetFile); - } + if (templateData !== null) { + this.template(templateFile, targetFile, templateData); + } else { + this.template(templateFile, targetFile); + } - this.log(targetFile + ' created.') + this.log(targetFile + ' created.') } \ No newline at end of file diff --git a/test/subgenerators.js b/test/subgenerators.js new file mode 100644 index 00000000..4ba76468 --- /dev/null +++ b/test/subgenerators.js @@ -0,0 +1,138 @@ +var util = require('./test-utility'); + +/* + * Test for all subgenerators NOT requiring a name argument + */ +describe('Subgenerators without arguments tests', function () { + + describe('aspnet:PackageJson', function () { + util.goCreate('PackageJson'); + util.fileCheck('should create package json file', 'package.json'); + }); + + describe('aspnet:Gulpfile', function () { + util.goCreate('GulpFile'); + util.fileCheck('should create gulp file', 'gulpfile.js'); + }); + + describe('aspnet:BowerJson', function () { + util.goCreate('BowerJson'); + util.fileCheck('should create bower file', 'bower.json'); + }); + + describe('aspnet:Config', function () { + util.goCreate('Config'); + util.fileCheck('should create config json file', 'config.json'); + }); + + describe('aspnet:StartupClass', function () { + util.goCreate('StartupClass'); + util.fileCheck('should create Startup.cs file', 'Startup.cs'); + }); +}); + +/* + * Test for all subgenerators requiring a name argument + */ +describe('Subgenerators with named arguments tests', function () { + + describe('aspnet:Class', function () { + var arg = 'MyClass'; + var filename = 'MyClass.cs'; + + util.goCreateWithArgs('Class', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + util.fileContentCheck(filename, 'Check file content', /[ ]*public[ ]*class[ ]*MyClass/); + + }); + + describe('aspnet:CoffeeScript', function () { + var arg = 'file'; + var filename = 'file.coffee'; + + util.goCreateWithArgs('CoffeeScript', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); + + describe('aspnet:Gruntfile', function () { + var arg = 'gruntfile'; + var filename = 'gruntfile.js'; + + util.goCreateWithArgs('Gruntfile', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); + + describe('aspnet:HTMLPage', function () { + var arg = 'mypage'; + var filename = 'mypage.html'; + + util.goCreateWithArgs('HTMLPage', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); + + describe('aspnet:JavaScript', function () { + var arg = 'file'; + var filename = 'file.js'; + + util.goCreateWithArgs('JavaScript', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); + + describe('aspnet:JSON', function () { + var arg = 'file'; + var filename = 'file.json'; + + util.goCreateWithArgs('JSON', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); + + describe('aspnet:MvcController', function () { + var arg = 'file'; + var filename = 'file.cs'; + + util.goCreateWithArgs('MvcController', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); + + describe('aspnet:MvcView', function () { + var arg = 'file'; + var filename = 'file.cshtml'; + + util.goCreateWithArgs('MvcView', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); + + describe('aspnet:TextFile', function () { + var arg = 'file'; + var filename = 'file.txt'; + + util.goCreateWithArgs('TextFile', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); + + describe('aspnet:TypeScript', function () { + var arg = 'file'; + var filename = 'file.ts'; + + util.goCreateWithArgs('TypeScript', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); + + describe('aspnet:WebApiController', function () { + var arg = 'file'; + var filename = 'file.cs'; + + util.goCreateWithArgs('WebApiController', [arg]); + util.fileCheck('should create ' + filename + ' file', filename); + + }); +}); \ No newline at end of file diff --git a/test/test-core.js b/test/test-core.js new file mode 100644 index 00000000..9362e829 --- /dev/null +++ b/test/test-core.js @@ -0,0 +1,206 @@ + var yeoman = require('yeoman-generator'); + var path = require('path'); + var mockGen; + var assert = yeoman.assert; + var util = require('./test-utility'); + + /* + * can be imported + */ + describe('aspnet 5 generator', function () { + it('can be imported', function () { + var app = require('../app'); + yeoman.assert.notEqual(app, undefined); + }) + }) + + + /* + * yo aspnet Empty Application + */ + describe('aspnet - Empty Application', function () { + + util.goCreateApplication('empty', 'emptyTest'); + + describe('Checking directories', function () { + it('Application directory created', function () { + assert.file('emptyTest/'); + }); + }); + + var files = ['emptyTest/project.json', 'emptyTest/Startup.cs']; + describe('Checking files', function () { + for (i = 0; i < files.length; i++) { + util.filesCheck(files[i]); + } + }); + + + }); + + /* + * yo aspnet Class Library + */ + describe('aspnet - Class Library', function () { + + util.goCreateApplication('classlib', 'classTest'); + + describe('Checking directories', function () { + it('Application directory created', function () { + assert.file('classTest/'); + }); + }); + + var files = ['classTest/project.json', 'classTest/Class1.cs']; + describe('Checking files', function () { + for (i = 0; i < files.length; i++) { + util.filesCheck(files[i]); + } + }); + + }); + + + /* + * yo aspnet Console Application + */ + describe('aspnet - Console Application', function () { + + util.goCreateApplication('console', 'consoleTest'); + + describe('Checking directories', function () { + it('Application directory created', function () { + assert.file('consoleTest/'); + }); + }); + + var files = ['consoleTest/project.json', 'consoleTest/Program.cs']; + describe('Checking files', function () { + for (i = 0; i < files.length; i++) { + util.filesCheck(files[i]); + } + }); + + }); + + /* + * yo aspnet Unit Test Application + */ + describe('aspnet - Unit Test Application', function () { + + util.goCreateApplication('unittest', 'unittestTest'); + + describe('Checking directories', function () { + it('Application directory created', function () { + assert.file('unittestTest/'); + }); + }); + + var files = ['unittestTest/project.json', 'unittestTest/SampleTest.cs']; + describe('Checking files', function () { + for (i = 0; i < files.length; i++) { + util.filesCheck(files[i]); + } + }); + + }); + + /* + * yo aspnet Web Application + */ + describe('aspnet - Web Application', function () { + + util.goCreateApplication('web', 'webTest'); + + describe('Checking directories', function () { + it('Application directory created', function () { + assert.file('webTest/'); + }); + + it('wwwroot directory created', function () { + assert.file('webTest/wwwroot'); + }); + }); + + + var files = ['webtest/project.json', 'webtest/Startup.cs']; + describe('Checking files', function () { + for (i = 0; i < files.length; i++) { + util.filesCheck(files[i]); + } + }); + + }); + + /* + * yo aspnet Nancy Application + */ + describe('aspnet - Nancy Application', function () { + + util.goCreateApplication('nancy', 'nancyTest'); + + describe('Checking directories', function () { + it('Application directory created', function () { + assert.file('nancyTest/'); + }); + }); + + + var files = ['nancyTest/project.json', 'nancyTest/Startup.cs', 'nancyTest/HomeModule.cs']; + describe('Checking files', function () { + for (i = 0; i < files.length; i++) { + util.filesCheck(files[i]); + } + }); + + }); + + /* + * yo aspnet MVC Application + */ + describe('aspnet - MVC Application', function () { + + util.goCreateApplication('mvc', 'mvcTest'); + + describe('Checking directories', function () { + it('Application directory created', function () { + assert.file('mvcTest/'); + }); + + it('Controllers directory created', function () { + assert.file('mvcTest/Controllers'); + }); + + it('Models directory created', function () { + assert.file('mvcTest/Models'); + }); + + it('Views directory created', function () { + assert.file('mvcTest/Views'); + assert.file('mvcTest/Views/Home'); + assert.file('mvcTest/Views/Shared'); + }); + + it('wwwroot directory created', function () { + assert.file('mvcTest/wwwroot'); + }); + }); + + + var files = [ + 'mvcTest/project.json', + 'mvcTest/Startup.cs', + 'mvcTest/Controllers/HomeController.cs', + 'mvcTest/Models/User.cs', + 'mvcTest/Views/Home/Index.cshtml', + 'mvcTest/Views/Shared/_Layout.cshtml' + ]; + + + describe('Checking files', function () { + for (i = 0; i < files.length; i++) { + util.filesCheck(files[i]); + } + }); + + }); \ No newline at end of file diff --git a/test/test-utility.js b/test/test-utility.js new file mode 100644 index 00000000..c6609ed6 --- /dev/null +++ b/test/test-utility.js @@ -0,0 +1,111 @@ +var util = (function () { + + var yeoman = require('yeoman-generator'); + var path = require('path'); + var assert; + var mockGen; + + function goCreate(subgenerator) { + before(function (done) { + + assert = yeoman.assert; + mockGen = yeoman.test; + + mockGen.run(path.join(__dirname, '../' + subgenerator)) + .inDir(path.join(__dirname, './.tmp')) + .on('end', done); + }); + }; + + function goCreateWithArgs(subgenerator, args) { + before(function (done) { + assert = yeoman.assert; + mockGen = yeoman.test; + + mockGen.run(path.join(__dirname, '../' + subgenerator)) + .inDir(path.join(__dirname, './.tmp')) + .withArguments(args) + .on('end', done); + }); + }; + + function goCreateApplication(type, applicationName) { + before(function (done) { + + assert = yeoman.assert; + mockGen = yeoman.test; + + var mockPrompt = { + type: type, + applicationName: applicationName + }; + + mockGen.run(path.join(__dirname, '../app')) + + .inDir(path.join(__dirname, './.tmp')) + .withPrompt(mockPrompt) + .on('end', done); + }); + + }; + + function dirsCheck(dirs) { + describe('Directories Creation', function () { + + for (i = 0; i < dirs.length; i++) { + it(dirs[i] + ' created.', function () { + assert.file(dirs[i]); + }); + } + + }); + + }; + + function filesCheck(file) { + + + it(file + ' created.', function () { + assert.file(file); + }); + + }; + + function dirCheck(message, dir) { + describe('Directory Creation', function () { + it(message, function () { + assert.file(dir); + }); + }); + }; + + function fileCheck(message, file) { + describe('File Creation', function () { + it(message, function () { + assert.file(file); + }); + }); + }; + + function fileContentCheck(file, message, content) { + it(message, function () { + assert.fileContent(file, content); + }); + }; + + + var methods = { + goCreateApplication: goCreateApplication, + goCreate: goCreate, + goCreateWithArgs: goCreateWithArgs, + fileCheck: fileCheck, + filesCheck: filesCheck, + dirCheck: dirCheck, + dirsCheck: dirsCheck, + fileContentCheck: fileContentCheck + } + + return methods; +})(); + +module.exports = util; \ No newline at end of file From 52d67ce0c84b0c9610a3c79e560b59b21fcdc8a3 Mon Sep 17 00:00:00 2001 From: Shayne Boyer Date: Thu, 5 Feb 2015 15:11:29 -0500 Subject: [PATCH 2/2] case specific failure in Travis CI --- test/subgenerators.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/subgenerators.js b/test/subgenerators.js index 4ba76468..bba61a01 100644 --- a/test/subgenerators.js +++ b/test/subgenerators.js @@ -11,7 +11,7 @@ describe('Subgenerators without arguments tests', function () { }); describe('aspnet:Gulpfile', function () { - util.goCreate('GulpFile'); + util.goCreate('Gulpfile'); util.fileCheck('should create gulp file', 'gulpfile.js'); });