chore: karma with JS, Dart

Note: karma with dart is still not working
because of how `karma-dart` loads `package:…` dependencies.

Usage:
```
karma start karma-js.conf.js
karma start karma-dart.conf.js
```

Make sure to set `DARTIUM_BIN` env variable.

Refactors `js2dart`:
- live outside of the traceur module (`tools/js2dart/index.js`)
  so it can be reused by gulp and karma
- automatically build the sources in memory,
  so that `js2dart` can be used without running `gulp build` first
- provide a way to specify the moduleName of a compilation run
  independently of the input filename. This helps error messages
  and source maps (not yet enabled) to report the correct file name

Changes project setup:
- add module `test_lib` that contains the primitives for tests
  (e.g. `describe`, `it`, …)
- clean up some sources that had errors in them
- module names in transpiled js and dart files don’t contain
  `lib`, `test` nor `src` any more (e.g. `di/di`).
This commit is contained in:
Vojta Jina
2014-09-25 14:04:46 -07:00
committed by Tobias Bosch
parent 6335fc407c
commit c3b442ea53
26 changed files with 335 additions and 235 deletions

View File

@ -21,19 +21,27 @@ var js2es5Options = {
script: false, // parse as a module
modules: 'register',
typeAssertionModule: 'assert',
typeAssertions: true,
moduleName: true
typeAssertions: true
};
var js2dartOptions = {
annotations: true, // parse annotations
types: true, // parse types
script: false, // parse as a module
outputLanguage: 'dart',
moduleName: true
outputLanguage: 'dart'
};
var traceur = require('./tools/js2dart/gulp-traceur');
var gulpTraceur = require('./tools/js2dart/gulp-traceur');
function resolveModuleName(fileName) {
var moduleName = fileName
.replace(/.*\/modules\//, '')
.replace(/\/src\//, '/')
.replace(/\/lib\//, '/')
.replace(/\/test\//, '/');
return moduleName;
}
// ---------
// rtts-assert and traceur runtime
@ -45,9 +53,9 @@ gulp.task('jsRuntime/build', function() {
function createJsRuntimeTask(isWatch) {
var srcFn = isWatch ? watch : gulp.src.bind(gulp);
var rttsAssert = srcFn('tools/rtts-assert/src/assert.js')
.pipe(traceur(js2es5Options))
.pipe(gulpTraceur(js2es5Options, resolveModuleName))
.pipe(gulp.dest('build/js'));
var traceurRuntime = srcFn('tools/js2dart/node_modules/traceur/bin/traceur-runtime.js')
var traceurRuntime = srcFn(gulpTraceur.RUNTIME_PATH)
.pipe(gulp.dest('build/js'));
return mergeStreams(rttsAssert, traceurRuntime);
}
@ -57,7 +65,7 @@ function createJsRuntimeTask(isWatch) {
var sourceTypeConfigs = {
dart: {
compiler: function() {
return traceur(js2dartOptions, true);
return gulpTraceur(js2dartOptions, resolveModuleName);
},
transpileSrc: ['modules/**/*.js'],
htmlSrc: ['modules/*/src/**/*.html'],
@ -78,7 +86,7 @@ var sourceTypeConfigs = {
},
js: {
compiler: function() {
return traceur(js2es5Options, true);
return gulpTraceur(js2es5Options, resolveModuleName);
},
transpileSrc: ['modules/**/*.js', 'modules/**/*.es6'],
htmlSrc: ['modules/*/src/**/*.html'],
@ -174,26 +182,12 @@ gulp.task('serve', connect.server({
gulp.task('clean', ['js2dart/clean', 'modules/clean']);
gulp.task('build', function() {
return runSequence(
// sequential
'js2dart/build',
// parallel
['jsRuntime/build', 'modules/build.dart', 'modules/build.js']
);
});
gulp.task('build', ['jsRuntime/build', 'modules/build.dart', 'modules/build.js']);
gulp.task('watch', function() {
runSequence('js2dart/test/watch');
var js2dartWatch = watch(js2dartTasks.paths.js2dartSrc, function(_, done) {
runSequence(
// sequential
'js2dart/build', 'js2dart/test',
// parallel
['jsRuntime/build', 'modules/build.dart', 'modules/build.js'],
done);
});
// parallel is important as both streams are infinite!
runSequence(['js2dart/test/watch', 'js2dart/src/watch']);
var dartModuleWatch = createModuleTask(sourceTypeConfigs.dart, true);
var jsModuleWatch = createModuleTask(sourceTypeConfigs.js, true);
return mergeStreams(js2dartWatch, dartModuleWatch, jsModuleWatch, createJsRuntimeTask(true));
return mergeStreams(dartModuleWatch, jsModuleWatch, createJsRuntimeTask(true));
});