// 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 "); } 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); }