8
0

tasks.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /* jshint node: true, esnext: true */
  2. 'use strict';
  3. const gulp = require( 'gulp' );
  4. const gutil = require( 'gulp-util' );
  5. const mocha = require( 'gulp-mocha' );
  6. const chai = require( 'chai' );
  7. const filterBy = require( 'gulp-filter-by' );
  8. const filter = require( 'gulp-filter' );
  9. const sinon = require( 'sinon' );
  10. const minimist = require( 'minimist' );
  11. const devTools = require( '../dev/utils/tools' );
  12. const semver = require( 'semver' );
  13. module.exports = () => {
  14. const ignoreRegexp = /\/\* ?bender-tags:.*\bbrowser-only\b.*\*\//;
  15. // Inject globals before running tests.
  16. global.should = chai.should;
  17. global.expect = chai.expect;
  18. global.assert = chai.assert;
  19. global.sinon = sinon;
  20. const tasks = {
  21. testEditor() {
  22. const options = minimist( process.argv.slice( 2 ), {
  23. boolean: [ 'node' ],
  24. default: {
  25. 'node': false
  26. }
  27. } );
  28. if ( options.node ) {
  29. return tasks.testInNode();
  30. }
  31. },
  32. testInNode() {
  33. const minVersion = '6.1.0';
  34. if ( semver.lt( process.version, minVersion ) ) {
  35. throw new gutil.PluginError( {
  36. plugin: 'test-editor',
  37. message: `Wrong Node.js version. Please use Node.js in version v${ minVersion } or higher.`
  38. } );
  39. }
  40. const src = [
  41. 'build/cjs/tests/**/*.js',
  42. '!**/_utils/**/*.js',
  43. '!build/cjs/tests/{ui,ui-*}/**/*.js',
  44. '!build/cjs/tests/theme-*/**/*.js'
  45. ];
  46. return gulp.src( src )
  47. .pipe( tasks.skipManual() )
  48. .pipe( tasks.skipIgnored() )
  49. .pipe( mocha() );
  50. },
  51. /**
  52. * Removes manual test files from source stream. It checks if the markdown file with the same name exists.
  53. *
  54. * @returns {Stream}
  55. */
  56. skipManual() {
  57. return filter( ( file ) => {
  58. return !devTools.isFile( file.path.slice( 0, -3 ) + '.md' );
  59. } );
  60. },
  61. /**
  62. * Skips test files that are marked to be ignored when testing outside browser.
  63. * To ignore file, add `browser-only` to bender-tags comment in test file.
  64. *
  65. * @returns {Stream}
  66. */
  67. skipIgnored() {
  68. return filterBy( file => !file.contents.toString().match( ignoreRegexp ) );
  69. }
  70. };
  71. gulp.task( 'test-editor', [ 'build:js:cjs' ], tasks.testEditor );
  72. return tasks;
  73. };