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

Unified Diff: sdk/lib/_internal/pub/test/test_pub.dart

Issue 14593010: Log verbose output when testing pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 7 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/_internal/pub/test/oauth2/utils.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/pub/test/test_pub.dart
diff --git a/sdk/lib/_internal/pub/test/test_pub.dart b/sdk/lib/_internal/pub/test/test_pub.dart
index f8b5cb9ec817a1a2f5b67443f798f67649460c64..715b03a69da63c2a2a925ba860d640e087480463 100644
--- a/sdk/lib/_internal/pub/test/test_pub.dart
+++ b/sdk/lib/_internal/pub/test/test_pub.dart
@@ -33,6 +33,7 @@ import '../lib/src/git_source.dart';
import '../lib/src/hosted_source.dart';
import '../lib/src/http.dart';
import '../lib/src/io.dart';
+import '../lib/src/log.dart' as log;
import '../lib/src/path_source.dart';
import '../lib/src/safe_http_server.dart';
import '../lib/src/system_cache.dart';
@@ -333,6 +334,8 @@ void confirmPublish(ScheduledProcess pub) {
expect(pub.nextLine(), completion(equals("| '-- test_pkg.dart")));
expect(pub.nextLine(), completion(equals("'-- pubspec.yaml")));
expect(pub.nextLine(), completion(equals("")));
+ expect(pub.nextLine(), completion(equals('Looks great! Are you ready to '
+ 'upload your package (y/n)?')));
pub.writeLine("y");
}
@@ -362,7 +365,7 @@ ScheduledProcess startPub({List args, Future<Uri> tokenEndpoint}) {
var pubPath = path.join(testDirectory, '..', 'bin', 'pub.dart');
var dartArgs = ['--package-root=$_packageRoot/', '--checked', pubPath,
- '--trace'];
+ '--verbose'];
dartArgs.addAll(args);
if (tokenEndpoint == null) tokenEndpoint = new Future.value();
@@ -381,10 +384,89 @@ ScheduledProcess startPub({List args, Future<Uri> tokenEndpoint}) {
return options;
});
- return new ScheduledProcess.start(dartBin, dartArgs, options: optionsFuture,
+ return new PubProcess.start(dartBin, dartArgs, options: optionsFuture,
description: args.isEmpty ? 'pub' : 'pub ${args.first}');
}
+/// A subclass of [ScheduledProcess] that parses pub's verbose logging output
+/// and makes [nextLine], [nextErrLine], [remainingStdout], and
+/// [remainingStderr] work as though pub weren't running in verbose mode.
+class PubProcess extends ScheduledProcess {
+ Stream<Pair<log.Level, String>> _log;
+ Stream<String> _stdout;
+ Stream<String> _stderr;
+
+ PubProcess.start(executable, arguments,
+ {options, String description, Encoding encoding: Encoding.UTF_8})
+ : super.start(executable, arguments,
+ options: options,
+ description: description,
+ encoding: encoding);
+
+ Stream<Pair<log.Level, String>> _logStream() {
+ if (_log == null) {
+ _log = mergeStreams(
+ _outputToLog(super.stdoutStream(), log.Level.MESSAGE),
+ _outputToLog(super.stderrStream(), log.Level.ERROR));
+ }
+
+ var pair = tee(_log);
+ _log = pair.first;
+ return pair.last;
+ }
+
+ final _logLineRegExp = new RegExp(r"^([A-Z ]{4})[:|] (.*)$");
+ final _logLevels = [
+ log.Level.ERROR, log.Level.WARNING, log.Level.MESSAGE, log.Level.IO,
+ log.Level.SOLVER, log.Level.FINE
+ ].fold(<String, log.Level>{}, (levels, level) {
+ levels[level.name] = level;
+ return levels;
+ });
+
+ Stream<Pair<log.Level, String>> _outputToLog(Stream<String> stream,
+ log.Level defaultLevel) {
+ var lastLevel;
+ return stream.map((line) {
+ var match = _logLineRegExp.firstMatch(line);
+ if (match == null) return new Pair<log.Level, String>(defaultLevel, line);
+
+ var level = _logLevels[match[1]];
+ if (level == null) level = lastLevel;
+ lastLevel = level;
+ return new Pair<log.Level, String>(level, match[2]);
+ });
+ }
+
+ Stream<String> stdoutStream() {
+ if (_stdout == null) {
+ _stdout = _logStream().expand((entry) {
+ if (entry.first != log.Level.MESSAGE) return [];
+ return [entry.last];
+ });
+ }
+
+ var pair = tee(_stdout);
+ _stdout = pair.first;
+ return pair.last;
+ }
+
+ Stream<String> stderrStream() {
+ if (_stderr == null) {
+ _stderr = _logStream().expand((entry) {
+ if (entry.first != log.Level.ERROR && entry.first != log.Level.WARNING) {
+ return [];
+ }
+ return [entry.last];
+ });
+ }
+
+ var pair = tee(_stderr);
+ _stderr = pair.first;
+ return pair.last;
+ }
+}
+
// TODO(nweiz): use the built-in mechanism for accessing this once it exists
// (issue 9119).
/// The path to the `packages` directory from which pub loads its dependencies.
« no previous file with comments | « sdk/lib/_internal/pub/test/oauth2/utils.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698