| // Copyright (c) 2018, 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. |
| |
| // Test that dump-info has no effect on the compiler output. |
| |
| import 'dart:io'; |
| |
| import 'package:path/path.dart' as path; |
| import 'package:expect/expect.dart'; |
| |
| import 'launch_helper.dart' show dart2JsCommand; |
| |
| copyDirectory(Directory sourceDir, Directory destinationDir) { |
| for (var element in sourceDir.listSync()) { |
| if (element.path.endsWith('.git')) continue; |
| String newPath = path.join( |
| destinationDir.path, |
| path.basename(element.path), |
| ); |
| if (element is File) { |
| element.copySync(newPath); |
| } else if (element is Directory) { |
| Directory newDestinationDir = Directory(newPath); |
| newDestinationDir.createSync(); |
| copyDirectory(element, newDestinationDir); |
| } |
| } |
| } |
| |
| void main() { |
| Directory tmpDir = Directory.systemTemp.createTempSync('dump_info_test_'); |
| Directory out1 = Directory.fromUri(tmpDir.uri.resolve('without')); |
| out1.createSync(); |
| Directory out2 = Directory.fromUri(tmpDir.uri.resolve('json')); |
| out2.createSync(); |
| Directory out3 = Directory.fromUri(tmpDir.uri.resolve('binary')); |
| out3.createSync(); |
| Directory appDir = Directory.fromUri( |
| Uri.base.resolve('pkg/compiler/test/codesize/swarm'), |
| ); |
| |
| print("Copying '${appDir.path}' to '${tmpDir.path}'."); |
| copyDirectory(appDir, tmpDir); |
| try { |
| var command = dart2JsCommand(['--out=without/out.js', 'swarm.dart']); |
| print('Run $command'); |
| var result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| Expect.equals(0, result.exitCode); |
| String output1 = File.fromUri( |
| tmpDir.uri.resolve('without/out.js'), |
| ).readAsStringSync(); |
| |
| command = dart2JsCommand([ |
| '--out=json/out.js', |
| 'swarm.dart', |
| '--stage=dump-info-all', |
| ]); |
| print('Run $command'); |
| result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| Expect.equals(0, result.exitCode); |
| String output2 = File.fromUri( |
| tmpDir.uri.resolve('json/out.js'), |
| ).readAsStringSync(); |
| String dumpInfoJson1 = File.fromUri( |
| tmpDir.uri.resolve('json/out.js.info.json'), |
| ).readAsStringSync(); |
| |
| print('Compare outputs...'); |
| Expect.equals(output1, output2); |
| |
| command = dart2JsCommand([ |
| '--out=binary/out.js', |
| 'swarm.dart', |
| '--dump-info=binary', |
| '--stage=dump-info-all', |
| ]); |
| print('Run $command'); |
| result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| Expect.equals(0, result.exitCode); |
| String output3 = File.fromUri( |
| tmpDir.uri.resolve('binary/out.js'), |
| ).readAsStringSync(); |
| List<int> dumpInfoBinary1 = File.fromUri( |
| tmpDir.uri.resolve('binary/out.js.info.data'), |
| ).readAsBytesSync(); |
| |
| print('Compare outputs...'); |
| Expect.equals(output1, output3); |
| |
| command = dart2JsCommand([ |
| '--cfe-only', |
| '--out=json/cfe.dill', |
| 'swarm.dart', |
| ]); |
| print('Run $command'); |
| result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| command = dart2JsCommand([ |
| '--input-dill=json/cfe.dill', |
| '--closed-world-data=json/world.data', |
| '--out=json/world.dill', |
| '--stage=closed-world', |
| 'swarm.dart', |
| ]); |
| print('Run $command'); |
| result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| command = dart2JsCommand([ |
| '--input-dill=json/world.dill', |
| '--closed-world-data=json/world.data', |
| '--global-inference-data=json/global.data', |
| '--stage=global-inference', |
| 'swarm.dart', |
| ]); |
| print('Run $command'); |
| result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| command = dart2JsCommand([ |
| '--input-dill=json/world.dill', |
| '--closed-world-data=json/world.data', |
| '--global-inference-data=json/global.data', |
| '--codegen-data=codegen', |
| '--codegen-shards=1', |
| '--codegen-shard=0', |
| '--stage=codegen', |
| 'swarm.dart', |
| ]); |
| print('Run $command'); |
| result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| command = dart2JsCommand([ |
| '--input-dill=json/world.dill', |
| '--closed-world-data=json/world.data', |
| '--global-inference-data=json/global.data', |
| '--codegen-data=codegen', |
| '--codegen-shards=1', |
| '--out=out.js', |
| '--dump-info-data=json/dump.data', |
| '--stage=emit-js', |
| 'swarm.dart', |
| ]); |
| print('Run $command'); |
| result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| command = dart2JsCommand([ |
| '--input-dill=json/world.dill', |
| '--closed-world-data=json/world.data', |
| '--global-inference-data=json/global.data', |
| '--codegen-data=codegen', |
| '--codegen-shards=1', |
| '--dump-info-data=json/dump.data', |
| '--stage=dump-info', |
| 'swarm.dart', |
| ]); |
| print('Run $command'); |
| result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| Expect.equals(0, result.exitCode); |
| String output4 = File.fromUri( |
| tmpDir.uri.resolve('json/out.js'), |
| ).readAsStringSync(); |
| String dumpInfoJson2 = File.fromUri( |
| tmpDir.uri.resolve('json/out.js.info.json'), |
| ).readAsStringSync(); |
| |
| command = dart2JsCommand([ |
| '--input-dill=json/world.dill', |
| '--closed-world-data=json/world.data', |
| '--global-inference-data=json/global.data', |
| '--codegen-data=codegen', |
| '--codegen-shards=1', |
| '--dump-info-data=json/dump.data', |
| '--dump-info=binary', |
| '--stage=dump-info', |
| 'swarm.dart', |
| ]); |
| print('Run $command'); |
| result = Process.runSync( |
| Platform.resolvedExecutable, |
| command, |
| workingDirectory: tmpDir.path, |
| ); |
| print('exit code: ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| Expect.equals(0, result.exitCode); |
| String output5 = File.fromUri( |
| tmpDir.uri.resolve('json/out.js'), |
| ).readAsStringSync(); |
| List<int> dumpInfoBinary2 = File.fromUri( |
| tmpDir.uri.resolve('binary/out.js.info.data'), |
| ).readAsBytesSync(); |
| |
| print('Compare outputs...'); |
| Expect.equals(output1, output4); |
| Expect.equals(output1, output5); |
| Expect.equals(dumpInfoJson1, dumpInfoJson2); |
| Expect.listEquals(dumpInfoBinary1, dumpInfoBinary2); |
| |
| print('Done'); |
| } finally { |
| print("Deleting '${tmpDir.path}'."); |
| tmpDir.deleteSync(recursive: true); |
| } |
| } |