81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								import {LineStream} from '../src';
							 | 
						||
| 
								 | 
							
								import QUnit from 'qunit';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								QUnit.module('LineStream', {
							 | 
						||
| 
								 | 
							
								  beforeEach() {
							 | 
						||
| 
								 | 
							
								    this.lineStream = new LineStream();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								QUnit.test('empty inputs produce no tokens', function(assert) {
							 | 
						||
| 
								 | 
							
								  let data = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  this.lineStream.on('data', function() {
							 | 
						||
| 
								 | 
							
								    data = true;
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  this.lineStream.push('');
							 | 
						||
| 
								 | 
							
								  assert.ok(!data, 'no tokens were produced');
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								QUnit.test('splits on newlines', function(assert) {
							 | 
						||
| 
								 | 
							
								  const lines = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  this.lineStream.on('data', function(line) {
							 | 
						||
| 
								 | 
							
								    lines.push(line);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  this.lineStream.push('#EXTM3U\nmovie.ts\n');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  assert.strictEqual(2, lines.length, 'two lines are ready');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual('#EXTM3U', lines.shift(), 'the first line is the first token');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual('movie.ts', lines.shift(), 'the second line is the second token');
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								QUnit.test('empty lines become empty strings', function(assert) {
							 | 
						||
| 
								 | 
							
								  const lines = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  this.lineStream.on('data', function(line) {
							 | 
						||
| 
								 | 
							
								    lines.push(line);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  this.lineStream.push('\n\n');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  assert.strictEqual(2, lines.length, 'two lines are ready');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual('', lines.shift(), 'the first line is empty');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual('', lines.shift(), 'the second line is empty');
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								QUnit.test('handles lines broken across appends', function(assert) {
							 | 
						||
| 
								 | 
							
								  const lines = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  this.lineStream.on('data', function(line) {
							 | 
						||
| 
								 | 
							
								    lines.push(line);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  this.lineStream.push('#EXTM');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual(0, lines.length, 'no lines are ready');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  this.lineStream.push('3U\nmovie.ts\n');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual(2, lines.length, 'two lines are ready');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual('#EXTM3U', lines.shift(), 'the first line is the first token');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual('movie.ts', lines.shift(), 'the second line is the second token');
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								QUnit.test('stops sending events after deregistering', function(assert) {
							 | 
						||
| 
								 | 
							
								  const temporaryLines = [];
							 | 
						||
| 
								 | 
							
								  const temporary = function(line) {
							 | 
						||
| 
								 | 
							
								    temporaryLines.push(line);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								  const permanentLines = [];
							 | 
						||
| 
								 | 
							
								  const permanent = function(line) {
							 | 
						||
| 
								 | 
							
								    permanentLines.push(line);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  this.lineStream.on('data', temporary);
							 | 
						||
| 
								 | 
							
								  this.lineStream.on('data', permanent);
							 | 
						||
| 
								 | 
							
								  this.lineStream.push('line one\n');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual(
							 | 
						||
| 
								 | 
							
								    temporaryLines.length,
							 | 
						||
| 
								 | 
							
								    permanentLines.length,
							 | 
						||
| 
								 | 
							
								    'both callbacks receive the event'
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  assert.ok(this.lineStream.off('data', temporary), 'a listener was removed');
							 | 
						||
| 
								 | 
							
								  this.lineStream.push('line two\n');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual(1, temporaryLines.length, 'no new events are received');
							 | 
						||
| 
								 | 
							
								  assert.strictEqual(2, permanentLines.length, 'new events are still received');
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 |