Skip to content

Commit c3b442e

Browse files
vojtajinatbosch
authored andcommitted
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`).
1 parent 6335fc4 commit c3b442e

26 files changed

Lines changed: 335 additions & 235 deletions

gulpfile.js

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,27 @@ var js2es5Options = {
2121
script: false, // parse as a module
2222
modules: 'register',
2323
typeAssertionModule: 'assert',
24-
typeAssertions: true,
25-
moduleName: true
24+
typeAssertions: true
2625
};
2726

2827
var js2dartOptions = {
2928
annotations: true, // parse annotations
3029
types: true, // parse types
3130
script: false, // parse as a module
32-
outputLanguage: 'dart',
33-
moduleName: true
31+
outputLanguage: 'dart'
3432
};
3533

36-
var traceur = require('./tools/js2dart/gulp-traceur');
34+
var gulpTraceur = require('./tools/js2dart/gulp-traceur');
35+
36+
function resolveModuleName(fileName) {
37+
var moduleName = fileName
38+
.replace(/.*\/modules\//, '')
39+
.replace(/\/src\//, '/')
40+
.replace(/\/lib\//, '/')
41+
.replace(/\/test\//, '/');
42+
return moduleName;
43+
}
44+
3745

3846
// ---------
3947
// rtts-assert and traceur runtime
@@ -45,9 +53,9 @@ gulp.task('jsRuntime/build', function() {
4553
function createJsRuntimeTask(isWatch) {
4654
var srcFn = isWatch ? watch : gulp.src.bind(gulp);
4755
var rttsAssert = srcFn('tools/rtts-assert/src/assert.js')
48-
.pipe(traceur(js2es5Options))
56+
.pipe(gulpTraceur(js2es5Options, resolveModuleName))
4957
.pipe(gulp.dest('build/js'));
50-
var traceurRuntime = srcFn('tools/js2dart/node_modules/traceur/bin/traceur-runtime.js')
58+
var traceurRuntime = srcFn(gulpTraceur.RUNTIME_PATH)
5159
.pipe(gulp.dest('build/js'));
5260
return mergeStreams(rttsAssert, traceurRuntime);
5361
}
@@ -57,7 +65,7 @@ function createJsRuntimeTask(isWatch) {
5765
var sourceTypeConfigs = {
5866
dart: {
5967
compiler: function() {
60-
return traceur(js2dartOptions, true);
68+
return gulpTraceur(js2dartOptions, resolveModuleName);
6169
},
6270
transpileSrc: ['modules/**/*.js'],
6371
htmlSrc: ['modules/*/src/**/*.html'],
@@ -78,7 +86,7 @@ var sourceTypeConfigs = {
7886
},
7987
js: {
8088
compiler: function() {
81-
return traceur(js2es5Options, true);
89+
return gulpTraceur(js2es5Options, resolveModuleName);
8290
},
8391
transpileSrc: ['modules/**/*.js', 'modules/**/*.es6'],
8492
htmlSrc: ['modules/*/src/**/*.html'],
@@ -174,26 +182,12 @@ gulp.task('serve', connect.server({
174182

175183
gulp.task('clean', ['js2dart/clean', 'modules/clean']);
176184

177-
gulp.task('build', function() {
178-
return runSequence(
179-
// sequential
180-
'js2dart/build',
181-
// parallel
182-
['jsRuntime/build', 'modules/build.dart', 'modules/build.js']
183-
);
184-
});
185+
gulp.task('build', ['jsRuntime/build', 'modules/build.dart', 'modules/build.js']);
185186

186187
gulp.task('watch', function() {
187-
runSequence('js2dart/test/watch');
188-
var js2dartWatch = watch(js2dartTasks.paths.js2dartSrc, function(_, done) {
189-
runSequence(
190-
// sequential
191-
'js2dart/build', 'js2dart/test',
192-
// parallel
193-
['jsRuntime/build', 'modules/build.dart', 'modules/build.js'],
194-
done);
195-
});
188+
// parallel is important as both streams are infinite!
189+
runSequence(['js2dart/test/watch', 'js2dart/src/watch']);
196190
var dartModuleWatch = createModuleTask(sourceTypeConfigs.dart, true);
197191
var jsModuleWatch = createModuleTask(sourceTypeConfigs.js, true);
198-
return mergeStreams(js2dartWatch, dartModuleWatch, jsModuleWatch, createJsRuntimeTask(true));
192+
return mergeStreams(dartModuleWatch, jsModuleWatch, createJsRuntimeTask(true));
199193
});

karma-dart.conf.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Karma configuration
2+
// Generated on Thu Sep 25 2014 11:52:02 GMT-0700 (PDT)
3+
4+
module.exports = function(config) {
5+
config.set({
6+
7+
frameworks: ['dart-unittest'],
8+
9+
files: [
10+
{pattern: 'packages/**/*.dart', included: false},
11+
{pattern: 'modules/*/src/**/*.js', included: false},
12+
{pattern: 'modules/*/test/**/*.js', included: true},
13+
{pattern: 'modules/**/*.dart', included: false},
14+
'packages/browser/dart.js'
15+
],
16+
17+
karmaDartImports: {
18+
guinness: 'package:guinness/guinness_html.dart'
19+
},
20+
21+
preprocessors: {
22+
'modules/**/*.js': ['traceur']
23+
},
24+
customFileHandlers: [{
25+
urlRegex: /.*\/packages\/.*$/,
26+
handler: function(request, response, fa, fb, basePath) {
27+
var url = request.url;
28+
var path = url.indexOf('?') > -1 ? url.substring(0, url.indexOf('?')) : url;
29+
var contets = fs.readFileSync(basePath + path);
30+
response.writeHead(200);
31+
response.end(contets);
32+
}
33+
}],
34+
traceurPreprocessor: {
35+
options: {
36+
outputLanguage: 'dart',
37+
script: false,
38+
modules: 'register',
39+
types: true,
40+
// typeAssertions: true,
41+
// typeAssertionModule: 'assert',
42+
annotations: true
43+
},
44+
resolveModuleName: function(fileName) {
45+
var moduleName = fileName
46+
.replace(/.*\/modules\//, '')
47+
.replace(/\/src\//, '/')
48+
.replace(/\/test\//, '/');
49+
return moduleName;
50+
},
51+
transformPath: function(fileName) {
52+
return fileName.replace('.js', '.dart');
53+
}
54+
},
55+
56+
browsers: ['Dartium']
57+
});
58+
59+
60+
config.plugins.push(require('./tools/js2dart/karma-traceur-preprocessor'));
61+
};

karma-js.conf.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Karma configuration
2+
// Generated on Thu Sep 25 2014 11:52:02 GMT-0700 (PDT)
3+
4+
module.exports = function(config) {
5+
config.set({
6+
7+
frameworks: ['jasmine'],
8+
9+
files: [
10+
'node_modules/traceur/bin/traceur-runtime.js',
11+
'./karma-mock-annotations.js',
12+
'modules/**/test_lib/**/*.es6',
13+
'modules/**/*.js',
14+
'modules/**/*.es6',
15+
'test-main.js'
16+
],
17+
18+
preprocessors: {
19+
'modules/**/*.js': ['traceur'],
20+
'modules/**/*.es6': ['traceur']
21+
},
22+
23+
traceurPreprocessor: {
24+
options: {
25+
outputLanguage: 'es5',
26+
script: false,
27+
modules: 'register',
28+
types: true,
29+
// TODO: turn this on!
30+
// typeAssertions: true,
31+
// typeAssertionModule: 'assert',
32+
annotations: true
33+
},
34+
resolveModuleName: function(fileName) {
35+
var moduleName = fileName
36+
.replace(/.*\/modules\//, '')
37+
.replace(/\/src\//, '/')
38+
.replace(/\/test\//, '/');
39+
return moduleName;
40+
},
41+
transformPath: function(fileName) {
42+
return fileName.replace('.es6', '');
43+
}
44+
},
45+
46+
browsers: ['Chrome']
47+
});
48+
49+
config.plugins.push(require('./tools/js2dart/karma-traceur-preprocessor'));
50+
};

karma-mock-annotations.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
// TODO: Remove these annotations in the JS traceur build as they are only needed in Dart
3+
window.FIELD = function() {};

modules/change_detection/pubspec.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ environment:
33
sdk: '>=1.4.0'
44
dependencies:
55
dev_dependencies:
6-
unittest: '>=0.10.1 <0.12.0'
6+
test_lib:
7+
path: ../test_lib

modules/core/pubspec.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ dependencies:
99
facade:
1010
path: ../facade
1111
dev_dependencies:
12-
unittest: '>=0.10.1 <0.12.0'
12+
test_lib:
13+
path: ../test_lib

modules/core/src/compiler/compiler.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Future} from 'facade/lang';
1+
import {Future, Type} from 'facade/lang';
22
import {Element} from 'facade/dom';
33
import {ProtoView} from '../view/proto_view';
44
import {TemplateLoader} from './template_loader';

modules/core/test/compiler/compiler_spec.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import {describe, id} from 'spec/spec';
1+
import {describe, id} from 'test_lib/test_lib';
2+
import {Compiler} from './compiler';
23

3-
function main() {
4+
export function main() {
45
describe('compiler', () => {
56
it('should hello', () => {
67
print('I am working');

modules/di/pubspec.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ dependencies:
55
facade:
66
path: ../facade
77
dev_dependencies:
8-
unittest: '>=0.10.1 <0.12.0'
8+
test_lib:
9+
path: ../test_lib

modules/di/src/key.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export class Key {
2+
3+
}

0 commit comments

Comments
 (0)