diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..a6027e4 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,20 @@ +{ + "node": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 2, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": false, + "strict": true, + "trailing": true, + "smarttabs": true +} diff --git a/examples/express-route.js b/examples/express-route.js index 0e5542a..c9f9f08 100644 --- a/examples/express-route.js +++ b/examples/express-route.js @@ -1,3 +1,5 @@ +'use strict'; + var httpMocks = require('../lib/http-mock'); // Suppose we have the following magical Express incantation: @@ -6,44 +8,46 @@ var httpMocks = require('../lib/http-mock'); // // And we have ourselves a function to answer that call: -var aroute = function( request, response ) { - - var id = request.params.id; - console.log("We have a '%s' request for %s (ID: %d)", - request.method, request.url, id); - - var body = { - name: 'Bob Dog', - age: 42, - email: 'bob@dog.com' - }; - response.setHeader('Content-Type', 'application/json'); - response.statusCode = 200; - response.send( JSON.stringify(body), 'utf8' ); - response.end(); +var aroute = function (request, response) { + + var id = request.params.id; + console.log('We have a \'%s\' request for %s (ID: %d)', + request.method, request.url, id); + + var body = { + name: 'Bob Dog', + age: 42, + email: 'bob@dog.com' + }; + response.setHeader('Content-Type', 'application/json'); + response.statusCode = 200; + response.send(JSON.stringify(body), 'utf8'); + response.end(); }; // ----------------------------------------------------------------- // In another file, we can now test that function, like so: -exports['aroute - Simple testing'] = function(test) { - var request = httpMocks.createRequest({ - method: 'GET', - url: '/user/42', - params: { id: 42 } - }); - var response = httpMocks.createResponse(); - - aroute(request, response); - - var data = JSON.parse( response._getData() ); - test.equal("Bob Dog", data.name); - test.equal(42, data.age); - test.equal("bob@dog.com", data.email); - - test.equal(200, response.statusCode ); - test.ok( response._isEndCalled()); - test.ok( response._isJSON()); - test.ok( response._isUTF8()); - test.done(); +exports['aroute - Simple testing'] = function (test) { + var request = httpMocks.createRequest({ + method: 'GET', + url: '/user/42', + params: { + id: 42 + } + }); + var response = httpMocks.createResponse(); + + aroute(request, response); + + var data = JSON.parse(response._getData()); + test.equal('Bob Dog', data.name); + test.equal(42, data.age); + test.equal('bob@dog.com', data.email); + + test.equal(200, response.statusCode); + test.ok(response._isEndCalled()); + test.ok(response._isJSON()); + test.ok(response._isUTF8()); + test.done(); }; \ No newline at end of file diff --git a/lib/mockEventEmitter.js b/lib/mockEventEmitter.js index 05b04fd..9662692 100644 --- a/lib/mockEventEmitter.js +++ b/lib/mockEventEmitter.js @@ -1,18 +1,18 @@ /* * http://nodejs.org/api/events.html -*/ + */ -function EventEmitter(){} +function EventEmitter() {} -EventEmitter.prototype.addListener = function(event, listener){} -EventEmitter.prototype.on = function(event, listener){} -EventEmitter.prototype.once = function(event, listener){} -EventEmitter.prototype.removeListener = function(event, listener){} -EventEmitter.prototype.removeAllListeners = function(event){} +EventEmitter.prototype.addListener = function (event, listener) {}; +EventEmitter.prototype.on = function (event, listener) {}; +EventEmitter.prototype.once = function (event, listener) {}; +EventEmitter.prototype.removeListener = function (event, listener) {}; +EventEmitter.prototype.removeAllListeners = function (event) {}; // EventEmitter.prototype.removeAllListeners = function([event]) -EventEmitter.prototype.setMaxListeners = function(n){} -EventEmitter.prototype.listeners = function(event){} -EventEmitter.prototype.emit = function(event){} +EventEmitter.prototype.setMaxListeners = function (n) {}; +EventEmitter.prototype.listeners = function (event) {}; +EventEmitter.prototype.emit = function (event) {}; // EventEmitter.prototype.emit = function(event, [arg1], [arg2], [...]){} -module.exports = EventEmitter; +module.exports = EventEmitter; \ No newline at end of file diff --git a/lib/mockRequest.js b/lib/mockRequest.js index 5c2097b..849fe66 100644 --- a/lib/mockRequest.js +++ b/lib/mockRequest.js @@ -1,10 +1,12 @@ +'use strict'; + /** * File: mockRequest - * + * * This file implements node.js's implementation of a 'request' object. * This is actually closer to what Express offers the user, in that the * body is really a parsed object of values. - * + * * @author Howard Abrams */ @@ -12,7 +14,7 @@ * Function: createRequest * * Creates a new mock 'request' instance. All values are reset to the - * defaults. + * defaults. * * Parameters: * @@ -23,156 +25,156 @@ * method - The method value, see * url - The url value, see * params - The parameters, see - * body - The body values, , see + * body - The body values, , see */ -exports.createRequest = function(options) { - if (!options) { - options = {}; - } +exports.createRequest = function (options) { + if (!options) { + options = {}; + } + + return { + method: (options.method) ? options.method : 'GET', + url: (options.url) ? options.url : '', + params: (options.params) ? options.params : {}, + session: (options.session) ? options.session : {}, + cookies: (options.cookies) ? options.cookies : {}, + headers: (options.headers) ? options.headers : {}, + body: (options.body) ? options.body : {}, + query: (options.query) ? options.query : {}, + files: (options.files) ? options.files : {}, + + /** + * Function: _setParameter + * + * Set parameters that the client can then get using the 'params' + * key. + * + * Parameters: + * + * key - The key. For instance, 'bob' would be accessed: request.params.bob + * value - The value to return when accessed. + */ + + _setParameter: function (key, value) { + this.params[key] = value; + }, + + /** + * Sets a variable that is stored in the session. + * + * @param variable The variable to store in the session + * @param value The value associated with the variable + */ + _setSessionVariable: function (variable, value) { + this.session[variable] = value; + }, + + /** + * Sets a variable that is stored in the cookies. + * + * @param variable The variable to store in the cookies + * @param value The value associated with the variable + */ + _setCookiesVariable: function (variable, value) { + this.cookies[variable] = value; + }, + + /** + * Sets a variable that is stored in the headers. + * + * @param variable The variable to store in the headers + * @param value The value associated with the variable + */ + _setHeadersVariable: function (variable, value) { + this.headers[variable] = value; + }, - return { - method : (options.method) ? options.method : 'GET', - url : (options.url ) ? options.url : '', - params : (options.params) ? options.params : {}, - session: (options.session) ? options.session : {}, - cookies: (options.cookies) ? options.cookies : {}, - headers: (options.headers) ? options.headers: {}, - body : (options.body ) ? options.body : {}, - query : (options.query ) ? options.query : {}, - files : (options.files ) ? options.files : {}, - - /** - * Function: _setParameter - * - * Set parameters that the client can then get using the 'params' - * key. - * - * Parameters: - * - * key - The key. For instance, 'bob' would be accessed: request.params.bob - * value - The value to return when accessed. - */ - - _setParameter: function( key, value ) { - this.params[key] = value; - }, - - /** - * Sets a variable that is stored in the session. - * - * @param variable The variable to store in the session - * @param value The value associated with the variable - */ - _setSessionVariable: function( variable, value ) { - this.session[variable] = value; - }, - - /** - * Sets a variable that is stored in the cookies. - * - * @param variable The variable to store in the cookies - * @param value The value associated with the variable - */ - _setCookiesVariable: function( variable, value ) { - this.cookies[variable] = value; - }, - - /** - * Sets a variable that is stored in the headers. - * - * @param variable The variable to store in the headers - * @param value The value associated with the variable - */ - _setHeadersVariable: function( variable, value ) { - this.headers[variable] = value; - }, - - /** - * Sets a variable that is stored in the files. - * - * @param variable The variable to store in the files - * @param value The value associated with the variable - */ - _setFilesVariable: function( variable, value ) { - this.files[variable] = value; - }, - - /** - * Function: _setMethod - * - * Sets the HTTP method that the client gets when the called the 'method' - * property. This defaults to 'GET' if it is not set. - * - * Parameters: - * - * method - The HTTP method, e.g. GET, POST, PUT, DELETE, etc. - * - * Note: We don't validate the string. We just return it. - */ - - _setMethod: function( method ) { - this.method = method; - }, - - /** - * Function: _setURL - * - * Sets the URL value that the client gets when the called the 'url' - * property. - * - * Parameters: - * - * url - The request path, e.g. /my-route/452 - * - * Note: We don't validate the string. We just return it. Typically, these - * do not include hostname, port or that part of the URL. - */ - - _setURL: function( url ) { - this.url = url; - }, - - /** - * Function: _setBody - * - * Sets the body that the client gets when the called the 'body' - * parameter. This defaults to 'GET' if it is not set. - * - * Parameters: - * - * body - An object representing the body. - * - * If you expect the 'body' to come from a form, this typically means that - * it would be a flat object of properties and values, as in: - * - * > { name: 'Howard Abrams', - * > age: 522 - * > } - * - * If the client is expecting a JSON object through a REST interface, then - * this object could be anything. - */ - - _setBody: function( body ) { - this.body = body; - }, - - /** - * Function: _addBody - * - * Adds another body parameter the client gets when calling the 'body' - * parameter with another property value, e.g. the name of a form element - * that was passed in. - * - * Parameters: - * - * key - The key. For instance, 'bob' would be accessed: request.params.bob - * value - The value to return when accessed. - */ - - _addBody: function( key, value ) { - this.body[key] = value; - } - }; -}; + /** + * Sets a variable that is stored in the files. + * + * @param variable The variable to store in the files + * @param value The value associated with the variable + */ + _setFilesVariable: function (variable, value) { + this.files[variable] = value; + }, + + /** + * Function: _setMethod + * + * Sets the HTTP method that the client gets when the called the 'method' + * property. This defaults to 'GET' if it is not set. + * + * Parameters: + * + * method - The HTTP method, e.g. GET, POST, PUT, DELETE, etc. + * + * Note: We don't validate the string. We just return it. + */ + + _setMethod: function (method) { + this.method = method; + }, + + /** + * Function: _setURL + * + * Sets the URL value that the client gets when the called the 'url' + * property. + * + * Parameters: + * + * url - The request path, e.g. /my-route/452 + * + * Note: We don't validate the string. We just return it. Typically, these + * do not include hostname, port or that part of the URL. + */ + + _setURL: function (url) { + this.url = url; + }, + + /** + * Function: _setBody + * + * Sets the body that the client gets when the called the 'body' + * parameter. This defaults to 'GET' if it is not set. + * + * Parameters: + * + * body - An object representing the body. + * + * If you expect the 'body' to come from a form, this typically means that + * it would be a flat object of properties and values, as in: + * + * > { name: 'Howard Abrams', + * > age: 522 + * > } + * + * If the client is expecting a JSON object through a REST interface, then + * this object could be anything. + */ + + _setBody: function (body) { + this.body = body; + }, + + /** + * Function: _addBody + * + * Adds another body parameter the client gets when calling the 'body' + * parameter with another property value, e.g. the name of a form element + * that was passed in. + * + * Parameters: + * + * key - The key. For instance, 'bob' would be accessed: request.params.bob + * value - The value to return when accessed. + */ + + _addBody: function (key, value) { + this.body[key] = value; + } + }; +}; \ No newline at end of file diff --git a/lib/mockResponse.js b/lib/mockResponse.js index 1c139b2..f9011b5 100644 --- a/lib/mockResponse.js +++ b/lib/mockResponse.js @@ -1,3 +1,5 @@ +'use strict'; + /** * File: mockResponse * @@ -24,401 +26,409 @@ * encoding - The default encoding for the response */ -var WritableStream = require('./mockWritableStream') - , EventEmitter = require('./mockEventEmitter'); - -exports.createResponse = function(options) { - if (!options) { - options = {}; - } - - var _endCalled = false; - var _data = ""; - var _headers = {}; - var _encoding = options.encoding; - - var _redirectUrl = ""; - var _renderView = ""; - var _renderData = {}; - - var writableStream = new (options.writableStream || WritableStream)(); - var eventEmitter = new (options.eventEmitter || EventEmitter)(); - - return { - statusCode: -1, - - cookies: {}, - - cookie: function(name, value, options) { - this.cookies[name] = { value: value, options: options }; - }, - - clearCookie: function(name) { - delete this.cookies[name] - }, - - status: function(code) { - this.statusCode = code; - return this; - }, - - /** - * Function: writeHead - * - * The 'writeHead' function from node's HTTP API. - * - * Parameters: - * - * statusCode - A number to send as a the HTTP status - * headers - An object of properties that will be used for - * the HTTP headers. - */ - writeHead: function( statusCode, phrase, headers ) { - if (_endCalled) { - throw "The end() method has already been called."; - } - - this.statusCode = statusCode; - - // Note: Not sure if the headers given in this function - // overwrite any headers specified earlier. - if (headers) { - _reasonPhrase = phrase; - _headers = headers; - } - else { - _headers = phrase; - } - }, - - /** - * The 'send' function from node's HTTP API that returns data - * to the client. Can be called multiple times. - * - * @param data The data to return. Must be a string. - */ - send: function( a, b, c ) { - switch (arguments.length) { - case 1: - _data += a; - break; - - case 2: - if (typeof a == 'number') { - this.statusCode = a; - _data += b; - } - else if (typeof b == 'number') { - _data += a; - this.statusCode = b; - console.warn("WARNING: Called 'send' with deprecated parameter order"); - } - else { - _data += a; - _encoding = b; - } - break; - - case 3: - _data += a; - _headers = b; - this.statusCode = c; - console.warn("WARNING: Called 'send' with deprecated three parameters"); - break; - - default: - break; - } - }, - - - /** - * Function: write - * - * This function has the same behavior as the 'send' function. - * - * Parameters: - * - * data - The data to return. Must be a string. Appended to - * previous calls to data. - * encoding - Optional encoding value. - */ - - write: function( data, encoding ) { - _data += data; - if (encoding) { - _encoding = encoding; - } - }, - - /** - * Function: end - * - * The 'end' function from node's HTTP API that finishes - * the connection request. This must be called. - * - * Parameters: - * - * data - Optional data to return. Must be a string. Appended - * to previous calls to . - * encoding - Optional encoding value. - */ - end: function( data, encoding ) { - _endCalled = true; - if (data) { - _data += data; - } - if (encoding) { - _encoding = encoding; - } - }, - - - /** - * Function: getHeader - * - * Returns a particular header by name. - */ - getHeader: function(name) { - return _headers[name]; - }, - - /** - * Function: setHeader - * - * Set a particular header by name. - */ - setHeader: function(name, value) { - return _headers[name] = value; - }, - - /** - * Function: removeHeader - * - * Removes an HTTP header by name. - */ - removeHeader: function(name) { - delete _headers[name]; - }, - - /** - * Function: setEncoding - * - * Sets the encoding for the data. Generally 'utf8'. - * - * Parameters: - * - * encoding - The string representing the encoding value. - */ - setEncoding: function(encoding) { - _encoding = encoding; - }, - - /** - * Function: redirect - * - * Redirect to a url with response code - */ - redirect: function(a, b) { - switch(arguments.length) { - case 1: - _redirectUrl = a; - break; - - case 2: - if (typeof a == 'number') { - this.statusCode = a; - _redirectUrl = b; - } - break; - - default: - break; - } - }, - - /** - * Function: render - * - * Render a view with a callback responding with the - * rendered string. - */ - render: function(a, b, c) { - _renderView = a; - switch(arguments.length) { - case 2: - break; - - case 3: - _renderData = b; - break; - - default: - break; - } - }, - - writable: function(){ - return writableStream.writable.apply(this, arguments); - }, - // end: function(){ - // return writableStream.end.apply(this, arguments); - // }, - destroy: function(){ - return writableStream.destroy.apply(this, arguments); - }, - destroySoon: function(){ - return writableStream.destroySoon.apply(this, arguments); - }, - addListener: function(event, listener){ - return eventEmitter.addListener.apply(this, arguments); - }, - on: function(event, listener){ - return eventEmitter.on.apply(this, arguments); - }, - once: function(event, listener){ - return eventEmitter.once.apply(this, arguments); - }, - removeListener: function(event, listener){ - return eventEmitter.removeListener.apply(this, arguments); - }, - removeAllListeners: function(event){ - return eventEmitter.removeAllListeners.apply(this, arguments); - }, - setMaxListeners: function(n){ - return eventEmitter.setMaxListeners.apply(this, arguments) - }, - listeners: function(event){ - return eventEmitter.listeners.apply(this, arguments); - }, - emit: function(event){ - return eventEmitter.emit.apply(this, arguments); - }, - //This mock object stores some state as well - //as some test-analysis functions: - - /** - * Function: _isEndCalled - * - * Since the function must be called, this function - * returns true if it has been called. False otherwise. - */ - _isEndCalled: function() { - return _endCalled; - }, - - - /** - * Function: _getHeaders - * - * Returns all the headers that were set. This may be an - * empty object, but probably will have "Content-Type" set. - */ - _getHeaders: function() { - return _headers; - }, - - /** - * Function: _getData - * - * The data sent to the user. - */ - _getData: function() { - return _data; - }, - - /** - * Function: _getStatusCode - * - * The status code that was sent to the user. - */ - _getStatusCode: function() { - return this.statusCode; - }, - - /** - * Function: _isJSON - * - * Returns true if the data sent was defined as JSON. - * It doesn't validate the data that was sent. - */ - _isJSON: function() { - return (_headers["Content-Type"] == "application/json"); - }, - - /** - * Function: _isUTF8 - * - * If the encoding was set, and it was set to UTF-8, then - * this function return true. False otherwise. - * - * Returns: - * - * False if the encoding wasn't set and wasn't set to "utf8". - */ - _isUTF8: function() { - if ( !_encoding ) { - return false; - } - return ( _encoding === "utf8" ); - }, - - /** - * Function: _isDataLengthValid - * - * If the Content-Length header was set, this will only - * return true if the length is actually the length of the - * data that was set. - * - * Returns: - * - * True if the "Content-Length" header was not - * set. Otherwise, it compares it. - */ - _isDataLengthValid: function() { - if (_headers["Content-Length"]) { - return (_headers["Content-Length"] == _data.length); - } - return true; - }, - - /** - * Function: _getRedirectUrl - * - * Return redirect url of redirect method - * - * Returns: - * - * Redirect url - */ - _getRedirectUrl: function() { - return _redirectUrl; - }, - - /** - * Function: _getRenderView - * - * Return render view of render method - * - * Returns: - * - * render view - */ - _getRenderView: function() { - return _renderView; - }, - - /** - * Function: _getRenderData - * - * Return render data of render method - * - * Returns: - * - * render data - */ - _getRenderData: function() { - return _renderData; +var WritableStream = require('./mockWritableStream'), + EventEmitter = require('./mockEventEmitter'); + +exports.createResponse = function (options) { + if (!options) { + options = {}; + } + + var _endCalled = false; + var _data = ''; + var _headers = {}; + var _encoding = options.encoding; + + var _redirectUrl = ''; + var _renderView = ''; + var _renderData = {}; + + var writableStream = options.writableStream ? + new options.writableStream() : + new WritableStream(); + var eventEmitter = options.eventEmitter ? + new options.eventEmitter() : + new EventEmitter(); + + return { + statusCode: -1, + + cookies: {}, + + cookie: function (name, value, options) { + this.cookies[name] = { + value: value, + options: options + }; + }, + + clearCookie: function (name) { + delete this.cookies[name]; + }, + + status: function (code) { + this.statusCode = code; + return this; + }, + + /** + * Function: writeHead + * + * The 'writeHead' function from node's HTTP API. + * + * Parameters: + * + * statusCode - A number to send as a the HTTP status + * headers - An object of properties that will be used for + * the HTTP headers. + */ + writeHead: function (statusCode, phrase, headers) { + if (_endCalled) { + throw 'The end() method has already been called.'; + } + + this.statusCode = statusCode; + + // Note: Not sure if the headers given in this function + // overwrite any headers specified earlier. + if (headers) { + _headers = headers; + } else { + _headers = phrase; + } + }, + + /** + * The 'send' function from node's HTTP API that returns data + * to the client. Can be called multiple times. + * + * @param data The data to return. Must be a string. + */ + send: function (a, b, c) { + switch (arguments.length) { + case 1: + if (typeof a === 'number') { + this.statusCode = a; + } else { + _data += a; } - }; -}; + break; + + case 2: + if (typeof a === 'number') { + this.statusCode = a; + _data += b; + } else if (typeof b === 'number') { + _data += a; + this.statusCode = b; + console.warn('WARNING: Called send() with deprecated parameter order'); + } else { + _data += a; + _encoding = b; + } + break; + + case 3: + _data += a; + _headers = b; + this.statusCode = c; + console.warn('WARNING: Called send() with deprecated three parameters'); + break; + + default: + break; + } + }, + + + /** + * Function: write + * + * This function has the same behavior as the 'send' function. + * + * Parameters: + * + * data - The data to return. Must be a string. Appended to + * previous calls to data. + * encoding - Optional encoding value. + */ + + write: function (data, encoding) { + _data += data; + if (encoding) { + _encoding = encoding; + } + }, + + /** + * Function: end + * + * The 'end' function from node's HTTP API that finishes + * the connection request. This must be called. + * + * Parameters: + * + * data - Optional data to return. Must be a string. Appended + * to previous calls to . + * encoding - Optional encoding value. + */ + end: function (data, encoding) { + _endCalled = true; + if (data) { + _data += data; + } + if (encoding) { + _encoding = encoding; + } + }, + + + /** + * Function: getHeader + * + * Returns a particular header by name. + */ + getHeader: function (name) { + return _headers[name]; + }, + + /** + * Function: setHeader + * + * Set a particular header by name. + */ + setHeader: function (name, value) { + _headers[name] = value; + return value; + }, + + /** + * Function: removeHeader + * + * Removes an HTTP header by name. + */ + removeHeader: function (name) { + delete _headers[name]; + }, + + /** + * Function: setEncoding + * + * Sets the encoding for the data. Generally 'utf8'. + * + * Parameters: + * + * encoding - The string representing the encoding value. + */ + setEncoding: function (encoding) { + _encoding = encoding; + }, + + /** + * Function: redirect + * + * Redirect to a url with response code + */ + redirect: function (a, b) { + switch (arguments.length) { + case 1: + _redirectUrl = a; + break; + + case 2: + if (typeof a === 'number') { + this.statusCode = a; + _redirectUrl = b; + } + break; + + default: + break; + } + }, + + /** + * Function: render + * + * Render a view with a callback responding with the + * rendered string. + */ + render: function (a, b, c) { + _renderView = a; + switch (arguments.length) { + case 2: + break; + + case 3: + _renderData = b; + break; + + default: + break; + } + }, + + writable: function () { + return writableStream.writable.apply(this, arguments); + }, + // end: function(){ + // return writableStream.end.apply(this, arguments); + // }, + destroy: function () { + return writableStream.destroy.apply(this, arguments); + }, + destroySoon: function () { + return writableStream.destroySoon.apply(this, arguments); + }, + addListener: function (event, listener) { + return eventEmitter.addListener.apply(this, arguments); + }, + on: function (event, listener) { + return eventEmitter.on.apply(this, arguments); + }, + once: function (event, listener) { + return eventEmitter.once.apply(this, arguments); + }, + removeListener: function (event, listener) { + return eventEmitter.removeListener.apply(this, arguments); + }, + removeAllListeners: function (event) { + return eventEmitter.removeAllListeners.apply(this, arguments); + }, + setMaxListeners: function (n) { + return eventEmitter.setMaxListeners.apply(this, arguments); + }, + listeners: function (event) { + return eventEmitter.listeners.apply(this, arguments); + }, + emit: function (event) { + return eventEmitter.emit.apply(this, arguments); + }, + //This mock object stores some state as well + //as some test-analysis functions: + + /** + * Function: _isEndCalled + * + * Since the function must be called, this function + * returns true if it has been called. False otherwise. + */ + _isEndCalled: function () { + return _endCalled; + }, + + + /** + * Function: _getHeaders + * + * Returns all the headers that were set. This may be an + * empty object, but probably will have "Content-Type" set. + */ + _getHeaders: function () { + return _headers; + }, + + /** + * Function: _getData + * + * The data sent to the user. + */ + _getData: function () { + return _data; + }, + + /** + * Function: _getStatusCode + * + * The status code that was sent to the user. + */ + _getStatusCode: function () { + return this.statusCode; + }, + + /** + * Function: _isJSON + * + * Returns true if the data sent was defined as JSON. + * It doesn't validate the data that was sent. + */ + _isJSON: function () { + return (_headers['Content-Type'] === 'application/json'); + }, + + /** + * Function: _isUTF8 + * + * If the encoding was set, and it was set to UTF-8, then + * this function return true. False otherwise. + * + * Returns: + * + * False if the encoding wasn't set and wasn't set to "utf8". + */ + _isUTF8: function () { + if (!_encoding) { + return false; + } + return (_encoding === 'utf8'); + }, + + /** + * Function: _isDataLengthValid + * + * If the Content-Length header was set, this will only + * return true if the length is actually the length of the + * data that was set. + * + * Returns: + * + * True if the "Content-Length" header was not + * set. Otherwise, it compares it. + */ + _isDataLengthValid: function () { + if (_headers['Content-Length']) { + return (_headers['Content-Length'].toString() === _data.length.toString()); + } + return true; + }, + + /** + * Function: _getRedirectUrl + * + * Return redirect url of redirect method + * + * Returns: + * + * Redirect url + */ + _getRedirectUrl: function () { + return _redirectUrl; + }, + + /** + * Function: _getRenderView + * + * Return render view of render method + * + * Returns: + * + * render view + */ + _getRenderView: function () { + return _renderView; + }, + + /** + * Function: _getRenderData + * + * Return render data of render method + * + * Returns: + * + * render data + */ + _getRenderData: function () { + return _renderData; + } + }; +}; \ No newline at end of file diff --git a/lib/mockWritableStream.js b/lib/mockWritableStream.js index baaceb6..585b929 100644 --- a/lib/mockWritableStream.js +++ b/lib/mockWritableStream.js @@ -1,16 +1,16 @@ /* * http://nodejs.org/api/stream.html#stream_writable_stream -*/ + */ -function WritableStream(){} +function WritableStream() {} -WritableStream.prototype.writable = function(){} +WritableStream.prototype.writable = function () {}; // WritableStream.prototype.write = function(string, [encoding], [fd]){} // WritableStream.prototype.write = function(buffer){} -WritableStream.prototype.end = function(){} +WritableStream.prototype.end = function () {}; // WritableStream.prototype.end = function(string, encoding){} // WritableStream.prototype.end = function(buffer){} -WritableStream.prototype.destroy = function(){} -WritableStream.prototype.destroySoon = function(){} +WritableStream.prototype.destroy = function () {}; +WritableStream.prototype.destroySoon = function () {}; -module.exports = WritableStream; +module.exports = WritableStream; \ No newline at end of file