Skip to content

Commit ba20627

Browse files
Trottaddaleax
authored andcommitted
test: refactor test-fs-read-stream
* alphabetize modules * replace callback invocation counts with common.mustCall() * add block-scoping * remove commented-out code that uses an identifier not in the test * move exit handlers to relevant blocks to keep tests cohesive * common.noop -> common.mustNotCall() * check results from `data` event PR-URL: #13643 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
1 parent a27a35b commit ba20627

1 file changed

Lines changed: 163 additions & 147 deletions

File tree

‎test/parallel/test-fs-read-stream.js‎

Lines changed: 163 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -21,183 +21,199 @@
2121

2222
'use strict';
2323
constcommon=require('../common');
24-
constassert=require('assert');
2524

26-
constpath=require('path');
25+
constassert=require('assert');
2726
constfs=require('fs');
27+
constpath=require('path');
28+
2829
constfn=path.join(common.fixturesDir,'elipses.txt');
2930
constrangeFile=path.join(common.fixturesDir,'x.txt');
3031

31-
constcallbacks={open: 0,end: 0,close: 0};
32+
{
33+
letpaused=false;
34+
letbytesRead=0;
3235

33-
letpaused=false;
34-
letbytesRead=0;
36+
constfile=fs.ReadStream(fn);
37+
constfileSize=fs.statSync(fn).size;
3538

36-
constfile=fs.ReadStream(fn);
37-
constfileSize=fs.statSync(fn).size;
39+
assert.strictEqual(file.bytesRead,0);
3840

39-
assert.strictEqual(file.bytesRead,0);
41+
file.on('open',common.mustCall(function(fd){
42+
file.length=0;
43+
assert.strictEqual('number',typeoffd);
44+
assert.strictEqual(file.bytesRead,0);
45+
assert.ok(file.readable);
4046

41-
file.on('open',function(fd){
42-
file.length=0;
43-
callbacks.open++;
44-
assert.strictEqual('number',typeoffd);
45-
assert.strictEqual(file.bytesRead,0);
46-
assert.ok(file.readable);
47+
// GH-535
48+
file.pause();
49+
file.resume();
50+
file.pause();
51+
file.resume();
52+
}));
4753

48-
// GH-535
49-
file.pause();
50-
file.resume();
51-
file.pause();
52-
file.resume();
53-
});
54+
file.on('data',function(data){
55+
assert.ok(datainstanceofBuffer);
56+
assert.ok(!paused);
57+
file.length+=data.length;
5458

55-
file.on('data',function(data){
56-
assert.ok(datainstanceofBuffer);
57-
assert.ok(!paused);
58-
file.length+=data.length;
59+
bytesRead+=data.length;
60+
assert.strictEqual(file.bytesRead,bytesRead);
5961

60-
bytesRead+=data.length;
61-
assert.strictEqual(file.bytesRead,bytesRead);
62+
paused=true;
63+
file.pause();
6264

63-
paused=true;
64-
file.pause();
65+
setTimeout(function(){
66+
paused=false;
67+
file.resume();
68+
},10);
69+
});
6570

66-
setTimeout(function(){
67-
paused=false;
68-
file.resume();
69-
},10);
70-
});
7171

72+
file.on('end',common.mustCall(function(chunk){
73+
assert.strictEqual(bytesRead,fileSize);
74+
assert.strictEqual(file.bytesRead,fileSize);
75+
}));
7276

73-
file.on('end',function(chunk){
74-
assert.strictEqual(bytesRead,fileSize);
75-
assert.strictEqual(file.bytesRead,fileSize);
76-
callbacks.end++;
77-
});
7877

78+
file.on('close',common.mustCall(function(){
79+
assert.strictEqual(bytesRead,fileSize);
80+
assert.strictEqual(file.bytesRead,fileSize);
81+
}));
7982

80-
file.on('close',function(){
81-
assert.strictEqual(bytesRead,fileSize);
82-
assert.strictEqual(file.bytesRead,fileSize);
83-
callbacks.close++;
83+
process.on('exit',function(){
84+
assert.strictEqual(file.length,30000);
85+
});
86+
}
8487

85-
//assert.strictEqual(fs.readFileSync(fn), fileContent);
86-
});
88+
{
89+
constfile=fs.createReadStream(fn,{encoding: 'utf8'});
90+
file.length=0;
91+
file.on('data',function(data){
92+
assert.strictEqual('string',typeofdata);
93+
file.length+=data.length;
94+
95+
for(leti=0;i<data.length;i++){
96+
// http://www.fileformat.info/info/unicode/char/2026/index.htm
97+
assert.strictEqual('\u2026',data[i]);
98+
}
99+
});
87100

88-
constfile3=fs.createReadStream(fn,{encoding: 'utf8'});
89-
file3.length=0;
90-
file3.on('data',function(data){
91-
assert.strictEqual('string',typeofdata);
92-
file3.length+=data.length;
101+
file.on('close',common.mustCall());
93102

94-
for(leti=0;i<data.length;i++){
95-
// http://www.fileformat.info/info/unicode/char/2026/index.htm
96-
assert.strictEqual('\u2026',data[i]);
97-
}
98-
});
99-
100-
file3.on('close',function(){
101-
callbacks.close++;
102-
});
103-
104-
process.on('exit',function(){
105-
assert.strictEqual(1,callbacks.open);
106-
assert.strictEqual(1,callbacks.end);
107-
assert.strictEqual(2,callbacks.close);
108-
assert.strictEqual(30000,file.length);
109-
assert.strictEqual(10000,file3.length);
110-
console.error('ok');
111-
});
112-
113-
constfile4=fs.createReadStream(rangeFile,{bufferSize: 1,start: 1,end: 2});
114-
letcontentRead='';
115-
file4.on('data',function(data){
116-
contentRead+=data.toString('utf-8');
117-
});
118-
file4.on('end',function(data){
119-
assert.strictEqual(contentRead,'yz');
120-
});
121-
122-
constfile5=fs.createReadStream(rangeFile,{bufferSize: 1,start: 1});
123-
file5.data='';
124-
file5.on('data',function(data){
125-
file5.data+=data.toString('utf-8');
126-
});
127-
file5.on('end',function(){
128-
assert.strictEqual(file5.data,'yz\n');
129-
});
130-
131-
// https://github.com/joyent/node/issues/2320
132-
constfile6=fs.createReadStream(rangeFile,{bufferSize: 1.23,start: 1});
133-
file6.data='';
134-
file6.on('data',function(data){
135-
file6.data+=data.toString('utf-8');
136-
});
137-
file6.on('end',function(){
138-
assert.strictEqual(file6.data,'yz\n');
139-
});
103+
process.on('exit',function(){
104+
assert.strictEqual(file.length,10000);
105+
});
106+
}
107+
108+
{
109+
constfile=
110+
fs.createReadStream(rangeFile,{bufferSize: 1,start: 1,end: 2});
111+
letcontentRead='';
112+
file.on('data',function(data){
113+
contentRead+=data.toString('utf-8');
114+
});
115+
file.on('end',common.mustCall(function(data){
116+
assert.strictEqual(contentRead,'yz');
117+
}));
118+
}
119+
120+
{
121+
constfile=fs.createReadStream(rangeFile,{bufferSize: 1,start: 1});
122+
file.data='';
123+
file.on('data',function(data){
124+
file.data+=data.toString('utf-8');
125+
});
126+
file.on('end',common.mustCall(function(){
127+
assert.strictEqual(file.data,'yz\n');
128+
}));
129+
}
130+
131+
{
132+
// Ref: https://github.com/nodejs/node-v0.x-archive/issues/2320
133+
constfile=fs.createReadStream(rangeFile,{bufferSize: 1.23,start: 1});
134+
file.data='';
135+
file.on('data',function(data){
136+
file.data+=data.toString('utf-8');
137+
});
138+
file.on('end',common.mustCall(function(){
139+
assert.strictEqual(file.data,'yz\n');
140+
}));
141+
}
140142

141143
assert.throws(function(){
142144
fs.createReadStream(rangeFile,{start: 10,end: 2});
143145
},/"start"optionmustbe<="end"option/);
144146

145-
conststream=fs.createReadStream(rangeFile,{start: 0,end: 0});
146-
stream.data='';
147-
148-
stream.on('data',function(chunk){
149-
stream.data+=chunk;
150-
});
151-
152-
stream.on('end',function(){
153-
assert.strictEqual('x',stream.data);
154-
});
155-
156-
// pause and then resume immediately.
157-
constpauseRes=fs.createReadStream(rangeFile);
158-
pauseRes.pause();
159-
pauseRes.resume();
160-
161-
letfile7=fs.createReadStream(rangeFile,{autoClose: false});
162-
file7.on('data',common.noop);
163-
file7.on('end',function(){
164-
process.nextTick(function(){
165-
assert(!file7.closed);
166-
assert(!file7.destroyed);
167-
file7Next();
168-
});
169-
});
170-
171-
functionfile7Next(){
172-
// This will tell us if the fd is usable again or not.
173-
file7=fs.createReadStream(null,{fd: file7.fd,start: 0});
174-
file7.data='';
175-
file7.on('data',function(data){
176-
file7.data+=data;
177-
});
178-
file7.on('end',function(err){
179-
assert.strictEqual(file7.data,'xyz\n');
147+
{
148+
conststream=fs.createReadStream(rangeFile,{start: 0,end: 0});
149+
stream.data='';
150+
151+
stream.on('data',function(chunk){
152+
stream.data+=chunk;
180153
});
154+
155+
stream.on('end',common.mustCall(function(){
156+
assert.strictEqual('x',stream.data);
157+
}));
181158
}
182159

183-
// Just to make sure autoClose won't close the stream because of error.
184-
constfile8=fs.createReadStream(null,{fd: 13337,autoClose: false});
185-
file8.on('data',common.noop);
186-
file8.on('error',common.mustCall());
160+
{
161+
// pause and then resume immediately.
162+
constpauseRes=fs.createReadStream(rangeFile);
163+
pauseRes.pause();
164+
pauseRes.resume();
165+
}
187166

188-
// Make sure stream is destroyed when file does not exist.
189-
constfile9=fs.createReadStream('/path/to/file/that/does/not/exist');
190-
file9.on('data',common.noop);
191-
file9.on('error',common.mustCall());
167+
{
168+
letfile=fs.createReadStream(rangeFile,{autoClose: false});
169+
letdata='';
170+
file.on('data',function(chunk){data+=chunk;});
171+
file.on('end',common.mustCall(function(){
172+
assert.strictEqual(data,'xyz\n');
173+
process.nextTick(function(){
174+
assert(!file.closed);
175+
assert(!file.destroyed);
176+
fileNext();
177+
});
178+
}));
179+
180+
functionfileNext(){
181+
// This will tell us if the fd is usable again or not.
182+
file=fs.createReadStream(null,{fd: file.fd,start: 0});
183+
file.data='';
184+
file.on('data',function(data){
185+
file.data+=data;
186+
});
187+
file.on('end',common.mustCall(function(err){
188+
assert.strictEqual(file.data,'xyz\n');
189+
}));
190+
process.on('exit',function(){
191+
assert(file.closed);
192+
assert(file.destroyed);
193+
});
194+
}
195+
}
192196

193-
process.on('exit',function(){
194-
assert(file7.closed);
195-
assert(file7.destroyed);
197+
{
198+
// Just to make sure autoClose won't close the stream because of error.
199+
constfile=fs.createReadStream(null,{fd: 13337,autoClose: false});
200+
file.on('data',common.mustNotCall());
201+
file.on('error',common.mustCall());
202+
process.on('exit',function(){
203+
assert(!file.closed);
204+
assert(!file.destroyed);
205+
assert(file.fd);
206+
});
207+
}
196208

197-
assert(!file8.closed);
198-
assert(!file8.destroyed);
199-
assert(file8.fd);
209+
{
210+
// Make sure stream is destroyed when file does not exist.
211+
constfile=fs.createReadStream('/path/to/file/that/does/not/exist');
212+
file.on('data',common.mustNotCall());
213+
file.on('error',common.mustCall());
200214

201-
assert(!file9.closed);
202-
assert(file9.destroyed);
203-
});
215+
process.on('exit',function(){
216+
assert(!file.closed);
217+
assert(file.destroyed);
218+
});
219+
}

0 commit comments

Comments
 (0)