You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					88 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					88 lines
				
				2.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								var Dicer = require('..');
							 | 
						||
| 
								 | 
							
								var assert = require('assert');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var CRLF     = '\r\n';
							 | 
						||
| 
								 | 
							
								var boundary = 'boundary';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var writeSep = '--' + boundary;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var writePart = [
							 | 
						||
| 
								 | 
							
								  writeSep,
							 | 
						||
| 
								 | 
							
								  'Content-Type:   text/plain',
							 | 
						||
| 
								 | 
							
								  'Content-Length: 0'
							 | 
						||
| 
								 | 
							
								  ].join(CRLF)
							 | 
						||
| 
								 | 
							
								  + CRLF + CRLF
							 | 
						||
| 
								 | 
							
								  + 'some data' + CRLF;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var writeEnd = '--' + CRLF;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var firedEnd    = false;
							 | 
						||
| 
								 | 
							
								var firedFinish = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var dicer = new Dicer({boundary: boundary});
							 | 
						||
| 
								 | 
							
								dicer.on('part', partListener);
							 | 
						||
| 
								 | 
							
								dicer.on('finish', finishListener);
							 | 
						||
| 
								 | 
							
								dicer.write(writePart+writeSep);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function partListener(partReadStream) {
							 | 
						||
| 
								 | 
							
								  partReadStream.on('data', function(){});
							 | 
						||
| 
								 | 
							
								  partReadStream.on('end', partEndListener);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function partEndListener() {
							 | 
						||
| 
								 | 
							
								  firedEnd = true;
							 | 
						||
| 
								 | 
							
								  setImmediate(afterEnd);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function afterEnd() {
							 | 
						||
| 
								 | 
							
								  dicer.end(writeEnd);
							 | 
						||
| 
								 | 
							
								  setImmediate(afterWrite);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function finishListener() {
							 | 
						||
| 
								 | 
							
								  assert(firedEnd, 'Failed to end before finishing');
							 | 
						||
| 
								 | 
							
								  firedFinish = true;
							 | 
						||
| 
								 | 
							
								  test2();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function afterWrite() {
							 | 
						||
| 
								 | 
							
								  assert(firedFinish, 'Failed to finish');
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var isPausePush = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var firedPauseCallback = false;
							 | 
						||
| 
								 | 
							
								var firedPauseFinish = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var dicer2 = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function test2() {
							 | 
						||
| 
								 | 
							
								  dicer2 = new Dicer({boundary: boundary});
							 | 
						||
| 
								 | 
							
								  dicer2.on('part', pausePartListener);
							 | 
						||
| 
								 | 
							
								  dicer2.on('finish', pauseFinish);
							 | 
						||
| 
								 | 
							
								  dicer2.write(writePart+writeSep, 'utf8', pausePartCallback);
							 | 
						||
| 
								 | 
							
								  setImmediate(pauseAfterWrite);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function pausePartListener(partReadStream) {
							 | 
						||
| 
								 | 
							
								  partReadStream.on('data', function(){});
							 | 
						||
| 
								 | 
							
								  partReadStream.on('end', function(){});
							 | 
						||
| 
								 | 
							
								  var realPush = partReadStream.push;
							 | 
						||
| 
								 | 
							
								  partReadStream.push = function fakePush() {
							 | 
						||
| 
								 | 
							
								    realPush.apply(partReadStream, arguments);
							 | 
						||
| 
								 | 
							
								    if (!isPausePush)
							 | 
						||
| 
								 | 
							
								      return true;
							 | 
						||
| 
								 | 
							
								    isPausePush = false;
							 | 
						||
| 
								 | 
							
								    return false;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function pauseAfterWrite() {
							 | 
						||
| 
								 | 
							
								  dicer2.end(writeEnd);
							 | 
						||
| 
								 | 
							
								  setImmediate(pauseAfterEnd);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function pauseAfterEnd() {
							 | 
						||
| 
								 | 
							
								  assert(firedPauseCallback, 'Failed to call callback after pause');
							 | 
						||
| 
								 | 
							
								  assert(firedPauseFinish, 'Failed to finish after pause');
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function pauseFinish() {
							 | 
						||
| 
								 | 
							
								  firedPauseFinish = true;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function pausePartCallback() {
							 | 
						||
| 
								 | 
							
								  firedPauseCallback = true;
							 | 
						||
| 
								 | 
							
								}
							 |