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

Side by Side Diff: pkg/scheduled_test/lib/src/descriptor/file_descriptor.dart

Issue 93143002: Make pkg/stack_trace use stack chains. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 descriptor.file; 5 library descriptor.file;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:io'; 9 import 'dart:io';
10 import 'dart:math' as math; 10 import 'dart:math' as math;
11 11
12 import 'package:path/path.dart' as path; 12 import 'package:path/path.dart' as path;
13 import 'package:stack_trace/stack_trace.dart';
13 14
14 import '../../descriptor.dart'; 15 import '../../descriptor.dart';
15 import '../../scheduled_test.dart'; 16 import '../../scheduled_test.dart';
16 import '../utils.dart'; 17 import '../utils.dart';
17 18
18 /// A descriptor describing a single file. 19 /// A descriptor describing a single file.
19 abstract class FileDescriptor extends Descriptor implements ReadableDescriptor { 20 abstract class FileDescriptor extends Descriptor implements ReadableDescriptor {
20 /// The contents of the file, in bytes. 21 /// The contents of the file, in bytes.
21 final List<int> contents; 22 final List<int> contents;
22 23
(...skipping 19 matching lines...) Expand all
42 43
43 /// Creates a new text [FileDescriptor] with [name] and [contents]. 44 /// Creates a new text [FileDescriptor] with [name] and [contents].
44 factory FileDescriptor(String name, String contents) => 45 factory FileDescriptor(String name, String contents) =>
45 new _StringFileDescriptor(name, contents); 46 new _StringFileDescriptor(name, contents);
46 47
47 FileDescriptor._(String name, this.contents) 48 FileDescriptor._(String name, this.contents)
48 : super(name); 49 : super(name);
49 50
50 Future create([String parent]) => schedule(() { 51 Future create([String parent]) => schedule(() {
51 if (parent == null) parent = defaultRoot; 52 if (parent == null) parent = defaultRoot;
52 return new File(path.join(parent, name)).writeAsBytes(contents); 53 return Chain.track(new File(path.join(parent, name))
54 .writeAsBytes(contents));
53 }, "creating file '$name'"); 55 }, "creating file '$name'");
54 56
55 Future validate([String parent]) => 57 Future validate([String parent]) =>
56 schedule(() => validateNow(parent), "validating file '$name'"); 58 schedule(() => validateNow(parent), "validating file '$name'");
57 59
58 Future validateNow([String parent]) { 60 Future validateNow([String parent]) {
59 if (parent == null) parent = defaultRoot; 61 if (parent == null) parent = defaultRoot;
60 var fullPath = path.join(parent, name); 62 var fullPath = path.join(parent, name);
61 if (!new File(fullPath).existsSync()) { 63 if (!new File(fullPath).existsSync()) {
62 fail("File not found: '$fullPath'."); 64 fail("File not found: '$fullPath'.");
63 } 65 }
64 66
65 return new File(fullPath).readAsBytes().then(_validateNow); 67 return Chain.track(new File(fullPath).readAsBytes()).then(_validateNow);
66 } 68 }
67 69
68 // TODO(nweiz): rather than setting up an inheritance chain, just store a 70 // TODO(nweiz): rather than setting up an inheritance chain, just store a
69 // Matcher for validation. This would require better error messages from the 71 // Matcher for validation. This would require better error messages from the
70 // matcher library, though. 72 // matcher library, though.
71 /// A function that throws an error if [binaryContents] doesn't match the 73 /// A function that throws an error if [binaryContents] doesn't match the
72 /// expected contents of the descriptor. 74 /// expected contents of the descriptor.
73 void _validateNow(List<int> binaryContents); 75 void _validateNow(List<int> binaryContents);
74 76
75 Stream<List<int>> read() => new Future.value(contents).asStream(); 77 Stream<List<int>> read() => new Future.value(contents).asStream();
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 142
141 _MatcherFileDescriptor(String name, this._matcher, {bool isBinary}) 143 _MatcherFileDescriptor(String name, this._matcher, {bool isBinary})
142 : _isBinary = isBinary == true ? true : false, 144 : _isBinary = isBinary == true ? true : false,
143 super._(name, <int>[]); 145 super._(name, <int>[]);
144 146
145 void _validateNow(List<int> actualContents) => 147 void _validateNow(List<int> actualContents) =>
146 expect( 148 expect(
147 _isBinary ? actualContents : new String.fromCharCodes(actualContents), 149 _isBinary ? actualContents : new String.fromCharCodes(actualContents),
148 _matcher); 150 _matcher);
149 } 151 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698