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