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

Side by Side Diff: tools/testing/dart/path.dart

Issue 2863253002: Tighten up a bunch of types in test.dart. (Closed)
Patch Set: Merge branch 'master' into types-for-test Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 legacy_path; 5 library legacy_path;
6 6
7 import 'dart:io'; 7 import 'dart:io';
8 import 'dart:math'; 8 import 'dart:math';
9 9
10 // TODO: Remove this class, and use the URI class for all path manipulation. 10 // TODO: Remove this class, and use the URI class for all path manipulation.
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 return makeCanonical(); 167 return makeCanonical();
168 } 168 }
169 169
170 bool get isCanonical { 170 bool get isCanonical {
171 // Contains no consecutive path separators. 171 // Contains no consecutive path separators.
172 // Contains no segments that are '.'. 172 // Contains no segments that are '.'.
173 // Absolute paths have no segments that are '..'. 173 // Absolute paths have no segments that are '..'.
174 // All '..' segments of a relative path are at the beginning. 174 // All '..' segments of a relative path are at the beginning.
175 if (isEmpty) return false; // The canonical form of '' is '.'. 175 if (isEmpty) return false; // The canonical form of '' is '.'.
176 if (_path == '.') return true; 176 if (_path == '.') return true;
177 List segs = _path.split('/'); // Don't mask the getter 'segments'. 177 var segs = _path.split('/'); // Don't mask the getter 'segments'.
178 if (segs[0] == '') { 178 if (segs[0] == '') {
179 // Absolute path 179 // Absolute path
180 segs[0] = null; // Faster than removeRange(). 180 segs[0] = null; // Faster than removeRange().
181 } else { 181 } else {
182 // A canonical relative path may start with .. segments. 182 // A canonical relative path may start with .. segments.
183 for (int pos = 0; pos < segs.length && segs[pos] == '..'; ++pos) { 183 for (int pos = 0; pos < segs.length && segs[pos] == '..'; ++pos) {
184 segs[pos] = null; 184 segs[pos] = null;
185 } 185 }
186 } 186 }
187 if (segs.last == '') segs.removeLast(); // Path ends with /. 187 if (segs.last == '') segs.removeLast(); // Path ends with /.
188 // No remaining segments can be ., .., or empty. 188 // No remaining segments can be ., .., or empty.
189 return !segs.any((s) => s == '' || s == '.' || s == '..'); 189 return !segs.any((s) => s == '' || s == '.' || s == '..');
190 } 190 }
191 191
192 Path makeCanonical() { 192 Path makeCanonical() {
193 bool isAbs = isAbsolute; 193 var isAbs = isAbsolute;
194 List segs = segments(); 194 var segs = segments();
195 String drive; 195 String drive;
196 if (isAbs && !segs.isEmpty && segs[0].length == 2 && segs[0][1] == ':') { 196 if (isAbs && !segs.isEmpty && segs[0].length == 2 && segs[0][1] == ':') {
197 drive = segs[0]; 197 drive = segs[0];
198 segs.removeRange(0, 1); 198 segs.removeRange(0, 1);
199 } 199 }
200 List newSegs = []; 200 var newSegs = <String>[];
201 for (String segment in segs) { 201 for (var segment in segs) {
202 switch (segment) { 202 switch (segment) {
203 case '..': 203 case '..':
204 // Absolute paths drop leading .. markers, including after a drive. 204 // Absolute paths drop leading .. markers, including after a drive.
205 if (newSegs.isEmpty) { 205 if (newSegs.isEmpty) {
206 if (isAbs) { 206 if (isAbs) {
207 // Do nothing: drop the segment. 207 // Do nothing: drop the segment.
208 } else { 208 } else {
209 newSegs.add('..'); 209 newSegs.add('..');
210 } 210 }
211 } else if (newSegs.last == '..') { 211 } else if (newSegs.last == '..') {
212 newSegs.add('..'); 212 newSegs.add('..');
213 } else { 213 } else {
214 newSegs.removeLast(); 214 newSegs.removeLast();
215 } 215 }
216 break; 216 break;
217 case '.': 217 case '.':
218 case '': 218 case '':
219 // Do nothing - drop the segment. 219 // Do nothing - drop the segment.
220 break; 220 break;
221 default: 221 default:
222 newSegs.add(segment); 222 newSegs.add(segment);
223 break; 223 break;
224 } 224 }
225 } 225 }
226 226
227 List segmentsToJoin = []; 227 var segmentsToJoin = <String>[];
228 if (isAbs) { 228 if (isAbs) {
229 segmentsToJoin.add(''); 229 segmentsToJoin.add('');
230 if (drive != null) { 230 if (drive != null) {
231 segmentsToJoin.add(drive); 231 segmentsToJoin.add(drive);
232 } 232 }
233 } 233 }
234 234
235 if (newSegs.isEmpty) { 235 if (newSegs.isEmpty) {
236 if (isAbs) { 236 if (isAbs) {
237 segmentsToJoin.add(''); 237 segmentsToJoin.add('');
(...skipping 22 matching lines...) Expand all
260 nativePath = nativePath.replaceAll('/', '\\'); 260 nativePath = nativePath.replaceAll('/', '\\');
261 if (isWindowsShare) { 261 if (isWindowsShare) {
262 return '\\$nativePath'; 262 return '\\$nativePath';
263 } 263 }
264 return nativePath; 264 return nativePath;
265 } 265 }
266 return _path; 266 return _path;
267 } 267 }
268 268
269 List<String> segments() { 269 List<String> segments() {
270 List result = _path.split('/'); 270 var result = _path.split('/');
271 if (isAbsolute) result.removeRange(0, 1); 271 if (isAbsolute) result.removeRange(0, 1);
272 if (hasTrailingSeparator) result.removeLast(); 272 if (hasTrailingSeparator) result.removeLast();
273 return result; 273 return result;
274 } 274 }
275 275
276 Path append(String finalSegment) { 276 Path append(String finalSegment) {
277 if (isEmpty) { 277 if (isEmpty) {
278 return new Path._internal(finalSegment, isWindowsShare); 278 return new Path._internal(finalSegment, isWindowsShare);
279 } else if (hasTrailingSeparator) { 279 } else if (hasTrailingSeparator) {
280 return new Path._internal('$_path$finalSegment', isWindowsShare); 280 return new Path._internal('$_path$finalSegment', isWindowsShare);
(...skipping 21 matching lines...) Expand all
302 while (pos > 0 && _path[pos - 1] == '/') --pos; 302 while (pos > 0 && _path[pos - 1] == '/') --pos;
303 var dirPath = (pos > 0) ? _path.substring(0, pos) : '/'; 303 var dirPath = (pos > 0) ? _path.substring(0, pos) : '/';
304 return new Path._internal(dirPath, isWindowsShare); 304 return new Path._internal(dirPath, isWindowsShare);
305 } 305 }
306 306
307 String get filename { 307 String get filename {
308 int pos = _path.lastIndexOf('/'); 308 int pos = _path.lastIndexOf('/');
309 return _path.substring(pos + 1); 309 return _path.substring(pos + 1);
310 } 310 }
311 } 311 }
OLDNEW
« no previous file with comments | « tools/testing/dart/package_testing_support.dart ('k') | tools/testing/dart/record_and_replay.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698