11 |
11 |
12 |
12 |
13 !FileStreamTest methodsFor:'cleanup'! |
13 !FileStreamTest methodsFor:'cleanup'! |
14 |
14 |
15 tearDown |
15 tearDown |
16 self testFilename remove |
16 self testFilename remove |
17 ! ! |
17 ! ! |
18 |
18 |
19 !FileStreamTest methodsFor:'helpers'! |
19 !FileStreamTest methodsFor:'helpers'! |
20 |
20 |
21 createBigDirectoryWithManyFiles |
21 createBigDirectoryWithManyFiles |
22 "create a directory with 20000 files" |
22 "create a directory with 20000 files" |
23 |
23 |
24 'c:\tmp' asFilename exists ifFalse:[ |
24 'c:\tmp' asFilename exists ifFalse:[ |
25 'c:\tmp' asFilename makeDirectory |
25 'c:\tmp' asFilename makeDirectory |
26 ]. |
26 ]. |
27 'c:\tmp\BigDirectory' asFilename exists ifFalse:[ |
27 'c:\tmp\BigDirectory' asFilename exists ifFalse:[ |
28 'c:\tmp\BigDirectory' asFilename makeDirectory |
28 'c:\tmp\BigDirectory' asFilename makeDirectory |
29 ]. |
29 ]. |
30 |
30 |
31 1 to:20000 do:[:i| |
31 1 to:20000 do:[:i| |
32 |f s buffer| |
32 |f s buffer| |
33 f :='c:\tmp\BigDirectory' asFilename |
33 f :='c:\tmp\BigDirectory' asFilename |
34 construct:(i printString leftPaddedTo:5 with:$0). |
34 construct:(i printString leftPaddedTo:5 with:$0). |
35 s := f writeStream binary. |
35 s := f writeStream binary. |
36 buffer := ByteArray new:1024. |
36 buffer := ByteArray new:1024. |
37 32 timesRepeat:[ s nextPutAll:buffer ]. |
37 32 timesRepeat:[ s nextPutAll:buffer ]. |
38 s close. |
38 s close. |
39 ]. |
39 ]. |
40 |
40 |
41 " |
41 " |
246 self createTestFile. |
246 self createTestFile. |
247 |
247 |
248 sz := self testFilename fileSize. |
248 sz := self testFilename fileSize. |
249 |
249 |
250 p := [ |
250 p := [ |
251 [ |
251 [ |
252 nLoop timesRepeat:[ |
252 nLoop timesRepeat:[ |
253 self readFileExpecting:sz. |
253 self readFileExpecting:sz. |
254 ]. |
254 ]. |
255 ] on:Error do:[:ex| |
255 ] on:Error do:[:ex| |
256 errorOccured := ex. |
256 errorOccured := ex. |
257 ]. |
257 ]. |
258 ] forkAt:7. |
258 ] forkAt:7. |
259 |
259 |
260 count := 0. |
260 count := 0. |
261 [p isDead] whileFalse:[ |
261 [p isDead] whileFalse:[ |
262 Delay waitForMilliseconds:5. |
262 Delay waitForMilliseconds:5. |
263 p interruptWith:[count := count + 1]. |
263 p interruptWith:[count := count + 1]. |
264 ]. |
264 ]. |
265 self assert:errorOccured isNil. |
265 self assert:errorOccured isNil. |
266 self assert:count > 50. "/ at least 50 times interrupted... |
266 self assert:count > 50. "/ at least 50 times interrupted... |
267 "/ Transcript printf:'read file %d times; interrupted %d times\n' with:nLoop with:count. |
267 "/ Transcript printf:'read file %d times; interrupted %d times\n' with:nLoop with:count. |
268 |
268 |
404 ! |
404 ! |
405 |
405 |
406 testWriteEOLModes |
406 testWriteEOLModes |
407 |
407 |
408 'xxx' asFilename writingFileDo:[:s | |
408 'xxx' asFilename writingFileDo:[:s | |
409 s eolMode:#crlf. |
409 s eolMode:#crlf. |
410 s nextPutLine:'hello' |
410 s nextPutLine:'hello' |
411 ]. |
411 ]. |
412 self assert:('xxx' asFilename fileSize == 7). |
412 self assert:('xxx' asFilename fileSize == 7). |
413 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0D 16r0A]). |
413 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0D 16r0A]). |
414 |
414 |
415 'xxx' asFilename writingFileDo:[:s | |
415 'xxx' asFilename writingFileDo:[:s | |
416 s eolMode:#nl. |
416 s eolMode:#nl. |
417 s nextPutLine:'hello' |
417 s nextPutLine:'hello' |
418 ]. |
418 ]. |
419 self assert:('xxx' asFilename fileSize == 6). |
419 self assert:('xxx' asFilename fileSize == 6). |
420 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0A]). |
420 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0A]). |
421 |
421 |
422 'xxx' asFilename writingFileDo:[:s | |
422 'xxx' asFilename writingFileDo:[:s | |
423 s eolMode:#cr. |
423 s eolMode:#cr. |
424 s nextPutLine:'hello' |
424 s nextPutLine:'hello' |
425 ]. |
425 ]. |
426 self assert:('xxx' asFilename fileSize == 6). |
426 self assert:('xxx' asFilename fileSize == 6). |
427 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0D]). |
427 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0D]). |
428 |
428 |
429 "/ ------------------------ |
429 "/ ------------------------ |
430 |
430 |
431 'xxx' asFilename writingFileDo:[:s | |
431 'xxx' asFilename writingFileDo:[:s | |
432 s eolMode:#crlf. |
432 s eolMode:#crlf. |
433 s nextPutAll:'hello' , Character cr |
433 s nextPutAll:'hello' , Character cr |
434 ]. |
434 ]. |
435 self assert:('xxx' asFilename fileSize == 7). |
435 self assert:('xxx' asFilename fileSize == 7). |
436 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0D 16r0A]). |
436 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0D 16r0A]). |
437 |
437 |
438 'xxx' asFilename writingFileDo:[:s | |
438 'xxx' asFilename writingFileDo:[:s | |
439 s eolMode:#nl. |
439 s eolMode:#nl. |
440 s nextPutAll:'hello' , Character cr |
440 s nextPutAll:'hello' , Character cr |
441 ]. |
441 ]. |
442 self assert:('xxx' asFilename fileSize == 6). |
442 self assert:('xxx' asFilename fileSize == 6). |
443 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0A]). |
443 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0A]). |
444 |
444 |
445 'xxx' asFilename writingFileDo:[:s | |
445 'xxx' asFilename writingFileDo:[:s | |
446 s eolMode:#cr. |
446 s eolMode:#cr. |
447 s nextPutAll:'hello' , Character cr |
447 s nextPutAll:'hello' , Character cr |
448 ]. |
448 ]. |
449 self assert:('xxx' asFilename fileSize == 6). |
449 self assert:('xxx' asFilename fileSize == 6). |
450 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0D]). |
450 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0D]). |
451 |
451 |
452 "/ in binary mode, this should be ignored |
452 "/ in binary mode, this should be ignored |
453 'xxx' asFilename writingFileDo:[:s | |
453 'xxx' asFilename writingFileDo:[:s | |
454 s binary. |
454 s binary. |
455 s eolMode:#crlf. |
455 s eolMode:#crlf. |
456 s nextPutAll:'hello' , Character cr |
456 s nextPutAll:'hello' , Character cr |
457 ]. |
457 ]. |
458 self assert:('xxx' asFilename fileSize == 6). |
458 self assert:('xxx' asFilename fileSize == 6). |
459 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0A]). |
459 self assert:('xxx' asFilename binaryContentsOfEntireFile = #[16r68 16r65 16r6C 16r6C 16r6F 16r0A]). |
460 |
460 |
461 |
461 |