OLD | NEW |
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 // Dart test program for testing file I/O. | 5 // Dart test program for testing file I/O. |
6 | 6 |
7 // OtherResources=empty_file | 7 // OtherResources=empty_file |
8 // OtherResources=file_test.txt | 8 // OtherResources=file_test.txt |
9 // OtherResources=fixed_length_file | 9 // OtherResources=fixed_length_file |
10 // OtherResources=read_as_text.dat | 10 // OtherResources=read_as_text.dat |
11 // OtherResources=readline_test1.dat | 11 // OtherResources=readline_test1.dat |
12 | 12 |
13 import 'dart:async'; | 13 import 'dart:async'; |
14 import 'dart:convert'; | 14 import 'dart:convert'; |
15 import 'dart:collection'; | 15 import 'dart:collection'; |
16 import 'dart:io'; | 16 import 'dart:io'; |
17 | 17 |
18 import "package:async_helper/async_helper.dart"; | 18 import "package:async_helper/async_helper.dart"; |
19 import "package:expect/expect.dart"; | 19 import "package:expect/expect.dart"; |
20 import "package:path/path.dart"; | 20 import "package:path/path.dart"; |
21 | 21 |
22 class MyListOfOneElement | 22 class MyListOfOneElement extends Object |
23 extends Object with ListMixin<int> implements List<int> { | 23 with ListMixin<int> |
| 24 implements List<int> { |
24 int _value; | 25 int _value; |
25 MyListOfOneElement(this._value); | 26 MyListOfOneElement(this._value); |
26 int get length => 1; | 27 int get length => 1; |
27 operator [](int index) => _value; | 28 operator [](int index) => _value; |
28 void set length(int index) { throw "Unsupported"; } | 29 void set length(int index) { |
| 30 throw "Unsupported"; |
| 31 } |
| 32 |
29 operator []=(int index, value) { | 33 operator []=(int index, value) { |
30 if (index != 0) { | 34 if (index != 0) { |
31 throw "Unsupported"; | 35 throw "Unsupported"; |
32 } else { | 36 } else { |
33 _value = value; | 37 _value = value; |
34 } | 38 } |
35 } | 39 } |
36 } | 40 } |
37 | 41 |
38 class FileTest { | 42 class FileTest { |
39 static Directory tempDirectory; | 43 static Directory tempDirectory; |
40 static int numLiveAsyncTests = 0; | 44 static int numLiveAsyncTests = 0; |
41 | 45 |
42 static void asyncTestStarted() { | 46 static void asyncTestStarted() { |
43 asyncStart(); | 47 asyncStart(); |
44 ++numLiveAsyncTests; | 48 ++numLiveAsyncTests; |
45 } | 49 } |
| 50 |
46 static void asyncTestDone(String name) { | 51 static void asyncTestDone(String name) { |
47 asyncEnd(); | 52 asyncEnd(); |
48 --numLiveAsyncTests; | 53 --numLiveAsyncTests; |
49 if (numLiveAsyncTests == 0) { | 54 if (numLiveAsyncTests == 0) { |
50 deleteTempDirectory(); | 55 deleteTempDirectory(); |
51 } | 56 } |
52 } | 57 } |
53 | 58 |
54 static void createTempDirectory(Function doNext) { | 59 static void createTempDirectory(Function doNext) { |
55 Directory.systemTemp.createTemp('dart_file').then((temp) { | 60 Directory.systemTemp.createTemp('dart_file').then((temp) { |
56 tempDirectory = temp; | 61 tempDirectory = temp; |
57 doNext(); | 62 doNext(); |
58 }); | 63 }); |
59 } | 64 } |
60 | 65 |
61 static void deleteTempDirectory() { | 66 static void deleteTempDirectory() { |
62 tempDirectory.deleteSync(recursive: true); | 67 tempDirectory.deleteSync(recursive: true); |
63 } | 68 } |
64 | 69 |
65 // Test for file read functionality. | 70 // Test for file read functionality. |
66 static void testReadStream() { | 71 static void testReadStream() { |
67 // Read a file and check part of it's contents. | 72 // Read a file and check part of it's contents. |
68 String filename = getFilename("file_test.txt"); | 73 String filename = getFilename("file_test.txt"); |
69 File file = new File(filename); | 74 File file = new File(filename); |
70 Expect.isTrue('$file'.contains(file.path)); | 75 Expect.isTrue('$file'.contains(file.path)); |
71 var subscription; | 76 var subscription; |
72 List<int> buffer = new List<int>(); | 77 List<int> buffer = new List<int>(); |
73 subscription = file.openRead().listen( | 78 subscription = file.openRead().listen((d) { |
74 (d) { | 79 buffer.addAll(d); |
75 buffer.addAll(d); | 80 if (buffer.length >= 12) { |
76 if (buffer.length >= 12) { | 81 subscription.cancel(); |
77 subscription.cancel(); | 82 Expect.equals(47, buffer[0]); // represents '/' in the file. |
78 Expect.equals(47, buffer[0]); // represents '/' in the file. | 83 Expect.equals(47, buffer[1]); // represents '/' in the file. |
79 Expect.equals(47, buffer[1]); // represents '/' in the file. | 84 Expect.equals(32, buffer[2]); // represents ' ' in the file. |
80 Expect.equals(32, buffer[2]); // represents ' ' in the file. | 85 Expect.equals(67, buffer[3]); // represents 'C' in the file. |
81 Expect.equals(67, buffer[3]); // represents 'C' in the file. | 86 Expect.equals(111, buffer[4]); // represents 'o' in the file. |
82 Expect.equals(111, buffer[4]); // represents 'o' in the file. | 87 Expect.equals(112, buffer[5]); // represents 'p' in the file. |
83 Expect.equals(112, buffer[5]); // represents 'p' in the file. | 88 Expect.equals(121, buffer[6]); // represents 'y' in the file. |
84 Expect.equals(121, buffer[6]); // represents 'y' in the file. | 89 Expect.equals(114, buffer[7]); // represents 'r' in the file. |
85 Expect.equals(114, buffer[7]); // represents 'r' in the file. | 90 Expect.equals(105, buffer[8]); // represents 'i' in the file. |
86 Expect.equals(105, buffer[8]); // represents 'i' in the file. | 91 Expect.equals(103, buffer[9]); // represents 'g' in the file. |
87 Expect.equals(103, buffer[9]); // represents 'g' in the file. | 92 Expect.equals(104, buffer[10]); // represents 'h' in the file. |
88 Expect.equals(104, buffer[10]); // represents 'h' in the file. | 93 Expect.equals(116, buffer[11]); // represents 't' in the file. |
89 Expect.equals(116, buffer[11]); // represents 't' in the file. | 94 } |
90 } | 95 }); |
91 }); | |
92 } | 96 } |
93 | 97 |
94 // Test for file read and write functionality. | 98 // Test for file read and write functionality. |
95 static void testReadWriteStream() { | 99 static void testReadWriteStream() { |
96 asyncTestStarted(); | 100 asyncTestStarted(); |
97 | 101 |
98 // Read a file. | 102 // Read a file. |
99 String inFilename = getFilename("fixed_length_file"); | 103 String inFilename = getFilename("fixed_length_file"); |
100 File file; | 104 File file; |
101 int bytesRead; | 105 int bytesRead; |
102 | 106 |
103 var file1 = new File(inFilename); | 107 var file1 = new File(inFilename); |
104 List<int> buffer = new List<int>(); | 108 List<int> buffer = new List<int>(); |
105 file1.openRead().listen( | 109 file1.openRead().listen((d) { |
106 (d) { | 110 buffer.addAll(d); |
107 buffer.addAll(d); | 111 }, onDone: () { |
108 }, | 112 Expect.equals(42, buffer.length); |
109 onDone: () { | 113 // Write the contents of the file just read into another file. |
110 Expect.equals(42, buffer.length); | 114 String outFilename = tempDirectory.path + "/out_read_write_stream"; |
111 // Write the contents of the file just read into another file. | 115 var file2 = new File(outFilename); |
112 String outFilename = | 116 var output = file2.openWrite(); |
113 tempDirectory.path + "/out_read_write_stream"; | 117 output.add(buffer); |
114 var file2 = new File(outFilename); | 118 output.flush().then((_) => output.close()); |
115 var output = file2.openWrite(); | 119 output.done.then((_) { |
116 output.add(buffer); | 120 // Now read the contents of the file just written. |
117 output.flush().then((_) => output.close()); | 121 List<int> buffer2 = new List<int>(); |
118 output.done.then((_) { | 122 new File(outFilename).openRead().listen((d) { |
119 // Now read the contents of the file just written. | 123 buffer2.addAll(d); |
120 List<int> buffer2 = new List<int>(); | 124 }, onDone: () { |
121 new File(outFilename).openRead().listen( | 125 Expect.equals(42, buffer2.length); |
122 (d) { | 126 // Now compare the two buffers to check if they are |
123 buffer2.addAll(d); | 127 // identical. |
124 }, | 128 for (int i = 0; i < buffer.length; i++) { |
125 onDone: () { | 129 Expect.equals(buffer[i], buffer2[i]); |
126 Expect.equals(42, buffer2.length); | 130 } |
127 // Now compare the two buffers to check if they are | 131 // Delete the output file. |
128 // identical. | 132 file2.deleteSync(); |
129 for (int i = 0; i < buffer.length; i++) { | 133 Expect.isFalse(file2.existsSync()); |
130 Expect.equals(buffer[i], buffer2[i]); | 134 asyncTestDone("testReadWriteStream"); |
131 } | 135 }); |
132 // Delete the output file. | |
133 file2.deleteSync(); | |
134 Expect.isFalse(file2.existsSync()); | |
135 asyncTestDone("testReadWriteStream"); | |
136 }); | |
137 }); | |
138 }); | 136 }); |
| 137 }); |
139 } | 138 } |
140 | 139 |
141 // Test for file stream buffered handling of large files. | 140 // Test for file stream buffered handling of large files. |
142 static void testReadWriteStreamLargeFile() { | 141 static void testReadWriteStreamLargeFile() { |
143 // Create the test data - arbitrary binary data. | 142 // Create the test data - arbitrary binary data. |
144 List<int> buffer = new List<int>(100000); | 143 List<int> buffer = new List<int>(100000); |
145 for (var i = 0; i < buffer.length; ++i) { | 144 for (var i = 0; i < buffer.length; ++i) { |
146 buffer[i] = i % 256; | 145 buffer[i] = i % 256; |
147 } | 146 } |
148 String filename = | 147 String filename = tempDirectory.path + "/out_read_write_stream_large_file"; |
149 tempDirectory.path + "/out_read_write_stream_large_file"; | |
150 File file = new File(filename); | 148 File file = new File(filename); |
151 IOSink output = file.openWrite(); | 149 IOSink output = file.openWrite(); |
152 output.add(buffer); | 150 output.add(buffer); |
153 output.add(buffer); | 151 output.add(buffer); |
154 output.flush().then((_) => output.close()); | 152 output.flush().then((_) => output.close()); |
155 | 153 |
156 asyncTestStarted(); | 154 asyncTestStarted(); |
157 output.done.then((_) { | 155 output.done |
158 Stream input = file.openRead(); | 156 .then((_) { |
159 int position = 0; | 157 Stream input = file.openRead(); |
160 final int expectedLength = 200000; | 158 int position = 0; |
| 159 final int expectedLength = 200000; |
161 | 160 |
162 // Start an independent asynchronous check on the length. | 161 // Start an independent asynchronous check on the length. |
163 Future lengthTest() { | 162 Future lengthTest() { |
164 asyncTestStarted(); | 163 asyncTestStarted(); |
165 return file.length().then((len) { | 164 return file.length().then((len) { |
166 Expect.equals(expectedLength, len); | 165 Expect.equals(expectedLength, len); |
167 asyncTestDone('testReadWriteStreamLargeFile: length check'); | 166 asyncTestDone('testReadWriteStreamLargeFile: length check'); |
168 }); | 167 }); |
169 } | 168 } |
170 | 169 |
171 // Immediate read should read 0 bytes. | 170 // Immediate read should read 0 bytes. |
172 Future contentTest() { | 171 Future contentTest() { |
173 asyncTestStarted(); | 172 asyncTestStarted(); |
174 var completer = new Completer(); | 173 var completer = new Completer(); |
175 input.listen( | 174 input.listen((data) { |
176 (data) { | 175 for (int i = 0; i < data.length; ++i) { |
177 for (int i = 0; i < data.length; ++i) { | 176 Expect.equals(buffer[(i + position) % buffer.length], data[i]); |
178 Expect.equals(buffer[(i + position) % buffer.length], data[i]); | 177 } |
179 } | 178 position += data.length; |
180 position += data.length; | 179 }, onError: (error, trace) { |
181 }, | 180 print('Error on input in testReadWriteStreamLargeFile'); |
182 onError: (error, trace) { | 181 print('with error $error'); |
183 print('Error on input in testReadWriteStreamLargeFile'); | |
184 print('with error $error'); | |
185 if (trace != null) print("StackTrace: $trace"); | |
186 throw error; | |
187 }, | |
188 onDone: () { | |
189 Expect.equals(expectedLength, position); | |
190 testPipe(file, buffer).then((_) { | |
191 asyncTestDone('testReadWriteStreamLargeFile: main test'); | |
192 }).catchError((error, trace) { | |
193 print('Exception while deleting ReadWriteStreamLargeFile file'); | |
194 print('Exception $error'); | |
195 if (trace != null) print("StackTrace: $trace"); | 182 if (trace != null) print("StackTrace: $trace"); |
196 throw error; | 183 throw error; |
197 }).whenComplete(completer.complete); | 184 }, onDone: () { |
198 }); | 185 Expect.equals(expectedLength, position); |
199 return completer.future; | 186 testPipe(file, buffer).then((_) { |
200 } | 187 asyncTestDone('testReadWriteStreamLargeFile: main test'); |
| 188 }).catchError((error, trace) { |
| 189 print('Exception while deleting ReadWriteStreamLargeFile file'); |
| 190 print('Exception $error'); |
| 191 if (trace != null) print("StackTrace: $trace"); |
| 192 throw error; |
| 193 }).whenComplete(completer.complete); |
| 194 }); |
| 195 return completer.future; |
| 196 } |
201 | 197 |
202 return Future.forEach([lengthTest, contentTest], (test) => test()); | 198 return Future.forEach([lengthTest, contentTest], (test) => test()); |
203 }).whenComplete(file.delete).whenComplete(() { | 199 }) |
204 asyncTestDone('testReadWriteStreamLargeFile finished'); | 200 .whenComplete(file.delete) |
205 }); | 201 .whenComplete(() { |
| 202 asyncTestDone('testReadWriteStreamLargeFile finished'); |
| 203 }); |
206 } | 204 } |
207 | 205 |
208 static Future testPipe(File file, buffer) { | 206 static Future testPipe(File file, buffer) { |
209 String outputFilename = '${file.path}_copy'; | 207 String outputFilename = '${file.path}_copy'; |
210 File outputFile = new File(outputFilename); | 208 File outputFile = new File(outputFilename); |
211 var input = file.openRead(); | 209 var input = file.openRead(); |
212 var output = outputFile.openWrite(); | 210 var output = outputFile.openWrite(); |
213 Completer done = new Completer(); | 211 Completer done = new Completer(); |
214 input.pipe(output).then((_) { | 212 input.pipe(output).then((_) { |
215 var copy = outputFile.openRead(); | 213 var copy = outputFile.openRead(); |
216 int position = 0; | 214 int position = 0; |
217 copy.listen( | 215 copy.listen((d) { |
218 (d) { | 216 for (int i = 0; i < d.length; i++) { |
219 for (int i = 0; i < d.length; i++) { | 217 Expect.equals(buffer[(position + i) % buffer.length], d[i]); |
220 Expect.equals(buffer[(position + i) % buffer.length], d[i]); | 218 } |
221 } | 219 position += d.length; |
222 position += d.length; | 220 }, onDone: () { |
223 }, | 221 Expect.equals(2 * buffer.length, position); |
224 onDone: () { | 222 outputFile.delete().then((ignore) { |
225 Expect.equals(2 * buffer.length, position); | 223 done.complete(); |
226 outputFile.delete().then((ignore) { done.complete(); }); | 224 }); |
227 }); | |
228 }); | 225 }); |
| 226 }); |
229 return done.future; | 227 return done.future; |
230 } | 228 } |
231 | 229 |
232 static void testRead() { | 230 static void testRead() { |
233 asyncStart(); | 231 asyncStart(); |
234 // Read a file and check part of it's contents. | 232 // Read a file and check part of it's contents. |
235 String filename = getFilename("file_test.txt"); | 233 String filename = getFilename("file_test.txt"); |
236 File file = new File(filename); | 234 File file = new File(filename); |
237 file.open(mode: READ).then((RandomAccessFile file) { | 235 file.open(mode: READ).then((RandomAccessFile file) { |
238 List<int> buffer = new List<int>(10); | 236 List<int> buffer = new List<int>(10); |
239 file.readInto(buffer, 0, 5).then((bytes_read) { | 237 file.readInto(buffer, 0, 5).then((bytes_read) { |
240 Expect.equals(5, bytes_read); | 238 Expect.equals(5, bytes_read); |
241 file.readInto(buffer, 5, 10).then((bytes_read) { | 239 file.readInto(buffer, 5, 10).then((bytes_read) { |
242 Expect.equals(5, bytes_read); | 240 Expect.equals(5, bytes_read); |
243 Expect.equals(47, buffer[0]); // represents '/' in the file. | 241 Expect.equals(47, buffer[0]); // represents '/' in the file. |
244 Expect.equals(47, buffer[1]); // represents '/' in the file. | 242 Expect.equals(47, buffer[1]); // represents '/' in the file. |
245 Expect.equals(32, buffer[2]); // represents ' ' in the file. | 243 Expect.equals(32, buffer[2]); // represents ' ' in the file. |
246 Expect.equals(67, buffer[3]); // represents 'C' in the file. | 244 Expect.equals(67, buffer[3]); // represents 'C' in the file. |
247 Expect.equals(111, buffer[4]); // represents 'o' in the file. | 245 Expect.equals(111, buffer[4]); // represents 'o' in the file. |
248 Expect.equals(112, buffer[5]); // represents 'p' in the file. | 246 Expect.equals(112, buffer[5]); // represents 'p' in the file. |
249 Expect.equals(121, buffer[6]); // represents 'y' in the file. | 247 Expect.equals(121, buffer[6]); // represents 'y' in the file. |
250 Expect.equals(114, buffer[7]); // represents 'r' in the file. | 248 Expect.equals(114, buffer[7]); // represents 'r' in the file. |
251 Expect.equals(105, buffer[8]); // represents 'i' in the file. | 249 Expect.equals(105, buffer[8]); // represents 'i' in the file. |
252 Expect.equals(103, buffer[9]); // represents 'g' in the file. | 250 Expect.equals(103, buffer[9]); // represents 'g' in the file. |
253 file.close().then((ignore) => asyncEnd()); | 251 file.close().then((ignore) => asyncEnd()); |
254 }); | 252 }); |
255 }); | 253 }); |
256 }); | 254 }); |
257 } | 255 } |
258 | 256 |
259 static void testReadSync() { | 257 static void testReadSync() { |
260 // Read a file and check part of it's contents. | 258 // Read a file and check part of it's contents. |
261 String filename = getFilename("file_test.txt"); | 259 String filename = getFilename("file_test.txt"); |
262 RandomAccessFile raf = (new File(filename)).openSync(); | 260 RandomAccessFile raf = (new File(filename)).openSync(); |
263 List<int> buffer = new List<int>(42); | 261 List<int> buffer = new List<int>(42); |
264 int bytes_read = 0; | 262 int bytes_read = 0; |
265 bytes_read = raf.readIntoSync(buffer, 0, 12); | 263 bytes_read = raf.readIntoSync(buffer, 0, 12); |
266 Expect.equals(12, bytes_read); | 264 Expect.equals(12, bytes_read); |
267 bytes_read = raf.readIntoSync(buffer, 12, 42); | 265 bytes_read = raf.readIntoSync(buffer, 12, 42); |
268 Expect.equals(30, bytes_read); | 266 Expect.equals(30, bytes_read); |
269 Expect.equals(47, buffer[0]); // represents '/' in the file. | 267 Expect.equals(47, buffer[0]); // represents '/' in the file. |
270 Expect.equals(47, buffer[1]); // represents '/' in the file. | 268 Expect.equals(47, buffer[1]); // represents '/' in the file. |
271 Expect.equals(32, buffer[2]); // represents ' ' in the file. | 269 Expect.equals(32, buffer[2]); // represents ' ' in the file. |
272 Expect.equals(67, buffer[3]); // represents 'C' in the file. | 270 Expect.equals(67, buffer[3]); // represents 'C' in the file. |
273 Expect.equals(111, buffer[4]); // represents 'o' in the file. | 271 Expect.equals(111, buffer[4]); // represents 'o' in the file. |
274 Expect.equals(112, buffer[5]); // represents 'p' in the file. | 272 Expect.equals(112, buffer[5]); // represents 'p' in the file. |
275 Expect.equals(121, buffer[6]); // represents 'y' in the file. | 273 Expect.equals(121, buffer[6]); // represents 'y' in the file. |
276 Expect.equals(114, buffer[7]); // represents 'r' in the file. | 274 Expect.equals(114, buffer[7]); // represents 'r' in the file. |
277 Expect.equals(105, buffer[8]); // represents 'i' in the file. | 275 Expect.equals(105, buffer[8]); // represents 'i' in the file. |
278 Expect.equals(103, buffer[9]); // represents 'g' in the file. | 276 Expect.equals(103, buffer[9]); // represents 'g' in the file. |
279 Expect.equals(104, buffer[10]); // represents 'h' in the file. | 277 Expect.equals(104, buffer[10]); // represents 'h' in the file. |
280 Expect.equals(116, buffer[11]); // represents 't' in the file. | 278 Expect.equals(116, buffer[11]); // represents 't' in the file. |
281 raf.closeSync(); | 279 raf.closeSync(); |
282 | 280 |
283 filename = getFilename("fixed_length_file"); | 281 filename = getFilename("fixed_length_file"); |
284 File file = new File(filename); | 282 File file = new File(filename); |
285 int len = file.lengthSync(); | 283 int len = file.lengthSync(); |
286 int read(int length) { | 284 int read(int length) { |
287 var f = file.openSync(); | 285 var f = file.openSync(); |
288 int res = f.readSync(length).length; | 286 int res = f.readSync(length).length; |
289 f.closeSync(); | 287 f.closeSync(); |
290 return res; | 288 return res; |
291 } | 289 } |
| 290 |
292 Expect.equals(0, read(0)); | 291 Expect.equals(0, read(0)); |
293 Expect.equals(1, read(1)); | 292 Expect.equals(1, read(1)); |
294 Expect.equals(len - 1, read(len - 1)); | 293 Expect.equals(len - 1, read(len - 1)); |
295 Expect.equals(len, read(len)); | 294 Expect.equals(len, read(len)); |
296 Expect.equals(len, read(len + 1)); | 295 Expect.equals(len, read(len + 1)); |
297 Expect.equals(len, read(len * 2)); | 296 Expect.equals(len, read(len * 2)); |
298 Expect.equals(len, read(len * 10)); | 297 Expect.equals(len, read(len * 10)); |
299 } | 298 } |
300 | 299 |
301 // Test for file read and write functionality. | 300 // Test for file read and write functionality. |
(...skipping 22 matching lines...) Expand all Loading... |
324 List<int> buffer2 = new List<int>(bytes_read); | 323 List<int> buffer2 = new List<int>(bytes_read); |
325 final File file3 = new File(outFilename); | 324 final File file3 = new File(outFilename); |
326 file3.open(mode: READ).then((openedFile3) { | 325 file3.open(mode: READ).then((openedFile3) { |
327 openedFile3.readInto(buffer2, 0, 42).then((bytes_read) { | 326 openedFile3.readInto(buffer2, 0, 42).then((bytes_read) { |
328 Expect.equals(42, bytes_read); | 327 Expect.equals(42, bytes_read); |
329 openedFile3.close().then((ignore) { | 328 openedFile3.close().then((ignore) { |
330 // Now compare the two buffers to check if they | 329 // Now compare the two buffers to check if they |
331 // are identical. | 330 // are identical. |
332 Expect.equals(buffer1.length, buffer2.length); | 331 Expect.equals(buffer1.length, buffer2.length); |
333 for (int i = 0; i < buffer1.length; i++) { | 332 for (int i = 0; i < buffer1.length; i++) { |
334 Expect.equals(buffer1[i], buffer2[i]); | 333 Expect.equals(buffer1[i], buffer2[i]); |
335 } | 334 } |
336 // Delete the output file. | 335 // Delete the output file. |
337 final file4 = file3; | 336 final file4 = file3; |
338 file4.delete().then((ignore) { | 337 file4.delete().then((ignore) { |
339 file4.exists().then((exists) { | 338 file4.exists().then((exists) { |
340 Expect.isFalse(exists); | 339 Expect.isFalse(exists); |
341 asyncTestDone("testReadWrite"); | 340 asyncTestDone("testReadWrite"); |
342 }); | 341 }); |
343 }); | 342 }); |
344 }); | 343 }); |
(...skipping 21 matching lines...) Expand all Loading... |
366 openedFile.closeSync(); | 365 openedFile.closeSync(); |
367 // Reopen the file in write mode to ensure that we overwrite the content. | 366 // Reopen the file in write mode to ensure that we overwrite the content. |
368 openedFile = (new File(filename)).openSync(mode: WRITE); | 367 openedFile = (new File(filename)).openSync(mode: WRITE); |
369 openedFile.writeFromSync(buffer, 0, buffer.length); | 368 openedFile.writeFromSync(buffer, 0, buffer.length); |
370 Expect.equals(content.length, openedFile.lengthSync()); | 369 Expect.equals(content.length, openedFile.lengthSync()); |
371 openedFile.closeSync(); | 370 openedFile.closeSync(); |
372 // Open the file in append mode and ensure that we do not overwrite | 371 // Open the file in append mode and ensure that we do not overwrite |
373 // the existing content. | 372 // the existing content. |
374 openedFile = (new File(filename)).openSync(mode: APPEND); | 373 openedFile = (new File(filename)).openSync(mode: APPEND); |
375 openedFile.writeFromSync(buffer, 2, buffer.length - 2); | 374 openedFile.writeFromSync(buffer, 2, buffer.length - 2); |
376 Expect.equals(content.length + content.length - 4, | 375 Expect.equals(content.length + content.length - 4, openedFile.lengthSync()); |
377 openedFile.lengthSync()); | |
378 Expect.equals(content + content.substring(2, content.length - 2), | 376 Expect.equals(content + content.substring(2, content.length - 2), |
379 file.readAsStringSync()); | 377 file.readAsStringSync()); |
380 openedFile.closeSync(); | 378 openedFile.closeSync(); |
381 file.deleteSync(); | 379 file.deleteSync(); |
382 } | 380 } |
383 | 381 |
384 static void testOutputStreamWriteAppend() { | 382 static void testOutputStreamWriteAppend() { |
385 asyncTestStarted(); | 383 asyncTestStarted(); |
386 String content = "foobar"; | 384 String content = "foobar"; |
387 String filename = tempDirectory.path + "/outstream_write_append"; | 385 String filename = tempDirectory.path + "/outstream_write_append"; |
388 File file = new File(filename); | 386 File file = new File(filename); |
389 file.createSync(); | 387 file.createSync(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 output.close(); | 431 output.close(); |
434 output.done.then((_) { | 432 output.done.then((_) { |
435 RandomAccessFile raf = file.openSync(); | 433 RandomAccessFile raf = file.openSync(); |
436 Expect.equals(38, raf.lengthSync()); | 434 Expect.equals(38, raf.lengthSync()); |
437 raf.close().then((ignore) { | 435 raf.close().then((ignore) { |
438 asyncTestDone("testOutputStreamWriteString"); | 436 asyncTestDone("testOutputStreamWriteString"); |
439 }); | 437 }); |
440 }); | 438 }); |
441 } | 439 } |
442 | 440 |
443 | |
444 static void testReadWriteSync() { | 441 static void testReadWriteSync() { |
445 // Read a file. | 442 // Read a file. |
446 String inFilename = getFilename("fixed_length_file"); | 443 String inFilename = getFilename("fixed_length_file"); |
447 RandomAccessFile file = (new File(inFilename)).openSync(); | 444 RandomAccessFile file = (new File(inFilename)).openSync(); |
448 List<int> buffer1 = new List<int>(42); | 445 List<int> buffer1 = new List<int>(42); |
449 int bytes_read = 0; | 446 int bytes_read = 0; |
450 int bytes_written = 0; | 447 int bytes_written = 0; |
451 bytes_read = file.readIntoSync(buffer1, 0, 42); | 448 bytes_read = file.readIntoSync(buffer1, 0, 42); |
452 Expect.equals(42, bytes_read); | 449 Expect.equals(42, bytes_read); |
453 file.closeSync(); | 450 file.closeSync(); |
(...skipping 11 matching lines...) Expand all Loading... |
465 openedFile.closeSync(); | 462 openedFile.closeSync(); |
466 // Now read the contents of the file just written. | 463 // Now read the contents of the file just written. |
467 List<int> buffer2 = new List<int>(bytes_read); | 464 List<int> buffer2 = new List<int>(bytes_read); |
468 openedFile = (new File(outFilename)).openSync(); | 465 openedFile = (new File(outFilename)).openSync(); |
469 bytes_read = openedFile.readIntoSync(buffer2, 0, 42); | 466 bytes_read = openedFile.readIntoSync(buffer2, 0, 42); |
470 Expect.equals(42, bytes_read); | 467 Expect.equals(42, bytes_read); |
471 openedFile.closeSync(); | 468 openedFile.closeSync(); |
472 // Now compare the two buffers to check if they are identical. | 469 // Now compare the two buffers to check if they are identical. |
473 Expect.equals(buffer1.length, buffer2.length); | 470 Expect.equals(buffer1.length, buffer2.length); |
474 for (int i = 0; i < buffer1.length; i++) { | 471 for (int i = 0; i < buffer1.length; i++) { |
475 Expect.equals(buffer1[i], buffer2[i]); | 472 Expect.equals(buffer1[i], buffer2[i]); |
476 } | 473 } |
477 // Delete the output file. | 474 // Delete the output file. |
478 outFile.deleteSync(); | 475 outFile.deleteSync(); |
479 Expect.isFalse(outFile.existsSync()); | 476 Expect.isFalse(outFile.existsSync()); |
480 } | 477 } |
481 | 478 |
482 static void testReadWriteNoArgsSync() { | 479 static void testReadWriteNoArgsSync() { |
483 // Read a file. | 480 // Read a file. |
484 String inFilename = getFilename("fixed_length_file"); | 481 String inFilename = getFilename("fixed_length_file"); |
485 RandomAccessFile file = (new File(inFilename)).openSync(); | 482 RandomAccessFile file = (new File(inFilename)).openSync(); |
(...skipping 17 matching lines...) Expand all Loading... |
503 openedFile.closeSync(); | 500 openedFile.closeSync(); |
504 // Now read the contents of the file just written. | 501 // Now read the contents of the file just written. |
505 List<int> buffer2 = new List<int>(bytes_read); | 502 List<int> buffer2 = new List<int>(bytes_read); |
506 openedFile = (new File(outFilename)).openSync(); | 503 openedFile = (new File(outFilename)).openSync(); |
507 bytes_read = openedFile.readIntoSync(buffer2, 0); | 504 bytes_read = openedFile.readIntoSync(buffer2, 0); |
508 Expect.equals(42, bytes_read); | 505 Expect.equals(42, bytes_read); |
509 openedFile.closeSync(); | 506 openedFile.closeSync(); |
510 // Now compare the two buffers to check if they are identical. | 507 // Now compare the two buffers to check if they are identical. |
511 Expect.equals(buffer1.length, buffer2.length); | 508 Expect.equals(buffer1.length, buffer2.length); |
512 for (int i = 0; i < buffer1.length; i++) { | 509 for (int i = 0; i < buffer1.length; i++) { |
513 Expect.equals(buffer1[i], buffer2[i]); | 510 Expect.equals(buffer1[i], buffer2[i]); |
514 } | 511 } |
515 // Delete the output file. | 512 // Delete the output file. |
516 outFile.deleteSync(); | 513 outFile.deleteSync(); |
517 Expect.isFalse(outFile.existsSync()); | 514 Expect.isFalse(outFile.existsSync()); |
518 } | 515 } |
519 | 516 |
520 static void testReadEmptyFileSync() { | 517 static void testReadEmptyFileSync() { |
521 String fileName = tempDirectory.path + "/empty_file_sync"; | 518 String fileName = tempDirectory.path + "/empty_file_sync"; |
522 File file = new File(fileName); | 519 File file = new File(fileName); |
523 file.createSync(); | 520 file.createSync(); |
(...skipping 27 matching lines...) Expand all Loading... |
551 final File file = new File(fileName); | 548 final File file = new File(fileName); |
552 file.create().then((ignore) { | 549 file.create().then((ignore) { |
553 file.open(mode: WRITE).then((RandomAccessFile openedFile) { | 550 file.open(mode: WRITE).then((RandomAccessFile openedFile) { |
554 // Write bytes from 0 to 7. | 551 // Write bytes from 0 to 7. |
555 openedFile.writeFromSync([0], 0, 1); | 552 openedFile.writeFromSync([0], 0, 1); |
556 openedFile.writeFromSync(const [1], 0, 1); | 553 openedFile.writeFromSync(const [1], 0, 1); |
557 openedFile.writeFromSync(new MyListOfOneElement(2), 0, 1); | 554 openedFile.writeFromSync(new MyListOfOneElement(2), 0, 1); |
558 var x = 12345678901234567890123456789012345678901234567890; | 555 var x = 12345678901234567890123456789012345678901234567890; |
559 var y = 12345678901234567890123456789012345678901234567893; | 556 var y = 12345678901234567890123456789012345678901234567893; |
560 openedFile.writeFromSync([y - x], 0, 1); | 557 openedFile.writeFromSync([y - x], 0, 1); |
561 openedFile.writeFromSync([260], 0, 1); // 260 = 256 + 4 = 0x104. | 558 openedFile.writeFromSync([260], 0, 1); // 260 = 256 + 4 = 0x104. |
562 openedFile.writeFromSync(const [261], 0, 1); | 559 openedFile.writeFromSync(const [261], 0, 1); |
563 openedFile.writeFromSync(new MyListOfOneElement(262), 0, 1); | 560 openedFile.writeFromSync(new MyListOfOneElement(262), 0, 1); |
564 x = 12345678901234567890123456789012345678901234567890; | 561 x = 12345678901234567890123456789012345678901234567890; |
565 y = 12345678901234567890123456789012345678901234568153; | 562 y = 12345678901234567890123456789012345678901234568153; |
566 openedFile.writeFrom([y - x], 0, 1).then((ignore) { | 563 openedFile.writeFrom([y - x], 0, 1).then((ignore) { |
567 openedFile.close().then((ignore) { | 564 openedFile.close().then((ignore) { |
568 // Check the written bytes. | 565 // Check the written bytes. |
569 final File file2 = new File(fileName); | 566 final File file2 = new File(fileName); |
570 var openedFile2 = file2.openSync(); | 567 var openedFile2 = file2.openSync(); |
571 var length = openedFile2.lengthSync(); | 568 var length = openedFile2.lengthSync(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
603 if (tmp != null) { | 600 if (tmp != null) { |
604 tmp.deleteSync(recursive: true); | 601 tmp.deleteSync(recursive: true); |
605 } | 602 } |
606 } | 603 } |
607 } | 604 } |
608 | 605 |
609 static void testDirectory() { | 606 static void testDirectory() { |
610 asyncTestStarted(); | 607 asyncTestStarted(); |
611 var tempDir = tempDirectory.path; | 608 var tempDir = tempDirectory.path; |
612 var file = new File("${tempDir}/testDirectory"); | 609 var file = new File("${tempDir}/testDirectory"); |
613 file.create().then((ignore) { | 610 file.create().then((ignore) { |
614 Directory d = file.parent; | 611 Directory d = file.parent; |
615 d.exists().then((xexists) { | 612 d.exists().then((xexists) { |
616 Expect.isTrue(xexists); | 613 Expect.isTrue(xexists); |
617 Expect.isTrue(d.path.endsWith(tempDir)); | 614 Expect.isTrue(d.path.endsWith(tempDir)); |
618 file.delete().then((ignore) => asyncTestDone("testDirectory")); | 615 file.delete().then((ignore) => asyncTestDone("testDirectory")); |
619 }); | |
620 }); | 616 }); |
| 617 }); |
621 } | 618 } |
622 | 619 |
623 static void testDirectorySync() { | 620 static void testDirectorySync() { |
624 var tempDir = tempDirectory.path; | 621 var tempDir = tempDirectory.path; |
625 var file = new File("${tempDir}/testDirectorySync"); | 622 var file = new File("${tempDir}/testDirectorySync"); |
626 // Non-existing file still provides the directory. | 623 // Non-existing file still provides the directory. |
627 Expect.equals("${tempDir}", file.parent.path); | 624 Expect.equals("${tempDir}", file.parent.path); |
628 file.createSync(); | 625 file.createSync(); |
629 // Check that the path of the returned directory is the temp directory. | 626 // Check that the path of the returned directory is the temp directory. |
630 Directory d = file.parent; | 627 Directory d = file.parent; |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
834 } | 831 } |
835 | 832 |
836 static testWriteFrom() async { | 833 static testWriteFrom() async { |
837 asyncTestStarted(); | 834 asyncTestStarted(); |
838 File file = new File(tempDirectory.path + "/out_write_from"); | 835 File file = new File(tempDirectory.path + "/out_write_from"); |
839 | 836 |
840 var buffer = const [1, 2, 3]; | 837 var buffer = const [1, 2, 3]; |
841 var openedFile = await file.open(mode: WRITE); | 838 var openedFile = await file.open(mode: WRITE); |
842 | 839 |
843 await openedFile.writeFrom(buffer); | 840 await openedFile.writeFrom(buffer); |
844 var result = []..addAll(buffer);; | 841 var result = []..addAll(buffer); |
| 842 ; |
845 | 843 |
846 write([start, end]) async { | 844 write([start, end]) async { |
847 var returnValue = await openedFile.writeFrom(buffer, start, end); | 845 var returnValue = await openedFile.writeFrom(buffer, start, end); |
848 Expect.identical(openedFile, returnValue); | 846 Expect.identical(openedFile, returnValue); |
849 result.addAll(buffer.sublist(start, end)); | 847 result.addAll(buffer.sublist(start, end)); |
850 } | 848 } |
| 849 |
851 await write(0, 3); | 850 await write(0, 3); |
852 await write(0, 2); | 851 await write(0, 2); |
853 await write(1, 2); | 852 await write(1, 2); |
854 await write(1, 3); | 853 await write(1, 3); |
855 await write(2, 3); | 854 await write(2, 3); |
856 await write(0, 0); | 855 await write(0, 0); |
857 | 856 |
858 var bytesFromFile = await file.readAsBytes(); | 857 var bytesFromFile = await file.readAsBytes(); |
859 Expect.listEquals(result, bytesFromFile); | 858 Expect.listEquals(result, bytesFromFile); |
860 | 859 |
861 await openedFile.close(); | 860 await openedFile.close(); |
862 | 861 |
863 asyncTestDone("testWriteFrom"); | 862 asyncTestDone("testWriteFrom"); |
864 } | 863 } |
865 | 864 |
866 static void testWriteFromSync() { | 865 static void testWriteFromSync() { |
867 File file = new File(tempDirectory.path + "/out_write_from_sync"); | 866 File file = new File(tempDirectory.path + "/out_write_from_sync"); |
868 | 867 |
869 var buffer = const [1, 2, 3]; | 868 var buffer = const [1, 2, 3]; |
870 var openedFile = file.openSync(mode: WRITE); | 869 var openedFile = file.openSync(mode: WRITE); |
871 | 870 |
872 openedFile.writeFromSync(buffer); | 871 openedFile.writeFromSync(buffer); |
873 var result = []..addAll(buffer);; | 872 var result = []..addAll(buffer); |
| 873 ; |
874 | 874 |
875 write([start, end]) { | 875 write([start, end]) { |
876 var returnValue = openedFile.writeFromSync(buffer, start, end); | 876 var returnValue = openedFile.writeFromSync(buffer, start, end); |
877 result.addAll(buffer.sublist(start, end)); | 877 result.addAll(buffer.sublist(start, end)); |
878 } | 878 } |
| 879 |
879 write(0, 3); | 880 write(0, 3); |
880 write(0, 2); | 881 write(0, 2); |
881 write(1, 2); | 882 write(1, 2); |
882 write(1, 3); | 883 write(1, 3); |
883 write(2, 3); | 884 write(2, 3); |
884 | 885 |
885 var bytesFromFile = file.readAsBytesSync(); | 886 var bytesFromFile = file.readAsBytesSync(); |
886 Expect.listEquals(result, bytesFromFile); | 887 Expect.listEquals(result, bytesFromFile); |
887 | 888 |
888 openedFile.closeSync(); | 889 openedFile.closeSync(); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
976 } | 977 } |
977 Expect.equals(true, exceptionCaught); | 978 Expect.equals(true, exceptionCaught); |
978 Expect.equals(true, !wrongExceptionCaught); | 979 Expect.equals(true, !wrongExceptionCaught); |
979 input.deleteSync(); | 980 input.deleteSync(); |
980 } | 981 } |
981 | 982 |
982 // Tests stream exception handling after file was closed. | 983 // Tests stream exception handling after file was closed. |
983 static void testCloseExceptionStream() { | 984 static void testCloseExceptionStream() { |
984 asyncTestStarted(); | 985 asyncTestStarted(); |
985 List<int> buffer = new List<int>(42); | 986 List<int> buffer = new List<int>(42); |
986 File file = | 987 File file = new File(tempDirectory.path + "/out_close_exception_stream"); |
987 new File(tempDirectory.path + "/out_close_exception_stream"); | |
988 file.createSync(); | 988 file.createSync(); |
989 var output = file.openWrite(); | 989 var output = file.openWrite(); |
990 output.close(); | 990 output.close(); |
991 output.add(buffer); // Ignored. | 991 output.add(buffer); // Ignored. |
992 output.done.then((_) { | 992 output.done.then((_) { |
993 file.deleteSync(); | 993 file.deleteSync(); |
994 asyncTestDone("testCloseExceptionStream"); | 994 asyncTestDone("testCloseExceptionStream"); |
995 }); | 995 }); |
996 } | 996 } |
997 | 997 |
998 // Tests buffer out of bounds exception. | 998 // Tests buffer out of bounds exception. |
999 static void testBufferOutOfBoundsException() { | 999 static void testBufferOutOfBoundsException() { |
1000 bool exceptionCaught = false; | 1000 bool exceptionCaught = false; |
1001 bool wrongExceptionCaught = false; | 1001 bool wrongExceptionCaught = false; |
1002 File file = | 1002 File file = new File(tempDirectory.path + "/out_buffer_out_of_bounds"); |
1003 new File(tempDirectory.path + "/out_buffer_out_of_bounds"); | |
1004 RandomAccessFile openedFile = file.openSync(mode: WRITE); | 1003 RandomAccessFile openedFile = file.openSync(mode: WRITE); |
1005 try { | 1004 try { |
1006 List<int> buffer = new List<int>(10); | 1005 List<int> buffer = new List<int>(10); |
1007 openedFile.readIntoSync(buffer, 0, 12); | 1006 openedFile.readIntoSync(buffer, 0, 12); |
1008 } on RangeError catch (ex) { | 1007 } on RangeError catch (ex) { |
1009 exceptionCaught = true; | 1008 exceptionCaught = true; |
1010 } on Exception catch (ex) { | 1009 } on Exception catch (ex) { |
1011 wrongExceptionCaught = true; | 1010 wrongExceptionCaught = true; |
1012 } | 1011 } |
1013 Expect.equals(true, exceptionCaught); | 1012 Expect.equals(true, exceptionCaught); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1089 } | 1088 } |
1090 Expect.equals(true, exceptionCaught); | 1089 Expect.equals(true, exceptionCaught); |
1091 Expect.equals(true, !wrongExceptionCaught); | 1090 Expect.equals(true, !wrongExceptionCaught); |
1092 openedFile.closeSync(); | 1091 openedFile.closeSync(); |
1093 file.deleteSync(); | 1092 file.deleteSync(); |
1094 } | 1093 } |
1095 | 1094 |
1096 static void testOpenDirectoryAsFile() { | 1095 static void testOpenDirectoryAsFile() { |
1097 var f = new File('.'); | 1096 var f = new File('.'); |
1098 var future = f.open(mode: READ); | 1097 var future = f.open(mode: READ); |
1099 future.then((r) => Expect.fail('Directory opened as file')) | 1098 future |
1100 .catchError((e) {}); | 1099 .then((r) => Expect.fail('Directory opened as file')) |
| 1100 .catchError((e) {}); |
1101 } | 1101 } |
1102 | 1102 |
1103 static void testOpenDirectoryAsFileSync() { | 1103 static void testOpenDirectoryAsFileSync() { |
1104 var f = new File('.'); | 1104 var f = new File('.'); |
1105 try { | 1105 try { |
1106 f.openSync(); | 1106 f.openSync(); |
1107 Expect.fail("Expected exception opening directory as file"); | 1107 Expect.fail("Expected exception opening directory as file"); |
1108 } catch (e) { | 1108 } catch (e) { |
1109 Expect.isTrue(e is FileSystemException); | 1109 Expect.isTrue(e is FileSystemException); |
1110 } | 1110 } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1188 var text = new File(name).readAsStringSync(); | 1188 var text = new File(name).readAsStringSync(); |
1189 Expect.isTrue(text.endsWith("42 bytes.")); | 1189 Expect.isTrue(text.endsWith("42 bytes.")); |
1190 Expect.equals(42, text.length); | 1190 Expect.equals(42, text.length); |
1191 name = getFilename("read_as_text.dat"); | 1191 name = getFilename("read_as_text.dat"); |
1192 text = new File(name).readAsStringSync(); | 1192 text = new File(name).readAsStringSync(); |
1193 Expect.equals(6, text.length); | 1193 Expect.equals(6, text.length); |
1194 var expected = [955, 120, 46, 32, 120, 10]; | 1194 var expected = [955, 120, 46, 32, 120, 10]; |
1195 Expect.listEquals(expected, text.codeUnits); | 1195 Expect.listEquals(expected, text.codeUnits); |
1196 // First character is not ASCII. The default ASCII decoder will throw. | 1196 // First character is not ASCII. The default ASCII decoder will throw. |
1197 Expect.throws(() => new File(name).readAsStringSync(encoding: ASCII), | 1197 Expect.throws(() => new File(name).readAsStringSync(encoding: ASCII), |
1198 (e) => e is FileSystemException); | 1198 (e) => e is FileSystemException); |
1199 // We can use an ASCII decoder that inserts the replacement character. | 1199 // We can use an ASCII decoder that inserts the replacement character. |
1200 var lenientAscii = const AsciiCodec(allowInvalid: true); | 1200 var lenientAscii = const AsciiCodec(allowInvalid: true); |
1201 text = new File(name).readAsStringSync(encoding: lenientAscii); | 1201 text = new File(name).readAsStringSync(encoding: lenientAscii); |
1202 // Default replacement character is the Unicode replacement character. | 1202 // Default replacement character is the Unicode replacement character. |
1203 expected = [UNICODE_REPLACEMENT_CHARACTER_RUNE, | 1203 expected = [ |
1204 UNICODE_REPLACEMENT_CHARACTER_RUNE, | 1204 UNICODE_REPLACEMENT_CHARACTER_RUNE, |
1205 120, 46, 32, 120, 10]; | 1205 UNICODE_REPLACEMENT_CHARACTER_RUNE, |
| 1206 120, |
| 1207 46, |
| 1208 32, |
| 1209 120, |
| 1210 10 |
| 1211 ]; |
1206 Expect.listEquals(expected, text.codeUnits); | 1212 Expect.listEquals(expected, text.codeUnits); |
1207 text = new File(name).readAsStringSync(encoding: LATIN1); | 1213 text = new File(name).readAsStringSync(encoding: LATIN1); |
1208 expected = [206, 187, 120, 46, 32, 120, 10]; | 1214 expected = [206, 187, 120, 46, 32, 120, 10]; |
1209 Expect.equals(7, text.length); | 1215 Expect.equals(7, text.length); |
1210 Expect.listEquals(expected, text.codeUnits); | 1216 Expect.listEquals(expected, text.codeUnits); |
1211 } | 1217 } |
1212 | 1218 |
1213 static void testReadAsTextSyncEmptyFile() { | 1219 static void testReadAsTextSyncEmptyFile() { |
1214 var name = getFilename("empty_file"); | 1220 var name = getFilename("empty_file"); |
1215 var text = new File(name).readAsStringSync(); | 1221 var text = new File(name).readAsStringSync(); |
(...skipping 18 matching lines...) Expand all Loading... |
1234 var lines = new File(name).readAsLinesSync(); | 1240 var lines = new File(name).readAsLinesSync(); |
1235 Expect.equals(1, lines.length); | 1241 Expect.equals(1, lines.length); |
1236 var line = lines[0]; | 1242 var line = lines[0]; |
1237 Expect.isTrue(line.endsWith("42 bytes.")); | 1243 Expect.isTrue(line.endsWith("42 bytes.")); |
1238 Expect.equals(42, line.length); | 1244 Expect.equals(42, line.length); |
1239 name = getFilename("readline_test1.dat"); | 1245 name = getFilename("readline_test1.dat"); |
1240 lines = new File(name).readAsLinesSync(); | 1246 lines = new File(name).readAsLinesSync(); |
1241 Expect.equals(10, lines.length); | 1247 Expect.equals(10, lines.length); |
1242 } | 1248 } |
1243 | 1249 |
1244 | |
1245 static void testReadAsErrors() { | 1250 static void testReadAsErrors() { |
1246 asyncTestStarted(); | 1251 asyncTestStarted(); |
1247 var f = new File('.'); | 1252 var f = new File('.'); |
1248 Expect.throws(f.readAsBytesSync, (e) => e is FileSystemException); | 1253 Expect.throws(f.readAsBytesSync, (e) => e is FileSystemException); |
1249 Expect.throws(f.readAsStringSync, (e) => e is FileSystemException); | 1254 Expect.throws(f.readAsStringSync, (e) => e is FileSystemException); |
1250 Expect.throws(f.readAsLinesSync, (e) => e is FileSystemException); | 1255 Expect.throws(f.readAsLinesSync, (e) => e is FileSystemException); |
1251 var readAsBytesFuture = f.readAsBytes(); | 1256 var readAsBytesFuture = f.readAsBytes(); |
1252 readAsBytesFuture.then((bytes) => Expect.fail("no bytes expected")) | 1257 readAsBytesFuture |
1253 .catchError((e) { | 1258 .then((bytes) => Expect.fail("no bytes expected")) |
| 1259 .catchError((e) { |
1254 var readAsStringFuture = f.readAsString(encoding: UTF8); | 1260 var readAsStringFuture = f.readAsString(encoding: UTF8); |
1255 readAsStringFuture.then((text) => Expect.fail("no text expected")) | 1261 readAsStringFuture |
1256 .catchError((e) { | 1262 .then((text) => Expect.fail("no text expected")) |
| 1263 .catchError((e) { |
1257 var readAsLinesFuture = f.readAsLines(encoding: UTF8); | 1264 var readAsLinesFuture = f.readAsLines(encoding: UTF8); |
1258 readAsLinesFuture.then((lines) => Expect.fail("no lines expected")) | 1265 readAsLinesFuture |
1259 .catchError((e) { | 1266 .then((lines) => Expect.fail("no lines expected")) |
| 1267 .catchError((e) { |
1260 asyncTestDone("testReadAsLines"); | 1268 asyncTestDone("testReadAsLines"); |
1261 }); | 1269 }); |
1262 }); | 1270 }); |
1263 }); | 1271 }); |
1264 } | 1272 } |
1265 | 1273 |
1266 static void testLastModified() { | 1274 static void testLastModified() { |
1267 asyncTestStarted(); | 1275 asyncTestStarted(); |
1268 new File(Platform.executable).lastModified().then((modified) { | 1276 new File(Platform.executable).lastModified().then((modified) { |
1269 Expect.isTrue(modified is DateTime); | 1277 Expect.isTrue(modified is DateTime); |
(...skipping 11 matching lines...) Expand all Loading... |
1281 }); | 1289 }); |
1282 } | 1290 } |
1283 | 1291 |
1284 static void testDoubleAsyncOperation() { | 1292 static void testDoubleAsyncOperation() { |
1285 asyncTestStarted(); | 1293 asyncTestStarted(); |
1286 var file = new File(Platform.executable).openSync(); | 1294 var file = new File(Platform.executable).openSync(); |
1287 var completer = new Completer(); | 1295 var completer = new Completer(); |
1288 int done = 0; | 1296 int done = 0; |
1289 bool error = false; | 1297 bool error = false; |
1290 void getLength() { | 1298 void getLength() { |
1291 file.length() | 1299 file.length().catchError((e) { |
1292 .catchError((e) { error = true; }) | 1300 error = true; |
1293 .whenComplete(() { | 1301 }).whenComplete(() { |
1294 if (++done == 2) { | 1302 if (++done == 2) { |
1295 asyncTestDone("testDoubleAsyncOperation"); | 1303 asyncTestDone("testDoubleAsyncOperation"); |
1296 Expect.isTrue(error); | 1304 Expect.isTrue(error); |
1297 file.lengthSync(); | 1305 file.lengthSync(); |
1298 file.closeSync(); | 1306 file.closeSync(); |
1299 } | 1307 } |
1300 }); | 1308 }); |
1301 } | 1309 } |
| 1310 |
1302 getLength(); | 1311 getLength(); |
1303 getLength(); | 1312 getLength(); |
1304 Expect.throws(() => file.lengthSync()); | 1313 Expect.throws(() => file.lengthSync()); |
1305 } | 1314 } |
1306 | 1315 |
1307 static void testLastModifiedSync() { | 1316 static void testLastModifiedSync() { |
1308 var modified = new File(Platform.executable).lastModifiedSync(); | 1317 var modified = new File(Platform.executable).lastModifiedSync(); |
1309 Expect.isTrue(modified is DateTime); | 1318 Expect.isTrue(modified is DateTime); |
1310 Expect.isTrue(modified.isBefore(new DateTime.now())); | 1319 Expect.isTrue(modified.isBefore(new DateTime.now())); |
1311 } | 1320 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1355 File file = new File(newFilePath); | 1364 File file = new File(newFilePath); |
1356 file.createSync(); | 1365 file.createSync(); |
1357 DateTime modifiedTime = new DateTime(2016, 1, 1); | 1366 DateTime modifiedTime = new DateTime(2016, 1, 1); |
1358 file.setLastModifiedSync(modifiedTime); | 1367 file.setLastModifiedSync(modifiedTime); |
1359 FileStat stat = file.statSync(); | 1368 FileStat stat = file.statSync(); |
1360 Expect.equals(2016, stat.modified.year); | 1369 Expect.equals(2016, stat.modified.year); |
1361 Expect.equals(1, stat.modified.month); | 1370 Expect.equals(1, stat.modified.month); |
1362 Expect.equals(1, stat.modified.day); | 1371 Expect.equals(1, stat.modified.day); |
1363 } | 1372 } |
1364 | 1373 |
1365 | |
1366 static testSetLastModified() async { | 1374 static testSetLastModified() async { |
1367 asyncTestStarted(); | 1375 asyncTestStarted(); |
1368 String newFilePath = '${tempDirectory.path}/set_last_modified_test'; | 1376 String newFilePath = '${tempDirectory.path}/set_last_modified_test'; |
1369 File file = new File(newFilePath); | 1377 File file = new File(newFilePath); |
1370 file.createSync(); | 1378 file.createSync(); |
1371 DateTime modifiedTime = new DateTime(2016, 1, 1); | 1379 DateTime modifiedTime = new DateTime(2016, 1, 1); |
1372 await file.setLastModified(modifiedTime); | 1380 await file.setLastModified(modifiedTime); |
1373 FileStat stat = await file.stat(); | 1381 FileStat stat = await file.stat(); |
1374 Expect.equals(2016, stat.modified.year); | 1382 Expect.equals(2016, stat.modified.year); |
1375 Expect.equals(1, stat.modified.month); | 1383 Expect.equals(1, stat.modified.month); |
1376 Expect.equals(1, stat.modified.day); | 1384 Expect.equals(1, stat.modified.day); |
1377 asyncTestDone("testSetLastModified"); | 1385 asyncTestDone("testSetLastModified"); |
1378 } | 1386 } |
1379 | 1387 |
1380 | |
1381 static void testSetLastModifiedSyncDirectory() { | 1388 static void testSetLastModifiedSyncDirectory() { |
1382 Directory tmp = tempDirectory.createTempSync('file_last_modified_test_'); | 1389 Directory tmp = tempDirectory.createTempSync('file_last_modified_test_'); |
1383 String dirPath = '${tmp.path}/dir'; | 1390 String dirPath = '${tmp.path}/dir'; |
1384 new Directory(dirPath).createSync(); | 1391 new Directory(dirPath).createSync(); |
1385 try { | 1392 try { |
1386 DateTime modifiedTime = new DateTime(2016, 1, 1); | 1393 DateTime modifiedTime = new DateTime(2016, 1, 1); |
1387 new File(dirPath).setLastModifiedSync(modifiedTime); | 1394 new File(dirPath).setLastModifiedSync(modifiedTime); |
1388 Expect.fail('Expected operation to throw'); | 1395 Expect.fail('Expected operation to throw'); |
1389 } catch (e) { | 1396 } catch (e) { |
1390 if (e is! FileSystemException) { | 1397 if (e is! FileSystemException) { |
(...skipping 10 matching lines...) Expand all Loading... |
1401 File file = new File(newFilePath); | 1408 File file = new File(newFilePath); |
1402 file.createSync(); | 1409 file.createSync(); |
1403 DateTime accessedTime = new DateTime(2016, 1, 1); | 1410 DateTime accessedTime = new DateTime(2016, 1, 1); |
1404 file.setLastAccessedSync(accessedTime); | 1411 file.setLastAccessedSync(accessedTime); |
1405 FileStat stat = file.statSync(); | 1412 FileStat stat = file.statSync(); |
1406 Expect.equals(2016, stat.accessed.year); | 1413 Expect.equals(2016, stat.accessed.year); |
1407 Expect.equals(1, stat.accessed.month); | 1414 Expect.equals(1, stat.accessed.month); |
1408 Expect.equals(1, stat.accessed.day); | 1415 Expect.equals(1, stat.accessed.day); |
1409 } | 1416 } |
1410 | 1417 |
1411 | |
1412 static testSetLastAccessed() async { | 1418 static testSetLastAccessed() async { |
1413 asyncTestStarted(); | 1419 asyncTestStarted(); |
1414 String newFilePath = '${tempDirectory.path}/set_last_accessed_test'; | 1420 String newFilePath = '${tempDirectory.path}/set_last_accessed_test'; |
1415 File file = new File(newFilePath); | 1421 File file = new File(newFilePath); |
1416 file.createSync(); | 1422 file.createSync(); |
1417 DateTime accessedTime = new DateTime(2016, 1, 1); | 1423 DateTime accessedTime = new DateTime(2016, 1, 1); |
1418 await file.setLastAccessed(accessedTime); | 1424 await file.setLastAccessed(accessedTime); |
1419 FileStat stat = await file.stat(); | 1425 FileStat stat = await file.stat(); |
1420 Expect.equals(2016, stat.accessed.year); | 1426 Expect.equals(2016, stat.accessed.year); |
1421 Expect.equals(1, stat.accessed.month); | 1427 Expect.equals(1, stat.accessed.month); |
1422 Expect.equals(1, stat.accessed.day); | 1428 Expect.equals(1, stat.accessed.day); |
1423 asyncTestDone("testSetLastAccessed"); | 1429 asyncTestDone("testSetLastAccessed"); |
1424 } | 1430 } |
1425 | 1431 |
1426 | |
1427 static void testSetLastAccessedSyncDirectory() { | 1432 static void testSetLastAccessedSyncDirectory() { |
1428 Directory tmp = tempDirectory.createTempSync('file_last_accessed_test_'); | 1433 Directory tmp = tempDirectory.createTempSync('file_last_accessed_test_'); |
1429 String dirPath = '${tmp.path}/dir'; | 1434 String dirPath = '${tmp.path}/dir'; |
1430 new Directory(dirPath).createSync(); | 1435 new Directory(dirPath).createSync(); |
1431 try { | 1436 try { |
1432 DateTime accessedTime = new DateTime(2016, 1, 1); | 1437 DateTime accessedTime = new DateTime(2016, 1, 1); |
1433 new File(dirPath).setLastAccessedSync(accessedTime); | 1438 new File(dirPath).setLastAccessedSync(accessedTime); |
1434 Expect.fail('Expected operation to throw'); | 1439 Expect.fail('Expected operation to throw'); |
1435 } catch (e) { | 1440 } catch (e) { |
1436 if (e is! FileSystemException) { | 1441 if (e is! FileSystemException) { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1500 file.open(mode: APPEND).then((openedFile) { | 1505 file.open(mode: APPEND).then((openedFile) { |
1501 openedFile.setPosition(2).then((_) { | 1506 openedFile.setPosition(2).then((_) { |
1502 openedFile.writeString(string).then((_) { | 1507 openedFile.writeString(string).then((_) { |
1503 openedFile.length().then((l) { | 1508 openedFile.length().then((l) { |
1504 Expect.equals(4, l); | 1509 Expect.equals(4, l); |
1505 openedFile.close().then((_) { | 1510 openedFile.close().then((_) { |
1506 file.readAsString().then((readBack) { | 1511 file.readAsString().then((readBack) { |
1507 Expect.stringEquals(readBack, '$string$string'); | 1512 Expect.stringEquals(readBack, '$string$string'); |
1508 file.delete().then((_) { | 1513 file.delete().then((_) { |
1509 file.exists().then((e) { | 1514 file.exists().then((e) { |
1510 Expect.isFalse(e); | 1515 Expect.isFalse(e); |
1511 asyncTestDone("testWriteStringUtf8"); | 1516 asyncTestDone("testWriteStringUtf8"); |
1512 }); | 1517 }); |
1513 }); | 1518 }); |
1514 }); | 1519 }); |
1515 }); | 1520 }); |
1516 }); | 1521 }); |
1517 }); | 1522 }); |
1518 }); | 1523 }); |
1519 }); | 1524 }); |
1520 }); | 1525 }); |
1521 }); | 1526 }); |
(...skipping 13 matching lines...) Expand all Loading... |
1535 openedFile.writeStringSync(string); | 1540 openedFile.writeStringSync(string); |
1536 Expect.equals(4, openedFile.lengthSync()); | 1541 Expect.equals(4, openedFile.lengthSync()); |
1537 openedFile.closeSync(); | 1542 openedFile.closeSync(); |
1538 var readBack = file.readAsStringSync(); | 1543 var readBack = file.readAsStringSync(); |
1539 Expect.stringEquals(readBack, '$string$string'); | 1544 Expect.stringEquals(readBack, '$string$string'); |
1540 file.deleteSync(); | 1545 file.deleteSync(); |
1541 Expect.isFalse(file.existsSync()); | 1546 Expect.isFalse(file.existsSync()); |
1542 } | 1547 } |
1543 | 1548 |
1544 static void testRename({bool targetExists}) { | 1549 static void testRename({bool targetExists}) { |
1545 lift(Function f) => | 1550 lift(Function f) => (futureValue) => futureValue.then((value) => f(value)); |
1546 (futureValue) => futureValue.then((value) => f(value)); | |
1547 asyncTestStarted(); | 1551 asyncTestStarted(); |
1548 | 1552 |
1549 String source = join(tempDirectory.path, 'rename_${targetExists}_source'); | 1553 String source = join(tempDirectory.path, 'rename_${targetExists}_source'); |
1550 String dest = join(tempDirectory.path, 'rename_${targetExists}_dest'); | 1554 String dest = join(tempDirectory.path, 'rename_${targetExists}_dest'); |
1551 var file = new File(source); | 1555 var file = new File(source); |
1552 var newfile = new File(dest); | 1556 var newfile = new File(dest); |
1553 file.create() | 1557 file |
1554 .then((_) => targetExists ? newfile.create() : null) | 1558 .create() |
1555 .then((_) => file.rename(dest)) | 1559 .then((_) => targetExists ? newfile.create() : null) |
1556 .then((_) => lift(Expect.isFalse)(file.exists())) | 1560 .then((_) => file.rename(dest)) |
1557 .then((_) => lift(Expect.isTrue)(newfile.exists())) | 1561 .then((_) => lift(Expect.isFalse)(file.exists())) |
1558 .then((_) => newfile.delete()) | 1562 .then((_) => lift(Expect.isTrue)(newfile.exists())) |
1559 .then((_) => lift(Expect.isFalse)(newfile.exists())) | 1563 .then((_) => newfile.delete()) |
1560 .then((_) { | 1564 .then((_) => lift(Expect.isFalse)(newfile.exists())) |
1561 if (Platform.operatingSystem != "windows") { | 1565 .then((_) { |
1562 new Link(source).create(dest) | 1566 if (Platform.operatingSystem != "windows") { |
1563 .then((_) => file.rename("xxx")) | 1567 new Link(source).create(dest).then((_) => file.rename("xxx")).then((_) { |
1564 .then((_) { throw "Rename of broken link succeeded"; }) | 1568 throw "Rename of broken link succeeded"; |
1565 .catchError((e) { | 1569 }).catchError((e) { |
1566 Expect.isTrue(e is FileSystemException); | 1570 Expect.isTrue(e is FileSystemException); |
1567 asyncTestDone("testRename$targetExists"); | |
1568 }); | |
1569 } else { | |
1570 asyncTestDone("testRename$targetExists"); | 1571 asyncTestDone("testRename$targetExists"); |
1571 } | 1572 }); |
1572 }); | 1573 } else { |
| 1574 asyncTestDone("testRename$targetExists"); |
| 1575 } |
| 1576 }); |
1573 } | 1577 } |
1574 | 1578 |
1575 static void testRenameSync({bool targetExists}) { | 1579 static void testRenameSync({bool targetExists}) { |
1576 String source = join(tempDirectory.path, 'rename_source'); | 1580 String source = join(tempDirectory.path, 'rename_source'); |
1577 String dest = join(tempDirectory.path, 'rename_dest'); | 1581 String dest = join(tempDirectory.path, 'rename_dest'); |
1578 var file = new File(source); | 1582 var file = new File(source); |
1579 var newfile = new File(dest); | 1583 var newfile = new File(dest); |
1580 file.createSync(); | 1584 file.createSync(); |
1581 if (targetExists) { | 1585 if (targetExists) { |
1582 newfile.createSync(); | 1586 newfile.createSync(); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1671 testSetLastAccessedSyncDirectory(); | 1675 testSetLastAccessedSyncDirectory(); |
1672 testDoubleAsyncOperation(); | 1676 testDoubleAsyncOperation(); |
1673 asyncEnd(); | 1677 asyncEnd(); |
1674 }); | 1678 }); |
1675 } | 1679 } |
1676 } | 1680 } |
1677 | 1681 |
1678 main() { | 1682 main() { |
1679 FileTest.testMain(); | 1683 FileTest.testMain(); |
1680 } | 1684 } |
OLD | NEW |