From c69820e61415593203f7aa4386c02eea46ed13b2 Mon Sep 17 00:00:00 2001 From: Julie Ralph Date: Tue, 21 Jul 2015 18:56:02 -0700 Subject: [PATCH] chore(test): move to using dart:test for dart unit tests --- gulpfile.js | 32 ++++++++++++--------- modules/angular2/pubspec.yaml | 3 +- modules/angular2/src/test_lib/test_lib.dart | 6 ++-- modules/angular2/src/test_lib/test_lib.ts | 4 +++ pubspec.yaml | 4 +-- tools/build/create_dart_test_main.js | 22 ++++++++++++++ 6 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 tools/build/create_dart_test_main.js diff --git a/gulpfile.js b/gulpfile.js index 0ecb37b72774..12c38290ec21 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -27,9 +27,10 @@ var pubbuild = require('./tools/build/pubbuild'); var dartanalyzer = require('./tools/build/dartanalyzer'); var jsserve = require('./tools/build/jsserve'); var pubserve = require('./tools/build/pubserve'); +var createTestMain = require('./tools/build/create_dart_test_main.js'); var karma = require('karma'); var minimist = require('minimist'); -var runServerDartTests = require('./tools/build/run_server_dart_tests'); +var runServerDartTests = require('./tools/build/run_server_dart_tests'); // TODO - merge this in? var sourcemaps = require('gulp-sourcemaps'); var tsc = require('gulp-typescript'); var util = require('./tools/build/util'); @@ -567,8 +568,8 @@ gulp.task('test.unit.dart', function (done) { '!build/pubget.angular2.dart', '!build/change_detect.dart', '!build/remove-pub-symlinks', - '!test.unit.dart/karma-server', - '!test.unit.dart/karma-run', + '!test.unit.dart/create-dart-test-main', + '!test.unit.dart/pub-run-test', function(error) { // if initial build failed (likely due to build or formatting step) then exit // otherwise karma server doesn't start and we can't continue running properly @@ -579,32 +580,35 @@ gulp.task('test.unit.dart', function (done) { watch('modules/angular2/**', { ignoreInitial: true }, [ '!build/tree.dart', - '!test.unit.dart/karma-run' + '!test.unit.dart/pub-run-test' ]); } ); }); -gulp.task('!test.unit.dart/karma-run', function (done) { - // run the run command in a new process to avoid duplicate logging by both server and runner from - // a single process - runKarma('karma-dart.conf.js', done); -}); +gulp.task('!test.unit.dart/create-dart-test-main', createTestMain); +gulp.task('!test.unit.dart/pub-run-test', function (done) { + // TODO - run for all modules, not just angular2 + // TODO - make one master file which starts all tests. + var testArgs = ['run', 'test', 'main_test.dart', '-p', 'dartium']; -gulp.task('!test.unit.dart/karma-server', function() { - karma.server.start({configFile: __dirname + '/karma-dart.conf.js', reporters: 'dots'}); + var proc = spawn(DART_SDK.PUB, testArgs, {cwd: 'dist/dart/angular2', stdio: 'inherit'}); + proc.on('error', function(code) { + done(new Error('Failed to run dart:test')); + }); + proc.on('close', function() { + done(); + }); }); - gulp.task('test.unit.js/ci', function (done) { karma.server.start({configFile: __dirname + '/karma-js.conf.js', singleRun: true, reporters: ['dots'], browsers: getBrowsersFromCLI()}, done); }); gulp.task('test.unit.dart/ci', function (done) { - karma.server.start({configFile: __dirname + '/karma-dart.conf.js', - singleRun: true, reporters: ['dots'], browsers: getBrowsersFromCLI()}, done); + runSequence(['!test.unit.dart/create-dart-test-main', '!test.unit.dart/pub-run-test']); }); diff --git a/modules/angular2/pubspec.yaml b/modules/angular2/pubspec.yaml index 6fb8b6c9674d..114fb536c9b3 100644 --- a/modules/angular2/pubspec.yaml +++ b/modules/angular2/pubspec.yaml @@ -20,8 +20,9 @@ dependencies: quiver: '^0.21.4' source_span: '^1.0.0' stack_trace: '^1.1.1' + test: '^0.12.3' dev_dependencies: - guinness: '^0.1.17' + guinness2: '^0.0.3' transformers: - angular2 - $dart2js: diff --git a/modules/angular2/src/test_lib/test_lib.dart b/modules/angular2/src/test_lib/test_lib.dart index 9507926d4ba4..f69a81c40f87 100644 --- a/modules/angular2/src/test_lib/test_lib.dart +++ b/modules/angular2/src/test_lib/test_lib.dart @@ -2,8 +2,8 @@ library test_lib.test_lib; import 'dart:async'; -import 'package:guinness/guinness.dart' as gns; -export 'package:guinness/guinness.dart' +import 'package:guinness2/guinness2.dart' as gns; +export 'package:guinness2/guinness2.dart' hide Expect, expect, @@ -23,6 +23,7 @@ import 'package:angular2/src/reflection/reflection_capabilities.dart'; import 'package:angular2/src/di/binding.dart' show bind; import 'package:angular2/src/di/injector.dart' show Injector; import 'package:angular2/src/facade/collection.dart' show StringMapWrapper; +import 'package:angular2/src/dom/browser_adapter.dart'; import 'test_injector.dart'; export 'test_injector.dart' show inject; @@ -45,6 +46,7 @@ class AsyncTestCompleter { } void testSetup() { + BrowserDomAdapter.makeCurrent(); reflector.reflectionCapabilities = new ReflectionCapabilities(); // beforeEach configuration: // - Priority 3: clear the bindings before each test, diff --git a/modules/angular2/src/test_lib/test_lib.ts b/modules/angular2/src/test_lib/test_lib.ts index cb1c9934d937..4677ca555691 100644 --- a/modules/angular2/src/test_lib/test_lib.ts +++ b/modules/angular2/src/test_lib/test_lib.ts @@ -39,6 +39,10 @@ export class AsyncTestCompleter { done() { this._done(); } } +export function testSetup() { + // Intentionally blank, this exists for compatibility with dart. +} + var jsmBeforeEach = _global.beforeEach; var jsmDescribe = _global.describe; var jsmDDescribe = _global.fdescribe; diff --git a/pubspec.yaml b/pubspec.yaml index ace60f941e1f..456860a644d4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ environment: dependencies: observe: '0.13.1' dev_dependencies: - guinness: '^0.1.17' + guinness2: '^0.0.3' intl: '^0.12.4' - unittest: '^0.11.5+4' quiver: '^0.21.4' + test: '^0.12.3' diff --git a/tools/build/create_dart_test_main.js b/tools/build/create_dart_test_main.js new file mode 100644 index 000000000000..854c21bd4ebc --- /dev/null +++ b/tools/build/create_dart_test_main.js @@ -0,0 +1,22 @@ +var glob = require('glob'); +var fs = require('fs'); + +module.exports = function() { + var imports = [ + '@TestOn("browser")', + 'import "package:guinness2/guinness2.dart";', + 'import "package:angular2/src/test_lib/test_lib.dart" show testSetup;']; + var executes = []; + + var matches = glob.sync('**/*_spec.dart', {cwd: 'dist/dart/angular2'}); + + matches.forEach(function(match) { + var varName = match.replace(/[\/.]/g, '_'); + imports.push('import "' + match + '" as ' + varName +';'); + executes.push(' ' + varName + '.main();'); + }); + + var output = imports.join('\n') + '\n\nmain() {\n testSetup();\n' + executes.join('\n') + '\n}'; + + fs.writeFileSync('dist/dart/angular2/main_test.dart', output); +};