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; | ||
|  | } |