Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(367)

Side by Side Diff: tools/testing/dart/test_suite.dart

Issue 700033003: Enable dart2js compilation for new HTML tests. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * Classes and methods for enumerating and preparing tests. 6 * Classes and methods for enumerating and preparing tests.
7 * 7 *
8 * This library includes: 8 * This library includes:
9 * 9 *
10 * - Creating tests by listing all the Dart files in certain directories, 10 * - Creating tests by listing all the Dart files in certain directories,
(...skipping 21 matching lines...) Expand all
32 RuntimeConfiguration; 32 RuntimeConfiguration;
33 33
34 part "browser_test.dart"; 34 part "browser_test.dart";
35 35
36 36
37 RegExp multiHtmlTestGroupRegExp = new RegExp(r"\s*[^/]\s*group\('[^,']*"); 37 RegExp multiHtmlTestGroupRegExp = new RegExp(r"\s*[^/]\s*group\('[^,']*");
38 RegExp multiHtmlTestRegExp = new RegExp(r"useHtmlIndividualConfiguration()"); 38 RegExp multiHtmlTestRegExp = new RegExp(r"useHtmlIndividualConfiguration()");
39 // Require at least one non-space character before '///' 39 // Require at least one non-space character before '///'
40 RegExp multiTestRegExp = new RegExp(r"\S *" 40 RegExp multiTestRegExp = new RegExp(r"\S *"
41 r"/// \w+:(.*)"); 41 r"/// \w+:(.*)");
42 RegExp dartExtension = new RegExp(r'\.dart$');
42 43
43 /** 44 /**
44 * A simple function that tests [arg] and returns `true` or `false`. 45 * A simple function that tests [arg] and returns `true` or `false`.
45 */ 46 */
46 typedef bool Predicate<T>(T arg); 47 typedef bool Predicate<T>(T arg);
47 48
48 typedef void CreateTest(Path filePath, 49 typedef void CreateTest(Path filePath,
49 Path originTestPath, 50 Path originTestPath,
50 bool hasCompileError, 51 bool hasCompileError,
51 bool hasRuntimeError, 52 bool hasRuntimeError,
(...skipping 1222 matching lines...) Expand 10 before | Expand all | Expand 10 after
1274 htmlTest.closeSync(); 1275 htmlTest.closeSync();
1275 } 1276 }
1276 1277
1277 if (compiler != 'none') { 1278 if (compiler != 'none') {
1278 commands.add( 1279 commands.add(
1279 _compileCommand( 1280 _compileCommand(
1280 dartWrapperFilename, 1281 dartWrapperFilename,
1281 compiledDartWrapperFilename, 1282 compiledDartWrapperFilename,
1282 compiler, 1283 compiler,
1283 tempDir, 1284 tempDir,
1284 vmOptions,
1285 optionsFromFile)); 1285 optionsFromFile));
1286 } 1286 }
1287 1287
1288 // some tests require compiling multiple input scripts. 1288 // some tests require compiling multiple input scripts.
1289 List<String> otherScripts = optionsFromFile['otherScripts']; 1289 List<String> otherScripts = optionsFromFile['otherScripts'];
1290 for (String name in otherScripts) { 1290 for (String name in otherScripts) {
1291 Path namePath = new Path(name); 1291 Path namePath = new Path(name);
1292 String fileName = namePath.filename; 1292 String fileName = namePath.filename;
1293 Path fromPath = filePath.directoryPath.join(namePath); 1293 Path fromPath = filePath.directoryPath.join(namePath);
1294 if (compiler != 'none') { 1294 if (compiler != 'none') {
1295 assert(namePath.extension == 'dart'); 1295 assert(namePath.extension == 'dart');
1296 commands.add( 1296 commands.add(
1297 _compileCommand( 1297 _compileCommand(
1298 fromPath.toNativePath(), 1298 fromPath.toNativePath(),
1299 '$tempDir/$fileName.js', 1299 '$tempDir/$fileName.js',
1300 compiler, 1300 compiler,
1301 tempDir, 1301 tempDir,
1302 vmOptions,
1303 optionsFromFile)); 1302 optionsFromFile));
1304 } 1303 }
1305 if (compiler == 'none') { 1304 if (compiler == 'none') {
1306 // For the tests that require multiple input scripts but are not 1305 // For the tests that require multiple input scripts but are not
1307 // compiled, move the input scripts over with the script so they can 1306 // compiled, move the input scripts over with the script so they can
1308 // be accessed. 1307 // be accessed.
1309 String result = new File(fromPath.toNativePath()).readAsStringSync(); 1308 String result = new File(fromPath.toNativePath()).readAsStringSync();
1310 new File('$tempDir/$fileName').writeAsStringSync(result); 1309 new File('$tempDir/$fileName').writeAsStringSync(result);
1311 } 1310 }
1312 } 1311 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1376 void enqueueHtmlTest( 1375 void enqueueHtmlTest(
1377 HtmlTestInformation info, 1376 HtmlTestInformation info,
1378 String testName, 1377 String testName,
1379 expectations) { 1378 expectations) {
1380 final String compiler = configuration['compiler']; 1379 final String compiler = configuration['compiler'];
1381 final String runtime = configuration['runtime']; 1380 final String runtime = configuration['runtime'];
1382 // Html tests work only with the browser controller. 1381 // Html tests work only with the browser controller.
1383 if (!TestUtils.isBrowserRuntime(runtime) || runtime == 'drt') { 1382 if (!TestUtils.isBrowserRuntime(runtime) || runtime == 'drt') {
1384 return; 1383 return;
1385 } 1384 }
1385 bool compileToJS = (compiler == 'dart2js');
1386 1386
1387 final Path filePath = info.filePath; 1387 final Path filePath = info.filePath;
1388 final String tempDir = createOutputDirectory(filePath, ''); 1388 final String tempDir = createOutputDirectory(filePath, '');
1389 final Uri tempUri = new Uri.file('$tempDir/'); 1389 final Uri tempUri = new Uri.file('$tempDir/');
1390 String contents = htmlTest.getContents(info); 1390 String contents = htmlTest.getContents(info, compileToJS);
1391 final commands = [];
1391 1392
1392 void Fail(String message) { 1393 void Fail(String message) {
1393 var msg = "$message: ${info.filePath}"; 1394 var msg = "$message: ${info.filePath}";
1394 DebugLogger.warning(msg); 1395 DebugLogger.warning(msg);
1395 contents = htmlTest.makeFailingHtmlFile(msg); 1396 contents = htmlTest.makeFailingHtmlFile(msg);
1396 } 1397 }
1397 1398
1398 if (info.scripts.length > 0) { 1399 if (info.scripts.length > 0) {
1399 Uri testUri = new Uri.file(filePath.toNativePath()); 1400 Uri testUri = new Uri.file(filePath.toNativePath());
1400 for (String scriptPath in info.scripts) { 1401 for (String scriptPath in info.scripts) {
1401 if (!scriptPath.endsWith('.dart') && !scriptPath.endsWith('.js')) { 1402 if (!scriptPath.endsWith('.dart') && !scriptPath.endsWith('.js')) {
1402 Fail('HTML test scripts must be dart or javascript: $scriptPath'); 1403 Fail('HTML test scripts must be dart or javascript: $scriptPath');
1403 break; 1404 break;
1404 } 1405 }
1405 Uri uri = Uri.parse(scriptPath); 1406 Uri uri = Uri.parse(scriptPath);
1406 if (uri.isAbsolute) { 1407 if (uri.isAbsolute) {
1407 Fail('HTML test scripts must have relative paths: $scriptPath'); 1408 Fail('HTML test scripts must have relative paths: $scriptPath');
1408 break; 1409 break;
1409 } 1410 }
1410 if (uri.pathSegments.length > 1) { 1411 if (uri.pathSegments.length > 1) {
1411 Fail('HTML test scripts must be in test directory: $scriptPath'); 1412 Fail('HTML test scripts must be in test directory: $scriptPath');
1412 break; 1413 break;
1413 } 1414 }
1414 Uri script = testUri.resolveUri(uri); 1415 Uri script = testUri.resolveUri(uri);
1416 Uri copiedScript = tempUri.resolveUri(uri);
1415 if (compiler == 'none' || scriptPath.endsWith('.js')) { 1417 if (compiler == 'none' || scriptPath.endsWith('.js')) {
1416 Uri copiedScript = tempUri.resolveUri(uri);
1417 new File.fromUri(copiedScript).writeAsStringSync( 1418 new File.fromUri(copiedScript).writeAsStringSync(
1418 new File.fromUri(script).readAsStringSync()); 1419 new File.fromUri(script).readAsStringSync());
1419 } else { 1420 } else {
1420 // TODO(21514): Compile scripts into output directory. 1421 commands.add(_compileCommand(
1421 Fail('HTML test scripts don\'t support dart2js yet'); 1422 script.toFilePath(),
1422 break; 1423 copiedScript.toFilePath().replaceFirst(dartExtension, '.js'),
1424 compiler,
1425 tempDir,
1426 info.optionsFromFile));
1423 } 1427 }
1424 } 1428 }
1425 } 1429 }
1426 final Uri htmlFile = tempUri.resolve(filePath.filename); 1430 final Uri htmlFile = tempUri.resolve(filePath.filename);
1427 new File.fromUri(htmlFile).writeAsStringSync(contents); 1431 new File.fromUri(htmlFile).writeAsStringSync(contents);
1428 1432
1429 var htmlPath = _createUrlPathFromFile(new Path(htmlFile.toFilePath())); 1433 var htmlPath = _createUrlPathFromFile(new Path(htmlFile.toFilePath()));
1430 var fullHtmlPath = _getUriForBrowserTest(htmlPath, null).toString(); 1434 var fullHtmlPath = _getUriForBrowserTest(htmlPath, null).toString();
1431 var commands = [ 1435 commands.add(CommandBuilder.instance.getBrowserHtmlTestCommand(
1432 CommandBuilder.instance.getBrowserHtmlTestCommand( 1436 runtime,
1433 runtime, 1437 fullHtmlPath,
1434 fullHtmlPath, 1438 configuration,
1435 configuration, 1439 info.expectedMessages));
1436 info.expectedMessages)];
1437 String testDisplayName = '$suiteName/$testName'; 1440 String testDisplayName = '$suiteName/$testName';
1438 var testCase = new BrowserTestCase( 1441 var testCase = new BrowserTestCase(
1439 testDisplayName, 1442 testDisplayName,
1440 commands, 1443 commands,
1441 configuration, 1444 configuration,
1442 expectations, 1445 expectations,
1443 info, 1446 info,
1444 isNegative(info), 1447 isNegative(info),
1445 fullHtmlPath); 1448 fullHtmlPath);
1446 enqueueNewTestCase(testCase); 1449 enqueueNewTestCase(testCase);
1447 return; 1450 return;
1448 } 1451 }
1449 1452
1450 /** Helper to create a compilation command for a single input file. */ 1453 /** Helper to create a compilation command for a single input file. */
1451 Command _compileCommand(String inputFile, String outputFile, 1454 Command _compileCommand(String inputFile, String outputFile,
1452 String compiler, String dir, vmOptions, optionsFromFile) { 1455 String compiler, String dir, optionsFromFile) {
1453 assert (['dart2js', 'dart2dart'].contains(compiler)); 1456 assert (['dart2js', 'dart2dart'].contains(compiler));
1454 String executable = compilerPath; 1457 String executable;
1455 List<String> args = TestUtils.standardOptions(configuration); 1458 List<String> args;
1459 if (compilerPath.endsWith('.dart')) {
1460 // Run the compiler script via the Dart VM.
1461 executable = dartVmBinaryFileName;
1462 args = [compilerPath];
1463 } else {
1464 executable = compilerPath;
1465 args = [];
1466 }
1467 args.addAll(TestUtils.standardOptions(configuration));
1456 String packageRoot = 1468 String packageRoot =
1457 packageRootArgument(optionsFromFile['packageRoot']); 1469 packageRootArgument(optionsFromFile['packageRoot']);
1458 if (packageRoot != null) { 1470 if (packageRoot != null) args.add(packageRoot);
1459 args.add(packageRoot);
1460 }
1461 args.add('--out=$outputFile'); 1471 args.add('--out=$outputFile');
1462 if (configuration['csp']) args.add('--csp'); 1472 if (configuration['csp']) args.add('--csp');
1463 args.add(inputFile); 1473 args.add(inputFile);
1464 args.addAll(optionsFromFile['sharedOptions']); 1474 List<String> options = optionsFromFile['sharedOptions'];
1465 if (executable.endsWith('.dart')) { 1475 if (options != null) args.addAll(options);
1466 // Run the compiler script via the Dart VM.
1467 args.insert(0, executable);
1468 executable = dartVmBinaryFileName;
1469 }
1470 return CommandBuilder.instance.getCompilationCommand( 1476 return CommandBuilder.instance.getCompilationCommand(
1471 compiler, outputFile, !useSdk, 1477 compiler, outputFile, !useSdk,
1472 dart2JsBootstrapDependencies, compilerPath, args, environmentOverrides); 1478 dart2JsBootstrapDependencies, compilerPath, args, environmentOverrides);
1473 } 1479 }
1474 1480
1475 /** Helper to create a Polymer deploy command for a single HTML file. */ 1481 /** Helper to create a Polymer deploy command for a single HTML file. */
1476 Command _polymerDeployCommand(String inputFile, String outputDir, 1482 Command _polymerDeployCommand(String inputFile, String outputDir,
1477 optionsFromFile) { 1483 optionsFromFile) {
1478 List<String> args = []; 1484 List<String> args = [];
1479 String packageRoot = packageRootArgument(optionsFromFile['packageRoot']); 1485 String packageRoot = packageRootArgument(optionsFromFile['packageRoot']);
(...skipping 996 matching lines...) Expand 10 before | Expand all | Expand 10 after
2476 * $pass tests are expected to pass 2482 * $pass tests are expected to pass
2477 * $failOk tests are expected to fail that we won't fix 2483 * $failOk tests are expected to fail that we won't fix
2478 * $fail tests are expected to fail that we should fix 2484 * $fail tests are expected to fail that we should fix
2479 * $crash tests are expected to crash that we should fix 2485 * $crash tests are expected to crash that we should fix
2480 * $timeout tests are allowed to timeout 2486 * $timeout tests are allowed to timeout
2481 * $compileErrorSkip tests are skipped on browsers due to compile-time error 2487 * $compileErrorSkip tests are skipped on browsers due to compile-time error
2482 """; 2488 """;
2483 print(report); 2489 print(report);
2484 } 2490 }
2485 } 2491 }
OLDNEW
« tools/testing/dart/html_test.dart ('K') | « tools/testing/dart/html_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698