| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library test.util.io; | 5 library test.util.io; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:convert'; |
| 8 import 'dart:io'; | 9 import 'dart:io'; |
| 9 import 'dart:mirrors'; | 10 import 'dart:mirrors'; |
| 10 | 11 |
| 12 import 'package:async/async.dart'; |
| 11 import 'package:path/path.dart' as p; | 13 import 'package:path/path.dart' as p; |
| 12 import 'package:pub_semver/pub_semver.dart'; | 14 import 'package:pub_semver/pub_semver.dart'; |
| 13 | 15 |
| 14 import '../backend/operating_system.dart'; | 16 import '../backend/operating_system.dart'; |
| 15 import '../runner/application_exception.dart'; | 17 import '../runner/application_exception.dart'; |
| 18 import '../utils.dart'; |
| 16 | 19 |
| 17 /// The ASCII code for a newline character. | 20 /// The ASCII code for a newline character. |
| 18 const _newline = 0xA; | 21 const _newline = 0xA; |
| 19 | 22 |
| 20 /// The ASCII code for a carriage return character. | 23 /// The ASCII code for a carriage return character. |
| 21 const _carriageReturn = 0xD; | 24 const _carriageReturn = 0xD; |
| 22 | 25 |
| 23 /// The root directory of the Dart SDK. | 26 /// The root directory of the Dart SDK. |
| 24 final String sdkDir = (() { | 27 final String sdkDir = (() { |
| 25 // TODO(kevmoo): work-around for accessing the SDK root dartbug.com/16994 | 28 // TODO(kevmoo): work-around for accessing the SDK root dartbug.com/16994 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 39 | 42 |
| 40 /// Returns the current operating system. | 43 /// Returns the current operating system. |
| 41 final OperatingSystem currentOS = (() { | 44 final OperatingSystem currentOS = (() { |
| 42 var name = Platform.operatingSystem; | 45 var name = Platform.operatingSystem; |
| 43 var os = OperatingSystem.findByIoName(name); | 46 var os = OperatingSystem.findByIoName(name); |
| 44 if (os != null) return os; | 47 if (os != null) return os; |
| 45 | 48 |
| 46 throw new UnsupportedError('Unsupported operating system "$name".'); | 49 throw new UnsupportedError('Unsupported operating system "$name".'); |
| 47 })(); | 50 })(); |
| 48 | 51 |
| 52 /// A queue of lines of standard input. |
| 53 final stdinLines = new StreamQueue( |
| 54 UTF8.decoder.fuse(const LineSplitter()).bind(stdin)); |
| 55 |
| 49 /// The root directory below which to nest temporary directories created by the | 56 /// The root directory below which to nest temporary directories created by the |
| 50 /// test runner. | 57 /// test runner. |
| 51 /// | 58 /// |
| 52 /// This is configurable so that the test code can validate that the runner | 59 /// This is configurable so that the test code can validate that the runner |
| 53 /// cleans up after itself fully. | 60 /// cleans up after itself fully. |
| 54 final _tempDir = Platform.environment.containsKey("_UNITTEST_TEMP_DIR") | 61 final _tempDir = Platform.environment.containsKey("_UNITTEST_TEMP_DIR") |
| 55 ? Platform.environment["_UNITTEST_TEMP_DIR"] | 62 ? Platform.environment["_UNITTEST_TEMP_DIR"] |
| 56 : Directory.systemTemp.path; | 63 : Directory.systemTemp.path; |
| 57 | 64 |
| 58 /// The path to the `lib` directory of the `test` package. | 65 /// The path to the `lib` directory of the `test` package. |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 var previous; | 131 var previous; |
| 125 return list.reversed.where((byte) { | 132 return list.reversed.where((byte) { |
| 126 if (byte == 0) return false; | 133 if (byte == 0) return false; |
| 127 if (byte == _carriageReturn && previous == _newline) return false; | 134 if (byte == _carriageReturn && previous == _newline) return false; |
| 128 previous = byte; | 135 previous = byte; |
| 129 return true; | 136 return true; |
| 130 }).toList().reversed.toList(); | 137 }).toList().reversed.toList(); |
| 131 }); | 138 }); |
| 132 } | 139 } |
| 133 | 140 |
| 141 /// Print a warning containing [message]. |
| 142 /// |
| 143 /// This automatically wraps lines if they get too long. If [color] is passed, |
| 144 /// it controls whether the warning header is color; otherwise, it defaults to |
| 145 /// [canUseSpecialChars]. |
| 146 void warn(String message, {bool color}) { |
| 147 if (color == null) color = canUseSpecialChars; |
| 148 var header = color |
| 149 ? "\u001b[33mWarning:\u001b[0m" |
| 150 : "Warning:"; |
| 151 stderr.writeln(wordWrap("$header $message\n")); |
| 152 } |
| 153 |
| 134 /// Creates a URL string for [address]:[port]. | 154 /// Creates a URL string for [address]:[port]. |
| 135 /// | 155 /// |
| 136 /// Handles properly formatting IPv6 addresses. | 156 /// Handles properly formatting IPv6 addresses. |
| 137 Uri baseUrlForAddress(InternetAddress address, int port) { | 157 Uri baseUrlForAddress(InternetAddress address, int port) { |
| 138 if (address.isLoopback) { | 158 if (address.isLoopback) { |
| 139 return new Uri(scheme: "http", host: "localhost", port: port); | 159 return new Uri(scheme: "http", host: "localhost", port: port); |
| 140 } | 160 } |
| 141 | 161 |
| 142 // IPv6 addresses in URLs need to be enclosed in square brackets to avoid | 162 // IPv6 addresses in URLs need to be enclosed in square brackets to avoid |
| 143 // URL ambiguity with the ":" in the address. | 163 // URL ambiguity with the ":" in the address. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 168 /// returned. | 188 /// returned. |
| 169 String libraryPath(Symbol libraryName, {String packageRoot}) { | 189 String libraryPath(Symbol libraryName, {String packageRoot}) { |
| 170 var lib = currentMirrorSystem().findLibrary(libraryName); | 190 var lib = currentMirrorSystem().findLibrary(libraryName); |
| 171 if (lib.uri.scheme != 'package') return p.fromUri(lib.uri); | 191 if (lib.uri.scheme != 'package') return p.fromUri(lib.uri); |
| 172 | 192 |
| 173 // TODO(nweiz): is there a way to avoid assuming this is being run next to a | 193 // TODO(nweiz): is there a way to avoid assuming this is being run next to a |
| 174 // packages directory?. | 194 // packages directory?. |
| 175 if (packageRoot == null) packageRoot = p.absolute('packages'); | 195 if (packageRoot == null) packageRoot = p.absolute('packages'); |
| 176 return p.join(packageRoot, p.fromUri(lib.uri.path)); | 196 return p.join(packageRoot, p.fromUri(lib.uri.path)); |
| 177 } | 197 } |
| OLD | NEW |