8
0
Просмотр исходного кода

Merge pull request #204 from ckeditor/t/167

Run tests directly from Gulp.
Szymon Kupś 9 лет назад
Родитель
Сommit
e62568f179

+ 22 - 20
dev/tasks/build/tasks.js

@@ -313,32 +313,34 @@ module.exports = ( config ) => {
 					.pipe( filter( '*.js' ) )
 					.pipe( mirror( formatStreams ) );
 			}
-		}
-	};
+		},
 
-	gulp.task( 'build', callback => {
-		runSequence( 'build:clean:all', 'build:themes', 'build:js', callback );
-	} );
+		register() {
+			gulp.task( 'build', callback => {
+				runSequence( 'build:clean:all', 'build:themes', 'build:js', callback );
+			} );
 
-	gulp.task( 'build:clean:all', tasks.clean.all );
-	gulp.task( 'build:clean:themes', tasks.clean.themes );
-	gulp.task( 'build:clean:js', () => tasks.clean.js( args ) );
+			gulp.task( 'build:clean:all', tasks.clean.all );
+			gulp.task( 'build:clean:themes', tasks.clean.themes );
+			gulp.task( 'build:clean:js', () => tasks.clean.js( args ) );
 
-	gulp.task( 'build:themes', ( callback ) => {
-		runSequence( 'build:clean:themes', 'build:icons', 'build:sass', callback );
-	} );
+			gulp.task( 'build:themes', ( callback ) => {
+				runSequence( 'build:clean:themes', 'build:icons', 'build:sass', callback );
+			} );
 
-	gulp.task( 'build:sass', () => tasks.build.sass( args ) );
-	gulp.task( 'build:icons', () => tasks.build.icons( args ) );
-	gulp.task( 'build:js', [ 'build:clean:js' ], () => tasks.build.js( args ) );
+			gulp.task( 'build:sass', () => tasks.build.sass( args ) );
+			gulp.task( 'build:icons', () => tasks.build.icons( args ) );
+			gulp.task( 'build:js', [ 'build:clean:js' ], () => tasks.build.js( args ) );
 
-	// Tasks specific for `gulp docs` builder.
-	gulp.task( 'build:clean:js:esnext', () => tasks.clean.js( { formats: [ 'esnext' ] } ) );
-	gulp.task( 'build:js:esnext', [ 'build:clean:js:esnext' ], () => tasks.build.js( { formats: [ 'esnext' ] } ) );
+			// Tasks specific for `gulp docs` builder.
+			gulp.task( 'build:clean:js:esnext', () => tasks.clean.js( { formats: [ 'esnext' ] } ) );
+			gulp.task( 'build:js:esnext', [ 'build:clean:js:esnext' ], () => tasks.build.js( { formats: [ 'esnext' ] } ) );
 
-	// Tasks specific for testing under node.
-	gulp.task( 'build:clean:js:cjs', () => tasks.clean.js( { formats: [ 'cjs' ] } ) );
-	gulp.task( 'build:js:cjs', [ 'build:clean:js:cjs' ], () => tasks.build.js( { formats: [ 'cjs' ] } ) );
+			// Tasks specific for testing under node.
+			gulp.task( 'build:clean:js:cjs', () => tasks.clean.js( { formats: [ 'cjs' ] } ) );
+			gulp.task( 'build:js:cjs', [ 'build:clean:js:cjs' ], () => tasks.build.js( { formats: [ 'cjs' ] } ) );
+		}
+	};
 
 	return tasks;
 };

+ 55 - 48
dev/tasks/dev/tasks.js

@@ -26,55 +26,62 @@ module.exports = ( config ) => {
 		( msg ) => gutil.log( gutil.colors.red( msg ) )
 	);
 
-	gulp.task( 'init', () => {
-		initTask( installTask, ckeditor5Path, packageJSON, config.WORKSPACE_DIR );
-	} );
-
-	gulp.task( 'create-package', ( done ) => {
-		pluginCreateTask( ckeditor5Path, config.WORKSPACE_DIR )
-			.then( done )
-			.catch( ( error )  => done( error ) );
-	} );
-
-	gulp.task( 'update', updateTaskHandler );
-
-	gulp.task( 'pull', updateTaskHandler );
-
-	gulp.task( 'status', statusTaskHandler );
-
-	gulp.task( 'st', statusTaskHandler );
-
-	gulp.task( 'relink', () => {
-		relinkTask( ckeditor5Path, packageJSON, config.WORKSPACE_DIR );
-	} );
-
-	gulp.task( 'install', () => {
-		const options = minimist( process.argv.slice( 2 ), {
-			string: [ 'package' ],
-			default: {
-				plugin: ''
+	const tasks = {
+		updateRepositories() {
+			const options = minimist( process.argv.slice( 2 ), {
+				boolean: [ 'npm-update' ],
+				default: {
+					'npm-update': false
+				}
+			} );
+
+			return updateTask( installTask, ckeditor5Path, packageJSON, config.WORKSPACE_DIR, options[ 'npm-update' ] );
+		},
+
+		checkStatus() {
+			return statusTask( ckeditor5Path, packageJSON, config.WORKSPACE_DIR );
+		},
+
+		initRepository() {
+			return initTask( installTask, ckeditor5Path, packageJSON, config.WORKSPACE_DIR );
+		},
+
+		createPackage( done ) {
+			return pluginCreateTask( ckeditor5Path, config.WORKSPACE_DIR )
+				.then( done )
+				.catch( ( error ) => done( error ) );
+		},
+
+		relink() {
+			return relinkTask( ckeditor5Path, packageJSON, config.WORKSPACE_DIR );
+		},
+
+		installPackage() {
+			const options = minimist( process.argv.slice( 2 ), {
+				string: [ 'package' ],
+				default: {
+					plugin: ''
+				}
+			} );
+
+			if ( options.package ) {
+				return installTask( ckeditor5Path, config.WORKSPACE_DIR, options.package );
+			} else {
+				throw new Error( 'Please provide a package to install: gulp dev-install --plugin <path|GitHub URL|name>' );
 			}
-		} );
-
-		if ( options.package ) {
-			installTask( ckeditor5Path, config.WORKSPACE_DIR, options.package );
-		} else {
-			throw new Error( 'Please provide a package to install: gulp dev-install --plugin <path|GitHub URL|name>' );
+		},
+
+		register() {
+			gulp.task( 'init', tasks.initRepository );
+			gulp.task( 'create-package', tasks.createPackage );
+			gulp.task( 'update', tasks.updateRepositories );
+			gulp.task( 'pull', tasks.updateRepositories );
+			gulp.task( 'status', tasks.checkStatus );
+			gulp.task( 'st', tasks.checkStatus );
+			gulp.task( 'relink', tasks.relink );
+			gulp.task( 'install', tasks.installPackage );
 		}
-	} );
-
-	function updateTaskHandler() {
-		const options = minimist( process.argv.slice( 2 ), {
-			boolean: [ 'npm-update' ],
-			default: {
-				'npm-update': false
-			}
-		} );
-
-		return updateTask( installTask, ckeditor5Path, packageJSON, config.WORKSPACE_DIR, options[ 'npm-update' ] );
-	}
+	};
 
-	function statusTaskHandler() {
-		return statusTask( ckeditor5Path, packageJSON, config.WORKSPACE_DIR );
-	}
+	return tasks;
 };

+ 32 - 24
dev/tasks/docs/tasks.js

@@ -10,30 +10,38 @@ const jsdoc = require( 'gulp-jsdoc3' );
 const path = require( 'path' );
 
 module.exports = ( config ) => {
-	gulp.task( 'docs', [ 'build:js:esnext' ], function( cb ) {
-		const esnextBuildPath = path.join( config.ROOT_DIR, config.BUILD_DIR, 'esnext' );
-		const jsDocConfig = {
-			opts: {
-				encoding: 'utf8',
-				destination: path.join( config.BUILD_DIR, 'docs' ),
-				recurse: true,
-				access: 'all'
-			},
-			plugins: [
-				'node_modules/jsdoc/plugins/markdown',
-				'dev/tasks/docs/plugins/comment-fixer'
-			]
-		};
+	const tasks = {
+		buildDocs( cb ) {
+			const esnextBuildPath = path.join( config.ROOT_DIR, config.BUILD_DIR, 'esnext' );
+			const jsDocConfig = {
+				opts: {
+					encoding: 'utf8',
+					destination: path.join( config.BUILD_DIR, 'docs' ),
+					recurse: true,
+					access: 'all'
+				},
+				plugins: [
+					'node_modules/jsdoc/plugins/markdown',
+					'dev/tasks/docs/plugins/comment-fixer'
+				]
+			};
 
-		const patterns = [
-			'README.md',
-			// Add all js and jsdoc files, including tests (which can contain utils).
-			path.join( esnextBuildPath, '**', '*.@(js|jsdoc)' ),
-			// Filter out libs.
-			'!' + path.join( esnextBuildPath, 'ckeditor5', '*', 'lib', '**', '*' )
-		];
+			const patterns = [
+				'README.md',
+				// Add all js and jsdoc files, including tests (which can contain utils).
+				path.join( esnextBuildPath, '**', '*.@(js|jsdoc)' ),
+				// Filter out libs.
+				'!' + path.join( esnextBuildPath, 'ckeditor5', '*', 'lib', '**', '*' )
+			];
 
-		gulp.src( patterns, { read: false } )
-			.pipe( jsdoc( jsDocConfig, cb ) );
-	} );
+			return gulp.src( patterns, { read: false } )
+				.pipe( jsdoc( jsDocConfig, cb ) );
+		},
+
+		register() {
+			gulp.task( 'docs', [ 'build:js:esnext' ], tasks.buildDocs );
+		}
+	};
+
+	return tasks;
 };

+ 7 - 4
dev/tasks/lint/tasks.js

@@ -6,7 +6,6 @@ const gulp = require( 'gulp' );
 const jshint = require( 'gulp-jshint' );
 const jscs = require( 'gulp-jscs' );
 const fs = require( 'fs' );
-const guppy = require( 'git-guppy' )( gulp );
 const gulpFilter = require( 'gulp-filter' );
 const gutil = require( 'gulp-util' );
 
@@ -30,6 +29,8 @@ module.exports = ( config ) => {
 		 * @returns {Stream}
 		 */
 		lintStaged() {
+			const guppy = require( 'git-guppy' )( gulp );
+
 			return guppy.stream( 'pre-commit', { base: './' } )
 				.pipe( gulpFilter( src ) )
 				.pipe( lint() )
@@ -48,12 +49,14 @@ module.exports = ( config ) => {
 				gutil.log( gutil.colors.red( 'Linting failed, commit aborted' ) );
 				process.exit( 1 );
 			}
+		},
+
+		register() {
+			gulp.task( 'lint', tasks.lint );
+			gulp.task( 'lint-staged', tasks.lintStaged );
 		}
 	};
 
-	gulp.task( 'lint', tasks.lint );
-	gulp.task( 'lint-staged', tasks.lintStaged );
-
 	return tasks;
 
 	/**

+ 48 - 10
dev/tasks/test/tasks.js

@@ -16,19 +16,27 @@ const buildUtils = require( '../build/utils' );
 const benderConfig = require( '../../../bender' );
 
 /**
- * Defines Node.js testing task.
+ * Defines Node.js testing task and development tools testing tasks.
  *
- * To run tests under node:
+ * To run tests under Node.js:
  *
  *		gulp test:node
  *
- * To run build before testing:
+ * To run build under Node.js before testing:
  *
  *		gulp test:node:build
  *
- * To run testing with code coverage:
+ * To run testing under Node.js with code coverage:
  *
  *		gulp test:node:coverage
+ *
+ * To run development tools tests:
+ *
+ * 		gulp test:dev
+ *
+ * To run development tools tests with coverage:
+ *
+ * 		gulp test:dev:coverage
  */
 module.exports = () => {
 	const ignoreRegexp = /\/\* ?bender-tags:.*\bbrowser-only\b.*\*\//;
@@ -52,7 +60,7 @@ module.exports = () => {
 		 *
 		 * @returns {Stream}
 		 */
-		prepareCoverage() {
+		prepareNodeCoverage() {
 			const src = benderConfig.coverage.paths.map( ( item ) => {
 				return item.replace( 'build/amd/', 'build/cjs/' );
 			} );
@@ -115,13 +123,43 @@ module.exports = () => {
 		 */
 		skipIgnored() {
 			return filterBy( file => !file.contents.toString().match( ignoreRegexp ) );
+		},
+
+		/**
+		 * Runs dev unit tests.
+		 *
+		 * @returns {Stream}
+		 */
+		devTest() {
+			return gulp.src( 'dev/tests/**/*.js' )
+				.pipe( mocha() )
+				.pipe( tasks.coverage ? istanbul.writeReports() : buildUtils.noop() );
+		},
+
+		/**
+		 * Prepares files for coverage report.
+		 *
+		 * @returns {Stream}
+		 */
+		prepareDevCoverage() {
+			tasks.coverage = true;
+
+			return gulp.src( 'dev/tasks/**/*.js' )
+				.pipe( istanbul() )
+				.pipe( istanbul.hookRequire() );
+		},
+
+		register() {
+			gulp.task( 'test:node:pre-coverage', [ 'build:js:cjs' ], tasks.prepareNodeCoverage );
+			gulp.task( 'test:node', tasks.testInNode );
+			gulp.task( 'test:node:build', [ 'build:js:cjs' ] , tasks.testInNode );
+			gulp.task( 'test:node:coverage', [ 'build:js:cjs', 'test:node:pre-coverage' ], tasks.testInNode );
+
+			gulp.task( 'test:dev:pre-coverage', tasks.prepareDevCoverage );
+			gulp.task( 'test:dev', tasks.devTest );
+			gulp.task( 'test:dev:coverage', [ 'test:dev:pre-coverage' ], tasks.devTest );
 		}
 	};
 
-	gulp.task( 'test:node:pre-coverage', [ 'build:js:cjs' ], tasks.prepareCoverage );
-	gulp.task( 'test:node', tasks.testInNode );
-	gulp.task( 'test:node:build', [ 'build:js:cjs' ] , tasks.testInNode );
-	gulp.task( 'test:node:coverage', [ 'build:js:cjs', 'test:node:pre-coverage' ], tasks.testInNode );
-
 	return tasks;
 };

+ 0 - 1
dev/tests/dev/status.js

@@ -7,7 +7,6 @@
 
 'use strict';
 
-require( '../../tasks/dev/tasks' )( {} );
 const sinon = require( 'sinon' );
 const tools = require( '../../tasks/dev/utils/tools' );
 const git = require( '../../tasks/dev/utils/git' );

+ 0 - 1
dev/tests/dev/update.js

@@ -7,7 +7,6 @@
 
 'use strict';
 
-require( '../../tasks/dev/tasks' )( {} );
 const sinon = require( 'sinon' );
 const tools = require( '../../tasks/dev/utils/tools' );
 const git = require( '../../tasks/dev/utils/git' );

+ 5 - 5
gulpfile.js

@@ -15,11 +15,11 @@ const config = {
 	]
 };
 
-require( './dev/tasks/build/tasks' )( config );
-require( './dev/tasks/dev/tasks' )( config );
-require( './dev/tasks/lint/tasks' )( config );
-require( './dev/tasks/test/tasks' )( config );
-require( './dev/tasks/docs/tasks' )( config );
+require( './dev/tasks/build/tasks' )( config ).register();
+require( './dev/tasks/dev/tasks' )( config ).register();
+require( './dev/tasks/lint/tasks' )( config ).register();
+require( './dev/tasks/test/tasks' )( config ).register();
+require( './dev/tasks/docs/tasks' )( config ).register();
 
 gulp.task( 'default', [ 'build' ] );
 gulp.task( 'pre-commit', [ 'lint-staged' ] );

+ 0 - 6
package.json

@@ -58,13 +58,11 @@
     "gulp-watch": "4.3.5",
     "guppy-pre-commit": "^0.3.0",
     "inquirer": "^0.11.0",
-    "istanbul": "^0.4.1",
     "jsdoc": "^3.4.0",
     "jshint": "^2.9.1",
     "jshint-reporter-jscs": "^0.1.0",
     "merge-stream": "^1.0.0",
     "minimist": "^1.2.0",
-    "mocha": "^2.2.5",
     "mockery": "^1.4.0",
     "multipipe": "^0.3.0",
     "ncp": "^2.0.0",
@@ -87,9 +85,5 @@
   "repository": {
     "type": "git",
     "url": "https://github.com/ckeditor/ckeditor5.git"
-  },
-  "scripts": {
-    "test": "mocha dev/tests --recursive",
-    "coverage": "istanbul cover _mocha dev/tests/ -- --recursive"
   }
 }