337 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			337 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!doctype html>
 | 
						|
<html lang="en">
 | 
						|
<head>
 | 
						|
    <title>Code coverage report for lib/writable_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/writable_streambuffer.js</span></h1>
 | 
						|
    <h2>
 | 
						|
        Statements: <span class="metric">96.77% <small>(60 / 62)</small></span>     
 | 
						|
        Branches: <span class="metric">90.63% <small>(29 / 32)</small></span>     
 | 
						|
        Functions: <span class="metric">100% <small>(9 / 9)</small></span>     
 | 
						|
        Lines: <span class="metric">98.25% <small>(56 / 57)</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> » writable_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</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-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">1</span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">10</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">10</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">10</span>
 | 
						|
<span class="cline-any cline-yes">2</span>
 | 
						|
<span class="cline-any cline-neutral"> </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-yes">1</span>
 | 
						|
<span class="cline-any cline-no"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">1</span>
 | 
						|
<span class="cline-any cline-neutral"> </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-yes">10</span>
 | 
						|
<span class="cline-any cline-yes">8</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-yes">1</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-yes">7</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-yes">10</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">10</span>
 | 
						|
<span class="cline-any cline-yes">11</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">10</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-yes">8</span>
 | 
						|
<span class="cline-any cline-yes">8</span>
 | 
						|
<span class="cline-any cline-yes">8</span>
 | 
						|
<span class="cline-any cline-yes">8</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-neutral"> </span>
 | 
						|
<span class="cline-any cline-yes">10</span>
 | 
						|
<span class="cline-any cline-yes">1</span>
 | 
						|
<span class="cline-any cline-yes">1</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-yes">10</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">1</span>
 | 
						|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var util = require("util"),
 | 
						|
	stream = require("stream"),
 | 
						|
	constants = require("./constants");
 | 
						|
 
 | 
						|
// TODO: clear up specs on returning false from a write and emitting a drain event.
 | 
						|
// Does this mean if I return false from a write, I should ignore any write requests between that false return and the drain event?
 | 
						|
var WritableStreamBuffer = module.exports = function(opts) {
 | 
						|
	var that = this;
 | 
						|
 
 | 
						|
	stream.Stream.call(this);
 | 
						|
 
 | 
						|
	opts = opts || {};
 | 
						|
	var initialSize = opts.initialSize || constants.DEFAULT_INITIAL_SIZE;
 | 
						|
	var incrementAmount = opts.incrementAmount || constants.DEFAULT_INCREMENT_AMOUNT;
 | 
						|
 
 | 
						|
	var buffer = new Buffer(initialSize);
 | 
						|
	var size = 0;
 | 
						|
 
 | 
						|
	this.writable = true;
 | 
						|
	this.readable = false;
 | 
						|
 
 | 
						|
	this.size = function() {
 | 
						|
		return size;
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.maxSize = function() {
 | 
						|
		return buffer.length;
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.getContents = function(length) {
 | 
						|
		if(!size) return false;
 | 
						|
 
 | 
						|
		var data = new Buffer(Math.min(length || size, size));
 | 
						|
		buffer.copy(data, 0, 0, data.length);
 | 
						|
 
 | 
						|
		<span class="missing-if-branch" title="if path not taken" >I</span>if(data.length < size)
 | 
						|
<span class="cstat-no" title="statement not covered" >			buffer.copy(buffer, 0, data.length);</span>
 | 
						|
 
 | 
						|
		size -= data.length;
 | 
						|
 
 | 
						|
		return data;
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.getContentsAsString = function(encoding, length) {
 | 
						|
		if(!size) return false;
 | 
						|
 
 | 
						|
		var data = buffer.toString(encoding || "utf8", 0, Math.min(length || size, size));
 | 
						|
		var dataLength = Buffer.byteLength(data);
 | 
						|
 
 | 
						|
		if(dataLength < size)
 | 
						|
			buffer.copy(buffer, 0, dataLength);
 | 
						|
 
 | 
						|
		size -= dataLength;
 | 
						|
		return data;
 | 
						|
	};
 | 
						|
 
 | 
						|
	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.write = function(data, encoding, callback) {
 | 
						|
		if(!that.writable) return;
 | 
						|
 
 | 
						|
		if(Buffer.isBuffer(data)) {
 | 
						|
			increaseBufferIfNecessary(data.length);
 | 
						|
			data.copy(buffer, size, 0);
 | 
						|
			size += data.length;
 | 
						|
		}
 | 
						|
		else {
 | 
						|
			data = data + "";
 | 
						|
			increaseBufferIfNecessary(Buffer.byteLength(data));
 | 
						|
			buffer.write(data, size, encoding || "utf8");
 | 
						|
			size += Buffer.byteLength(data);
 | 
						|
		}
 | 
						|
		
 | 
						|
		<span class="missing-if-branch" title="if path not taken" >I</span>if(typeof callback === "function") { <span class="cstat-no" title="statement not covered" >callback() ;}</span>
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.end = function() {
 | 
						|
		var args = Array.prototype.slice.apply(arguments);
 | 
						|
		<span class="missing-if-branch" title="else path not taken" >E</span>if(args.length) that.write.apply(that, args);
 | 
						|
		that.emit('finish');
 | 
						|
		that.destroy();
 | 
						|
	};
 | 
						|
 
 | 
						|
	this.destroySoon = this.destroy = function() {
 | 
						|
		that.writable = false;
 | 
						|
		that.emit("close");
 | 
						|
	};
 | 
						|
};
 | 
						|
util.inherits(WritableStreamBuffer, 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>
 |