454 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			454 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!doctype html>
 | 
						|
<html lang="en">
 | 
						|
<head>
 | 
						|
    <title>Code coverage report for lib/readable_streambuffer.js</title>
 | 
						|
    <meta charset="utf-8">
 | 
						|
    <link rel="stylesheet" href="../prettify.css">
 | 
						|
    <link rel="stylesheet" href="../base.css">
 | 
						|
    <style type='text/css'>
 | 
						|
        div.coverage-summary .sorter {
 | 
						|
            background-image: url(../sort-arrow-sprite.png);
 | 
						|
        }
 | 
						|
    </style>
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
<div class="header high">
 | 
						|
    <h1>Code coverage report for <span class="entity">lib/readable_streambuffer.js</span></h1>
 | 
						|
    <h2>
 | 
						|
        Statements: <span class="metric">98.82% <small>(84 / 85)</small></span>     
 | 
						|
        Branches: <span class="metric">94.34% <small>(50 / 53)</small></span>     
 | 
						|
        Functions: <span class="metric">100% <small>(11 / 11)</small></span>     
 | 
						|
        Lines: <span class="metric">100% <small>(83 / 83)</small></span>     
 | 
						|
        Ignored: <span class="metric"><span class="ignore-none">none</span></span>     
 | 
						|
    </h2>
 | 
						|
    <div class="path"><a href="../index.html">All files</a> » <a href="index.html">lib/</a> » readable_streambuffer.js</div>
 | 
						|
</div>
 | 
						|
<div class="body">
 | 
						|
<pre><table class="coverage">
 | 
						|
<tr><td class="line-count">1
 | 
						|
2
 | 
						|
3
 | 
						|
4
 | 
						|
5
 | 
						|
6
 | 
						|
7
 | 
						|
8
 | 
						|
9
 | 
						|
10
 | 
						|
11
 | 
						|
12
 | 
						|
13
 | 
						|
14
 | 
						|
15
 | 
						|
16
 | 
						|
17
 | 
						|
18
 | 
						|
19
 | 
						|
20
 | 
						|
21
 | 
						|
22
 | 
						|
23
 | 
						|
24
 | 
						|
25
 | 
						|
26
 | 
						|
27
 | 
						|
28
 | 
						|
29
 | 
						|
30
 | 
						|
31
 | 
						|
32
 | 
						|
33
 | 
						|
34
 | 
						|
35
 | 
						|
36
 | 
						|
37
 | 
						|
38
 | 
						|
39
 | 
						|
40
 | 
						|
41
 | 
						|
42
 | 
						|
43
 | 
						|
44
 | 
						|
45
 | 
						|
46
 | 
						|
47
 | 
						|
48
 | 
						|
49
 | 
						|
50
 | 
						|
51
 | 
						|
52
 | 
						|
53
 | 
						|
54
 | 
						|
55
 | 
						|
56
 | 
						|
57
 | 
						|
58
 | 
						|
59
 | 
						|
60
 | 
						|
61
 | 
						|
62
 | 
						|
63
 | 
						|
64
 | 
						|
65
 | 
						|
66
 | 
						|
67
 | 
						|
68
 | 
						|
69
 | 
						|
70
 | 
						|
71
 | 
						|
72
 | 
						|
73
 | 
						|
74
 | 
						|
75
 | 
						|
76
 | 
						|
77
 | 
						|
78
 | 
						|
79
 | 
						|
80
 | 
						|
81
 | 
						|
82
 | 
						|
83
 | 
						|
84
 | 
						|
85
 | 
						|
86
 | 
						|
87
 | 
						|
88
 | 
						|
89
 | 
						|
90
 | 
						|
91
 | 
						|
92
 | 
						|
93
 | 
						|
94
 | 
						|
95
 | 
						|
96
 | 
						|
97
 | 
						|
98
 | 
						|
99
 | 
						|
100
 | 
						|
101
 | 
						|
102
 | 
						|
103
 | 
						|
104
 | 
						|
105
 | 
						|
106
 | 
						|
107
 | 
						|
108
 | 
						|
109
 | 
						|
110
 | 
						|
111
 | 
						|
112
 | 
						|
113
 | 
						|
114
 | 
						|
115
 | 
						|
116
 | 
						|
117
 | 
						|
118
 | 
						|
119
 | 
						|
120
 | 
						|
121
 | 
						|
122
 | 
						|
123
 | 
						|
124
 | 
						|
125
 | 
						|
126
 | 
						|
127
 | 
						|
128
 | 
						|
129
 | 
						|
130
 | 
						|
131
 | 
						|
132
 | 
						|
133
 | 
						|
134
 | 
						|
135
 | 
						|
136
 | 
						|
137</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">1</span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">268</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">268</span>
 | 
						|
<span class="cline-any cline-yes">44</span>
 | 
						|
<span class="cline-any cline-yes">44</span>
 | 
						|
<span class="cline-any cline-yes">9</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">35</span>
 | 
						|
<span class="cline-any cline-yes">35</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">44</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">44</span>
 | 
						|
<span class="cline-any cline-yes">44</span>
 | 
						|
<span class="cline-any cline-yes">44</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">268</span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-yes">6</span>
 | 
						|
<span class="cline-any cline-yes">6</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">3</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">5</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">13</span>
 | 
						|
<span class="cline-any cline-yes">2</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">2</span>
 | 
						|
<span class="cline-any cline-yes">2</span>
 | 
						|
<span class="cline-any cline-yes">2</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">13</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">13</span>
 | 
						|
<span class="cline-any cline-yes">13</span>
 | 
						|
<span class="cline-any cline-yes">4</span>
 | 
						|
<span class="cline-any cline-yes">4</span>
 | 
						|
<span class="cline-any cline-yes">4</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">9</span>
 | 
						|
<span class="cline-any cline-yes">9</span>
 | 
						|
<span class="cline-any cline-yes">9</span>
 | 
						|
<span class="cline-any cline-yes">9</span>
 | 
						|
<span class="cline-any cline-yes">9</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">13</span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">13</span>
 | 
						|
<span class="cline-any cline-yes">2</span>
 | 
						|
<span class="cline-any cline-yes">3</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">4</span>
 | 
						|
<span class="cline-any cline-yes">4</span>
 | 
						|
<span class="cline-any cline-yes">4</span>
 | 
						|
<span class="cline-any cline-yes">4</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">15</span>
 | 
						|
<span class="cline-any cline-yes">15</span>
 | 
						|
<span class="cline-any cline-yes">14</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">6</span>
 | 
						|
<span class="cline-any cline-yes">6</span>
 | 
						|
<span class="cline-any cline-yes">6</span>
 | 
						|
<span class="cline-any cline-yes">6</span>
 | 
						|
<span class="cline-any cline-yes">6</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-yes">1</span>
 | 
						|
<span class="cline-any cline-yes">1</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-yes">5</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">12</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">1</span>
 | 
						|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var stream = require("stream"),
 | 
						|
	constants = require("./constants"),
 | 
						|
	util = require("util");
 | 
						|
 
 | 
						|
var ReadableStreamBuffer = module.exports = function(opts) {
 | 
						|
	var that = this;
 | 
						|
 
 | 
						|
	stream.Stream.call(this);
 | 
						|
 
 | 
						|
	opts = opts || {};
 | 
						|
	var frequency = opts.hasOwnProperty("frequency") ? opts.frequency : constants.DEFAULT_FREQUENCY;
 | 
						|
	var chunkSize = opts.chunkSize || constants.DEFAULT_CHUNK_SIZE;
 | 
						|
	var initialSize = opts.initialSize || constants.DEFAULT_INITIAL_SIZE;
 | 
						|
	var incrementAmount = opts.incrementAmount || constants.DEFAULT_INCREMENT_AMOUNT;
 | 
						|
 
 | 
						|
	var size = 0;
 | 
						|
	var buffer = new Buffer(initialSize);
 | 
						|
	var encoding = null;
 | 
						|
 
 | 
						|
	this.readable = true;
 | 
						|
	this.writable = false;
 | 
						|
 
 | 
						|
	var sendData = function() {
 | 
						|
		var amount = Math.min(chunkSize, size);
 | 
						|
 
 | 
						|
		if (amount > 0) {
 | 
						|
			var chunk = null;
 | 
						|
			if(encoding) {
 | 
						|
				chunk = buffer.toString(encoding, 0, amount);
 | 
						|
			}
 | 
						|
			else {
 | 
						|
				chunk = new Buffer(amount);
 | 
						|
				buffer.copy(chunk, 0, 0, amount);
 | 
						|
			}
 | 
						|
 
 | 
						|
			that.emit("data", chunk);
 | 
						|
 
 | 
						|
			<span class="missing-if-branch" title="else path not taken" >E</span>if(amount < buffer.length)
 | 
						|
				buffer.copy(buffer, 0, amount, size);
 | 
						|
			size -= amount;
 | 
						|
		}
 | 
						|
 
 | 
						|
		if(size === 0 && !that.readable) {
 | 
						|
			that.emit("end");
 | 
						|
			that.emit("close");
 | 
						|
			if (sendData && sendData.interval) {
 | 
						|
				clearInterval(sendData.interval);
 | 
						|
				sendData.interval = null;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.size = function() {
 | 
						|
		return size;
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.maxSize = function() {
 | 
						|
		return buffer.length;
 | 
						|
	};
 | 
						|
 
 | 
						|
	var increaseBufferIfNecessary = function(incomingDataSize) {
 | 
						|
		if((buffer.length - size) < incomingDataSize) {
 | 
						|
			var factor = Math.ceil((incomingDataSize - (buffer.length - size)) / incrementAmount);
 | 
						|
 
 | 
						|
			var newBuffer = new Buffer(buffer.length + (incrementAmount * factor));
 | 
						|
			buffer.copy(newBuffer, 0, 0, size);
 | 
						|
			buffer = newBuffer;
 | 
						|
		}
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.put = function(data, encoding) {
 | 
						|
		<span class="missing-if-branch" title="if path not taken" >I</span>if(!that.readable) <span class="cstat-no" title="statement not covered" >return;</span>
 | 
						|
 
 | 
						|
		var wasEmpty = size === 0;
 | 
						|
		if(Buffer.isBuffer(data)) {
 | 
						|
			increaseBufferIfNecessary(data.length);
 | 
						|
			data.copy(buffer, size, 0);
 | 
						|
			size += data.length;
 | 
						|
		}
 | 
						|
		else {
 | 
						|
			data = data + "";
 | 
						|
			var dataSizeInBytes = Buffer.byteLength(data);
 | 
						|
			increaseBufferIfNecessary(dataSizeInBytes);
 | 
						|
			buffer.write(data, size, encoding || "utf8");
 | 
						|
			size += dataSizeInBytes;
 | 
						|
		}
 | 
						|
 
 | 
						|
		if (wasEmpty && size > 0) {
 | 
						|
			this.emit('readable')
 | 
						|
		}
 | 
						|
 
 | 
						|
		if (!this.isPaused && !frequency) {
 | 
						|
			while (size > 0) {
 | 
						|
				sendData();
 | 
						|
			}
 | 
						|
		}
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.pause = function() {
 | 
						|
		this.isPaused = true;
 | 
						|
		<span class="missing-if-branch" title="else path not taken" >E</span>if(sendData && sendData.interval) {
 | 
						|
			clearInterval(sendData.interval);
 | 
						|
			delete sendData.interval;
 | 
						|
		}
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.resume = function() {
 | 
						|
		this.isPaused = false;
 | 
						|
		if(sendData && !sendData.interval && frequency > 0) {
 | 
						|
			sendData.interval = setInterval(sendData, frequency);
 | 
						|
		}
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.destroy = function() {
 | 
						|
		that.emit("end");
 | 
						|
		if(sendData.interval) clearInterval(sendData.interval);
 | 
						|
		sendData = null;
 | 
						|
		that.readable = false;
 | 
						|
		that.emit("close");
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.destroySoon = function() {
 | 
						|
		that.readable = false;
 | 
						|
		if (!sendData.interval) {
 | 
						|
			that.emit("end");
 | 
						|
			that.emit("close");
 | 
						|
		}
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.setEncoding = function(_encoding) {
 | 
						|
		encoding = _encoding;
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.resume();
 | 
						|
};
 | 
						|
util.inherits(ReadableStreamBuffer, stream.Stream);
 | 
						|
 </pre></td></tr>
 | 
						|
</table></pre>
 | 
						|
 | 
						|
</div>
 | 
						|
<div class="footer">
 | 
						|
    <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Wed Jul 01 2015 04:16:19 GMT+0000 (UTC)</div>
 | 
						|
</div>
 | 
						|
<script src="../prettify.js"></script>
 | 
						|
<script>
 | 
						|
window.onload = function () {
 | 
						|
        if (typeof prettyPrint === 'function') {
 | 
						|
            prettyPrint();
 | 
						|
        }
 | 
						|
};
 | 
						|
</script>
 | 
						|
<script src="../sorter.js"></script>
 | 
						|
</body>
 | 
						|
</html>
 |