Skip to content

Commit

Permalink
[pigeon] Do generation for tests via the library (#2861)
Browse files Browse the repository at this point in the history
* [pigeon] Do generation for tests via the library

For test output generation in the parts of the test script that have
been converted to Dart, use the library entrypoint instead of shelling
out to `pigeon` each time.

* Analyzer fix

* Add missing sink closes to fix Windows

* Don't close output if it's stdout
  • Loading branch information
stuartmorgan committed Dec 1, 2022
1 parent e1dc854 commit 891ae3b
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 64 deletions.
9 changes: 9 additions & 0 deletions packages/pigeon/lib/pigeon_lib.dart
Expand Up @@ -1373,12 +1373,20 @@ ${_argParser.usage}''';
final List<Error> errors = <Error>[];
errors.addAll(parseResults.errors);

// Helper to clean up non-Stdout sinks.
Future<void> releaseSink(IOSink sink) async {
if (sink is! Stdout) {
await sink.close();
}
}

for (final Generator generator in safeGenerators) {
final IOSink? sink = generator.shouldGenerate(options);
if (sink != null) {
final List<Error> generatorErrors =
generator.validate(options, parseResults.root);
errors.addAll(generatorErrors);
await releaseSink(sink);
}
}

Expand Down Expand Up @@ -1419,6 +1427,7 @@ ${_argParser.usage}''';
if (sink != null) {
generator.generate(sink, options, parseResults.root);
await sink.flush();
await releaseSink(sink);
}
}

Expand Down
3 changes: 1 addition & 2 deletions packages/pigeon/tool/run_tests.dart
Expand Up @@ -158,8 +158,7 @@ Future<int> _generateDart(Map<String, String> jobs) async {
for (final MapEntry<String, String> job in jobs.entries) {
// TODO(gaaclarke): Make this run the jobs in parallel. A bug in Dart
// blocked this (https://github.com/dart-lang/pub/pull/3285).
final int result = await runPigeon(
input: job.key, dartOut: job.value, streamOutput: false);
final int result = await runPigeon(input: job.key, dartOut: job.value);
if (result != 0) {
return result;
}
Expand Down
82 changes: 20 additions & 62 deletions packages/pigeon/tool/shared/generation.dart
Expand Up @@ -3,8 +3,7 @@
// found in the LICENSE file.

import 'package:path/path.dart' as p;

import 'process_utils.dart';
import 'package:pigeon/pigeon.dart';

enum GeneratorLanguages {
cpp,
Expand Down Expand Up @@ -164,65 +163,24 @@ Future<int> runPigeon({
String? javaPackage,
String? objcHeaderOut,
String? objcSourceOut,
bool streamOutput = true,
}) async {
const bool hasDart = false;
final List<String> args = <String>[
'run',
'pigeon',
'--input',
input,
'--copyright_header',
'./copyright_header.txt',
];
if (kotlinOut != null) {
args.addAll(<String>['--experimental_kotlin_out', kotlinOut]);
}
if (kotlinPackage != null) {
args.addAll(<String>['--experimental_kotlin_package', kotlinPackage]);
}
if (swiftOut != null) {
args.addAll(<String>['--experimental_swift_out', swiftOut]);
}
if (cppHeaderOut != null) {
args.addAll(<String>[
'--experimental_cpp_header_out',
cppHeaderOut,
]);
}
if (cppSourceOut != null) {
args.addAll(<String>[
'--experimental_cpp_source_out',
cppSourceOut,
]);
}
if (cppNamespace != null) {
args.addAll(<String>[
'--cpp_namespace',
cppNamespace,
]);
}
if (dartOut != null) {
args.addAll(<String>['--dart_out', dartOut]);
}
if (dartTestOut != null) {
args.addAll(<String>['--dart_test_out', dartTestOut]);
}
if (!hasDart) {
args.add('--one_language');
}
if (javaOut != null) {
args.addAll(<String>['--java_out', javaOut]);
}
if (javaPackage != null) {
args.addAll(<String>['--java_package', javaPackage]);
}
if (objcHeaderOut != null) {
args.addAll(<String>['--objc_header_out', objcHeaderOut]);
}
if (objcSourceOut != null) {
args.addAll(<String>['--objc_source_out', objcSourceOut]);
}
return runProcess('dart', args,
streamOutput: streamOutput, logFailure: !streamOutput);
return Pigeon.runWithOptions(PigeonOptions(
input: input,
copyrightHeader: './copyright_header.txt',
dartOut: dartOut,
dartTestOut: dartTestOut,
dartOptions: const DartOptions(),
cppHeaderOut: cppHeaderOut,
cppSourceOut: cppSourceOut,
cppOptions: CppOptions(namespace: cppNamespace),
javaOut: javaOut,
javaOptions: JavaOptions(package: javaPackage),
kotlinOut: kotlinOut,
kotlinOptions: KotlinOptions(package: kotlinPackage),
objcHeaderOut: objcHeaderOut,
objcSourceOut: objcSourceOut,
objcOptions: const ObjcOptions(),
swiftOut: swiftOut,
swiftOptions: const SwiftOptions(),
));
}

0 comments on commit 891ae3b

Please sign in to comment.