Hilo/gulpfile.js
zivyangll c0f2ccf92c test: test add macaca-reporter (#134)
* feat: test add macaca-reporter

* fix: get screenshot name in util

* fix: optimize empty image

* fix: update macaca-reporter

* fix: test:reporter

* fix: use test

* fix: add log

* fix: debug reporter

* fix: add debug log

* fix: only test

* fix: add log

* fix: add log

* fix: add log

* fix: add only

* fix: add e.stack

* fix: require

* fix: debug log

* fix: add reporter
2019-01-24 16:17:45 +08:00

294 lines
8.7 KiB
JavaScript

var fs = require('fs');
var gulp = require('gulp');
var del = require('del');
var merge = require('merge-stream');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var uglify = require('gulp-uglify');
var gulpif = require('gulp-if');
var replace = require('gulp-replace');
var header = require('gulp-header');
var footer = require('gulp-footer');
var zip = require('gulp-zip');
var shell = require('gulp-shell');
var uitest = require('gulp-uitest');
var transformModule = require('gulp-transform-module');
var jshint = require('gulp-jshint');
var pkg = require('./package.json');
var child_process = require('child_process');
const render = require('macaca-reporter/lib/render');
var isWatch = false;
var licenseCommentReg = /\/\*\*[\d\D]+?alibaba.com[\d\D]+?Licensed under the MIT License[\s]+?\*\//g;
var apiCommentReg = /(\/\*\*[\s]+?\*[\s]+?@language=en[\d\D]+?\*\/)[\s]+(\/\*\*[\s]+?\*[\s]+?@language=zh[\d\D]+?\*\/)/g;
//format
var getFileInfo = function(variant){
variant = variant ? (' for ' + variant) : '';
var info = '/**\n';
info += ' * ' + pkg.name + ' ' + pkg.version + variant + '\n';
info += ' * Copyright 2016 alibaba.com\n';
info += ' * Licensed under the MIT License\n';
info += ' */\n';
return info;
};
var createBuildFormatTask = function(type){
var cleanTask = type + '-clean';
var formatTask = type + '-format';
var uglifyTask = type + '-uglify';
var zipTask = type + '-zip';
var destPath = 'build/' + type;
var notConcat = ['commonjs'].indexOf(type) > -1;
//clean dir
gulp.task(cleanTask, function(cb){
del(destPath, cb);
});
//format
gulp.task(formatTask, [cleanTask], function(){
var stream = gulp.src(pkg.sources.files, {
cwd:pkg.sources.dir,
base:pkg.sources.dir
})
.pipe(gulpif(function(file){
return file.path.indexOf('Hilo.js') > -1;
}, replace('{{$version}}', pkg.version)))
.pipe(replace(licenseCommentReg, ''))
.pipe(replace(apiCommentReg, '$1'))
.pipe(transformModule(type))
.pipe(header(getFileInfo(type)))
if(notConcat){
return stream.pipe(gulp.dest(destPath))
}
else{
return stream.pipe(gulp.dest(destPath + '/hilo'))
.pipe(concat('hilo-' + type + '.js'))
.pipe(gulp.dest(destPath));
}
});
//uglify
gulp.task(uglifyTask, [formatTask], function(){
return gulp.src(destPath + '/**/*.js')
.pipe(gulpif(!isWatch, uglify()))
.pipe(header(getFileInfo(type)))
.pipe(rename({extname:".min.js"}))
.pipe(gulp.dest(destPath))
});
//zip
gulp.task(zipTask, [uglifyTask], function(){
return gulp.src(destPath + '/**/*.js')
.pipe(gulpif(!isWatch, zip('hilo-' + type + '.zip')))
.pipe(gulp.dest(destPath));
});
gulp.task(type, [isWatch?uglifyTask:zipTask]);
}
var moduleTypes = ['standalone', 'amd', 'commonjs', 'kissy', 'cmd'];
transformModule.add('standalone', function(metadata){
var head = '(function(window){\nif(!window.Hilo) window.Hilo = {};\n';
var tail = '\n})(window);';
var module = metadata.moduleName;
var requireModules = metadata.requireClasses;
requireModules.forEach(function(requireModule){
if(requireModule !== 'Hilo'){
head += 'var ' + requireModule + ' = window.Hilo.' + requireModule + ';\n';
}
else{
head += 'var Hilo = window.Hilo;'
}
});
if(module === 'Hilo'){
tail = '\nfor(var i in Hilo){window.Hilo[i] = Hilo[i];}' + tail;
}
else{
tail = '\nwindow.Hilo.' + module + ' = ' + module + ';' + tail;
}
return {
head:head,
tail:tail
};
});
moduleTypes.forEach(function(moduleType){
createBuildFormatTask(moduleType);
});
gulp.task('format', moduleTypes);
//flash
gulp.task('flash-clean', function(cb){
del('build/flash', cb);
});
gulp.task('flash', ['flash-clean'], function(){
var js = gulp.src(['src/flash/FlashRenderer.js', 'src/flash/FlashAdaptor.js'])
.pipe(concat('hilo-flash.js'))
.pipe(header('(function(){\n'))
.pipe(header(getFileInfo('flashAdaptor')))
.pipe(footer('})();\n'))
.pipe(gulp.dest('build/flash'))
.pipe(gulpif(!isWatch, uglify()))
.pipe(rename({extname:'.min.js'}))
.pipe(header(getFileInfo('flashAdaptor')))
.pipe(gulp.dest('build/flash'));
var swf = gulp.src(['src/flash/as/bin/hilo.swf'])
.pipe(gulp.dest('build/flash/'));
return merge(js, swf);
});
//extensions
gulp.task('extensions', function(){
var streams = merge();
for(var extensionName in pkg.extensions){
var extensionPathData = pkg.extensions[extensionName];
var src = extensionPathData.files.map(function(src, i, arr){
return 'src/extensions/' + extensionPathData.dir + src;
});
var dest = 'build/' + extensionName;
var stream = gulp.src(src)
.pipe(concat(extensionName + '.js'))
.pipe(header(getFileInfo(extensionName)))
.pipe(gulp.dest(dest))
.pipe(gulpif(!isWatch, uglify()))
.pipe(rename({extname:'.min.js'}))
.pipe(header(getFileInfo(extensionName)))
.pipe(gulp.dest(dest));
streams.add(stream);
}
return streams;
});
//docs
var createDocTask = function(languages){
languages.forEach(function(language, i){
var cleanTask = 'doc-clean-' + language;
var commentTask = 'doc-comment-' + language;
var buildTask = 'doc-' + language;
var codeSrc = 'docs/api-' + language + '/code/';
gulp.task(cleanTask, function(cb){
del('docs/api-' + language, cb);
});
gulp.task(commentTask, [cleanTask], function(){
return gulp.src(pkg.sources.files, {
cwd:pkg.sources.dir,
base:pkg.sources.dir
})
.pipe(replace(apiCommentReg, '$' + (i+1)))
.pipe(replace(/\*[\s]*@language=[a-z]+[\s]*/g, ''))
.pipe(gulp.dest(codeSrc));
});
gulp.task(buildTask, [commentTask], (function(){
var files = pkg.sources.files.map(function(src){
return codeSrc + src;
});
var cmd = 'java ' + [
'-jar',
'tools/jsdoc-toolkit-2.4.0/jsrun.jar',
'tools/jsdoc-toolkit-2.4.0/app/run.js',
codeSrc,
'-d=docs/api-' + language + '/',
'-t=docs/api_template/',
'-r=5',
'-x=js',
// '-q',
'-E=FilesLoad.js',
'-D="ver:' + pkg.version + '"',
'-lang=' + language
].join(' ');
return shell.task(cmd);
})());
});
};
createDocTask(['en', 'zh']);
gulp.task('doc', ['doc-en', 'doc-zh']);
//watch
gulp.task('setIsWatch', function(cb){
isWatch = true;
cb();
});
gulp.task('watch', ['setIsWatch', 'standalone', 'flash', 'extensions'], function(){
gulp.watch('src/**/*.js', ['standalone', 'flash']);
gulp.watch('src/extensions/**/*.js', ['extensions']);
});
gulp.task('npm:clean', function(done){
del('build/npm', done);
});
gulp.task('npm:build', ['npm:clean', 'standalone', 'commonjs'], function(){
var standaloneStream = gulp.src('build/standalone/hilo-standalone.js')
.pipe(footer(`
if(typeof module !== 'undefined' && module.exports){
module.exports = window.Hilo;
}
`))
.pipe(gulp.dest('build/npm'));
var packageStream = gulp.src(['package.json', '.npmignore', 'LICENSE', 'README.md', 'd.ts/hilo.d.ts', 'build/commonjs/**/*'])
.pipe(replace('"name": "Hilo"', '"name": "hilojs"'))
.pipe(gulp.dest('build/npm'));
return merge(standaloneStream, packageStream);
});
gulp.task('npm', ['npm:build'], function(done){
child_process.exec('npm publish build/npm', (error, stdout, stderr) => {
console.log(error, stdout, stderr);
done();
});
});
gulp.task('jshint', ['setIsWatch', 'standalone'], function(){
return gulp.src(['build/standalone/hilo/**/*.js', '!build/standalone/hilo/**/*.min.js'])
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(jshint.reporter('fail'))
});
//test
gulp.task('test', ['jshint'], function () {
return gulp
.src('test/html/index.html')
.pipe(uitest({
width: 600,
height: 480,
hidpi: false,
useContentSize: true,
show: false
}));
});
gulp.task('test:reporter', ['test'], function () {
const data = require('./reports/json-final');
render(data);
console.log('render completed')
});
gulp.task('default', ['format', 'flash', 'extensions']);