| // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /// This is a utility to run and debug an individual DDC compiled test. |
| /// Tests can be run with either node or devtool (a Chrome-based utility with |
| /// DOM APIs and developer tools support). |
| /// |
| /// Install devtool via: |
| /// > npm install -g devtool |
| /// |
| /// Run via: |
| /// > devtool tool/run.js -- corelib_2/apply2_test |
| /// or |
| /// > node tool/run.js corelib_2/apply2_test |
| /// |
| /// See TODO below on async / unittest support. |
| |
| var args = process.argv.slice(2); |
| if (args.length != 1) { |
| throw new Error("Usage: devtool tool/run.js <test-module-name>"); |
| } |
| var test = args[0]; |
| |
| var requirejs = require('requirejs'); |
| var ddcdir = __dirname + '/../'; |
| requirejs.config({ |
| baseUrl: ddcdir + 'gen/codegen_output', |
| paths: { |
| dart_sdk: ddcdir + 'lib/js/amd/dart_sdk', |
| async_helper: ddcdir + 'gen/codegen_output/pkg/async_helper', |
| expect: ddcdir + 'gen/codegen_output/pkg/expect', |
| js: ddcdir + 'gen/codegen_output/pkg/js', |
| matcher: ddcdir + 'gen/codegen_output/pkg/matcher', |
| minitest: ddcdir + 'gen/codegen_output/pkg/minitest', |
| path: ddcdir + 'gen/codegen_output/pkg/path', |
| stack_trace: ddcdir + 'gen/codegen_output/pkg/stack_trace', |
| unittest: ddcdir + 'gen/codegen_output/pkg/unittest', |
| } |
| }); |
| |
| // TODO(vsm): Factor out test framework code in test/browser/language_tests.js |
| // and use here. Async tests and unittests won't work without it. |
| var sdk = requirejs('dart_sdk'); |
| sdk.dart.ignoreWhitelistedErrors(false); |
| |
| let negative = /negative_test/.test(test); |
| function finish(e) { |
| if (negative) { |
| if (e) { |
| e = null; |
| } else { |
| e = new Error("test marked as 'negative' but did not throw"); |
| } |
| } |
| if (e) { |
| console.log('Test ' + test + ' failed:\n' + e.toString()); |
| sdk.dart.stackPrint(e); |
| } else { |
| console.log('Test ' + test + ' passed.'); |
| } |
| } |
| |
| sdk.dart.ignoreWhitelistedErrors(false); |
| sdk._isolate_helper.startRootIsolate(() => {}, []); |
| // Make it easier to debug test failures and required for formatter test that |
| // assumes custom formatters are enabled. |
| sdk._debugger.registerDevtoolsFormatter(); |
| |
| var async_helper = requirejs('async_helper').async_helper; |
| async_helper.asyncTestInitialize(finish); |
| |
| var module = requirejs(test); |
| var lib = test.split('/').slice(-1)[0]; |
| try { |
| if (module[lib]._expectRuntimeError) negative = true; |
| var result = module[lib].main(); |
| // async_helper tests call finish directly - call here for all other |
| // tests. |
| if (!async_helper.asyncTestStarted) { |
| if (!result || !(sdk.async.Future.is(result))) { |
| finish(); |
| } else { |
| // Wait iff result is a future |
| result.then(sdk.dart.dynamic)(() => finish(), { onError: (e) => finish(e) }); |
| } |
| } |
| } catch (e) { |
| finish(e); |
| } |