Skip to content

Commit

Permalink
added fields for supporting setHeader in latest iojs
Browse files Browse the repository at this point in the history
  • Loading branch information
panthershark committed Mar 6, 2015
1 parent 16fdb95 commit 25b226b
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 67 deletions.
17 changes: 11 additions & 6 deletions lib/request.js
Expand Up @@ -9,7 +9,7 @@ var _ = require('lodash');
/**
* Mock request object for sending to the router without needing a server.
**/
var MockRequest = function(options) {
var MockRequest = function (options) {
if (!(this instanceof MockRequest)) {
return new MockRequest(options);
}
Expand All @@ -22,9 +22,13 @@ var MockRequest = function(options) {
this.query = url.parse(this.url, true).query;
this.headers = this._headers = {};

// necessary for mocking a real request.
this._headerNames = {};
this._removedHeader = {};

// setHeader now applies toLowerCase the names to mirror native node behaviour
var self = this;
_.each(options.headers, function(v, k) {
_.each(options.headers, function (v, k) {
self.setHeader(k, v);
});

Expand All @@ -37,7 +41,7 @@ var MockRequest = function(options) {
if (options.cookies && !this.getHeader('cookie')) {
var cookieBuffer = [];

_.forEach(_.keys(options.cookies), function(key) {
_.forEach(_.keys(options.cookies), function (key) {
cookieBuffer.push(key + '=' + options.cookies[key]);
});

Expand All @@ -48,7 +52,8 @@ var MockRequest = function(options) {
util.inherits(MockRequest, PassThrough);


MockRequest.prototype.setHeader = function(name, value, clobber) {
MockRequest.prototype.setHeader = function (name, value, clobber) {
debugger;
if (http.ClientRequest) {
var ret = http.ClientRequest.prototype.setHeader.call(this, name, value, clobber);
this.headers = this._headers;
Expand All @@ -60,12 +65,12 @@ MockRequest.prototype.setHeader = function(name, value, clobber) {
}
};

MockRequest.prototype.getHeader = function(name) {
MockRequest.prototype.getHeader = function (name) {
if (http.ClientRequest) {
return http.ClientRequest.prototype.getHeader.call(this, name);
} else {
return this.headers[name];
}
};

module.exports = MockRequest;
module.exports = MockRequest;
123 changes: 62 additions & 61 deletions lib/response.js
Expand Up @@ -3,92 +3,93 @@ var util = require('util');
var http = require('http');

/**
* Mock response object for receiving content without a server.
**/
var MockResponse = function(callback) {
if (!(this instanceof MockResponse)) {
return new MockResponse(callback);
}
* Mock response object for receiving content without a server.
**/
var MockResponse = function (callback) {
if (!(this instanceof MockResponse)) {
return new MockResponse(callback);
}

events.EventEmitter.call(this);
events.EventEmitter.call(this);

this.buffer = [];
this.statusCode = 200;
this._headers = {};
this.on('data', function(chunk) {
this.buffer.push(chunk);
});
this.on('pipe', function(src) {
var buffer = this.buffer;
this.buffer = [];
this.statusCode = 200;
this._headers = {};
this.on('data', function (chunk) {
this.buffer.push(chunk);
});
this.on('pipe', function (src) {
var buffer = this.buffer;

src.on('data', function(chunk){
buffer.push(chunk);
})
});
this.on('close', function() {});
src.on('data', function (chunk) {
buffer.push(chunk);
})
});
this.on('close', function () {});

if (callback) {
var self = this;
var cleanup = function () {
self.removeListener('error', cleanup)
self.removeListener('response', cleanup)
if (callback) {
var self = this;
var cleanup = function () {
self.removeListener('error', cleanup)
self.removeListener('response', cleanup)

callback.apply(this, arguments)
}
this.once('error', cleanup);
this.once('response', cleanup);
callback.apply(this, arguments)
}
this.once('error', cleanup);
this.once('response', cleanup);
}

// necessary for mocking a real request.
this._headerNames = {};
this._removedHeader = {};
};

util.inherits(MockResponse, events.EventEmitter);

MockResponse.prototype.write = function(str) {
this.buffer.push(str);
MockResponse.prototype.write = function (str) {
this.buffer.push(str);
};
MockResponse.prototype.writeHead = function(statusCode, headers) {
var that = this;
MockResponse.prototype.writeHead = function (statusCode, headers) {
var that = this;

this.statusCode = statusCode;
Object.keys(headers || {}).forEach(function(k) {
that.setHeader(k, headers[k]);
});
this.statusCode = statusCode;
Object.keys(headers || {}).forEach(function (k) {
that.setHeader(k, headers[k]);
});
};
MockResponse.prototype.setHeader = function(name, value, clobber) {
MockResponse.prototype.setHeader = function (name, value, clobber) {
if (http.ServerResponse) {
var ret = http.ServerResponse.prototype.setHeader.call(this, name, value, clobber);
this.headers = this._headers;
return ret;
}
else if (clobber || !this.headers.hasOwnProperty(name)) {
} else if (clobber || !this.headers.hasOwnProperty(name)) {
this.headers[name] = value;
}
else {
} else {
this.headers[name] += ',' + value;
}
};
MockResponse.prototype.getHeader = function(name) {
MockResponse.prototype.getHeader = function (name) {
if (http.ServerResponse) {
return http.ServerResponse.prototype.getHeader.call(this, name);
}
else {
} else {
return this.headers[name];
}
};
MockResponse.prototype.end = function(str) {
this.buffer.push(str);
this.emit('close');
this.emit('finish');
this.emit('end', null, { // deprecate me
statusCode: this.statusCode,
body: this.buffer.join(''),
headers: this._headers
});
this.emit('response', null, {
statusCode: this.statusCode,
body: this.buffer.join(''),
headers: this._headers
});
this.finished = true
MockResponse.prototype.end = function (str) {
this.buffer.push(str);
this.emit('close');
this.emit('finish');
this.emit('end', null, { // deprecate me
statusCode: this.statusCode,
body: this.buffer.join(''),
headers: this._headers
});
this.emit('response', null, {
statusCode: this.statusCode,
body: this.buffer.join(''),
headers: this._headers
});
this.finished = true
};

module.exports = MockResponse;
module.exports = MockResponse;

0 comments on commit 25b226b

Please sign in to comment.