blob: ade191ae6628ff63d52a6270c0364044864e3f28 [file] [log] [blame]
// Copyright (c) 2014, 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.
// @dart = 2.7
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:path/path.dart' as path;
import 'package:async_helper/async_helper.dart';
import 'package:expect/expect.dart';
import 'launch_helper.dart' show dart2JsCommand;
var tmpDir;
copyDirectory(Directory sourceDir, Directory destinationDir) {
sourceDir.listSync().forEach((FileSystemEntity element) {
String newPath =
path.join(destinationDir.path, path.basename(element.path));
if (element is File) {
element.copySync(newPath);
} else if (element is Directory) {
Directory newDestinationDir = new Directory(newPath);
newDestinationDir.createSync();
copyDirectory(element, newDestinationDir);
}
});
}
Future<Directory> createTempDir() {
return Directory.systemTemp
.createTemp('dart2js_batch_test-')
.then((Directory dir) {
return dir;
});
}
Future setup() {
return createTempDir().then((Directory directory) {
tmpDir = directory;
Directory appDir =
new Directory.fromUri(Uri.base.resolve('samples-dev/swarm'));
print("Copying '${appDir.path}' to '${tmpDir.path}'.");
copyDirectory(appDir, tmpDir);
});
}
void cleanUp() {
print("Deleting '${tmpDir.path}'.");
tmpDir.deleteSync(recursive: true);
}
Future<Process> launchDart2Js(_) {
return Process.start(
// Use an absolute path because we are changing the cwd below.
path.absolute(Platform.executable),
dart2JsCommand(['--batch']),
workingDirectory: tmpDir.path);
}
Future runTests(Process process) {
String inFile = path.join(tmpDir.path, 'swarm.dart');
String outFile = path.join(tmpDir.path, 'out.js');
String outFile2 = path.join(tmpDir.path, 'out2.js');
process.stdin.writeln('--out="$outFile" "$inFile"');
process.stdin.writeln('--out="$outFile2" "$inFile"');
process.stdin.writeln('too many arguments');
process.stdin.writeln(r'"non existing file.dart"');
process.stdin.close();
Future<String> output = process.stdout.transform(utf8.decoder).join();
Future<String> errorOut = process.stderr.transform(utf8.decoder).join();
return Future.wait([output, errorOut]).then((result) {
String stdoutOutput = result[0];
String stderrOutput = result[1];
Expect.equals(4, ">>> EOF STDERR".allMatches(stderrOutput).length);
Expect.equals(4, ">>>".allMatches(stderrOutput).length);
Expect.equals(2, ">>> TEST OK".allMatches(stdoutOutput).length);
Expect.equals(2, ">>> TEST FAIL".allMatches(stdoutOutput).length);
Expect.equals(4, ">>>".allMatches(stdoutOutput).length);
});
}
void main() {
asyncTest(() {
return setup().then(launchDart2Js).then(runTests).whenComplete(cleanUp);
});
}