blob: 8cc2069c262522c99cab10b33f4274c0a60eb441 [file] [log] [blame]
// 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', '--dump-info']);
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']);
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',
'--write-closed-world=json/world.data',
'--out=json/world.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/world.dill',
'--read-closed-world=json/world.data',
'--write-data=json/global.data',
'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',
'--read-closed-world=json/world.data',
'--read-data=json/global.data',
'--write-codegen=codegen',
'--codegen-shards=1',
'--codegen-shard=0',
'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',
'--read-closed-world=json/world.data',
'--read-data=json/global.data',
'--read-codegen=codegen',
'--codegen-shards=1',
'--out=out.js',
'--write-dump-info-data=json/dump.data',
'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',
'--read-closed-world=json/world.data',
'--read-data=json/global.data',
'--read-codegen=codegen',
'--codegen-shards=1',
'--read-dump-info-data=json/dump.data',
'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',
'--read-closed-world=json/world.data',
'--read-data=json/global.data',
'--read-codegen=codegen',
'--codegen-shards=1',
'--read-dump-info-data=json/dump.data',
'--dump-info=binary',
'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);
}
}