#!/usr/bin/env dart // Copyright (c) 2012, 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. // TODO(ager): Get rid of this version of test.dart when we don't have // to worry about the special runtime checkout anymore. // This file is identical to test.dart with test suites in the // directories samples, client, compiler, and utils removed. #library("test"); #import("dart:io"); #import("testing/dart/test_runner.dart"); #import("testing/dart/test_options.dart"); #import("testing/dart/test_suite.dart"); #import("testing/dart/http_server.dart"); #import("../tests/co19/test_config.dart"); #import("../runtime/tests/vm/test_config.dart"); /** * The directories that contain test suites which follow the conventions * required by [StandardTestSuite]'s forDirectory constructor. * New test suites should follow this convention because it makes it much * simpler to add them to test.dart. Existing test suites should be * moved to here, if possible. */ final TEST_SUITE_DIRECTORIES = [ new Path('runtime/tests/vm'), new Path('tests/corelib'), new Path('tests/isolate'), new Path('tests/language'), new Path('tests/lib'), new Path('tests/standalone'), new Path('tests/utils'), ]; main() { var startTime = new Date.now(); var optionsParser = new TestOptionsParser(); List configurations = optionsParser.parse(new Options().arguments); if (configurations == null) return; // Extract global options from first configuration. var firstConf = configurations[0]; Map selectors = firstConf['selectors']; var maxProcesses = firstConf['tasks']; var progressIndicator = firstConf['progress']; var verbose = firstConf['verbose']; var printTiming = firstConf['time']; var listTests = firstConf['list']; if (!firstConf['append_logs']) { var file = new File(TestUtils.flakyFileName()); if (file.existsSync()) { file.deleteSync(); } } // Print the configurations being run by this execution of // test.dart. However, don't do it if the silent progress indicator // is used. This is only needed because of the junit tests. if (progressIndicator != 'silent') { List output_words = configurations.length > 1 ? ['Test configurations:'] : ['Test configuration:']; for (Map conf in configurations) { List settings = ['compiler', 'runtime', 'mode', 'arch'] .mappedBy((name) => conf[name]).toList(); if (conf['checked']) settings.add('checked'); output_words.add(Strings.join(settings, '_')); } print(Strings.join(output_words, ' ')); } var testSuites = new List(); for (var conf in configurations) { if (selectors.containsKey('co19')) { testSuites.add(new Co19TestSuite(conf)); } if (conf['runtime'] == 'vm' && selectors.containsKey('vm')) { // vm tests contain both cc tests (added here) and dart tests (added in // [TEST_SUITE_DIRECTORIES]). testSuites.add(new VMTestSuite(conf)); } for (final testSuiteDir in TEST_SUITE_DIRECTORIES) { final name = testSuiteDir.filename; if (selectors.containsKey(name)) { testSuites.add(new StandardTestSuite.forDirectory(conf, testSuiteDir)); } } } // Start global http server that serves the entire dart repo. // The http server is available on localhost:9876 for any // test that needs to load resources from the repo over http. if (!listTests) { // Only start the server if we are running browser tests. var runningBrowserTests = configurations.any((config) { return TestUtils.isBrowserRuntime(config['runtime']); }); if (runningBrowserTests) startHttpServer('127.0.0.1', 9876); } var maxBrowserProcesses = maxProcesses; // Start process queue. new ProcessQueue( maxProcesses, maxBrowserProcesses, progressIndicator, startTime, printTiming, testSuites, () => TestingServerRunner.terminateHttpServers(), verbose, listTests); }