From: Yorkie Date: Sat, 14 Dec 2013 21:09:28 +0000 (+0800) Subject: util: more strict check for bool/number/string X-Git-Tag: v0.11.10~33 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=95ee84fabe0b028ef964cc1032cd56a6cf89cb0e;p=platform%2Fupstream%2Fnodejs.git util: more strict check for bool/number/string --- diff --git a/lib/querystring.js b/lib/querystring.js index e9ff825..7437c29 100644 --- a/lib/querystring.js +++ b/lib/querystring.js @@ -118,7 +118,7 @@ var stringifyPrimitive = function(v) { if (util.isString(v)) return v; if (util.isBoolean(v)) - return v ? 'true' : 'false'; + return v == true ? 'true' : 'false'; if (util.isNumber(v)) return isFinite(v) ? v : ''; return ''; diff --git a/lib/util.js b/lib/util.js index a03e874..fb64a44 100644 --- a/lib/util.js +++ b/lib/util.js @@ -451,7 +451,7 @@ function isArray(ar) { exports.isArray = isArray; function isBoolean(arg) { - return typeof arg === 'boolean'; + return typeof arg === 'boolean' || objectToString(arg) === '[object Boolean]'; } exports.isBoolean = isBoolean; @@ -466,12 +466,12 @@ function isNullOrUndefined(arg) { exports.isNullOrUndefined = isNullOrUndefined; function isNumber(arg) { - return typeof arg === 'number'; + return typeof arg === 'number' || objectToString(arg) === '[object Number]'; } exports.isNumber = isNumber; function isString(arg) { - return typeof arg === 'string'; + return typeof arg === 'string' || objectToString(arg) === '[object String]'; } exports.isString = isString; diff --git a/test/simple/test-querystring.js b/test/simple/test-querystring.js index 483982c..2b4308e 100644 --- a/test/simple/test-querystring.js +++ b/test/simple/test-querystring.js @@ -83,7 +83,12 @@ var qsWeirdObjects = [ [{e: extendedFunction}, 'e=', {'e': ''}], [{d: new Date()}, 'd=', {'d': ''}], [{d: Date}, 'd=', {'d': ''}], - [{f: new Boolean(false), t: new Boolean(true)}, 'f=&t=', {'f': '', 't': ''}], + [{ + f: new Boolean(false), + t: new Boolean(true)}, + 'f=false&t=true', + {'f': 'false', 't': 'true'} + ], [{f: false, t: true}, 'f=false&t=true', {'f': 'false', 't': 'true'}], [{n: null}, 'n=', {'n': ''}], [{nan: NaN}, 'nan=', {'nan': ''}], diff --git a/test/simple/test-util.js b/test/simple/test-util.js index 4e75d51..07b3f6d 100644 --- a/test/simple/test-util.js +++ b/test/simple/test-util.js @@ -25,6 +25,35 @@ var assert = require('assert'); var util = require('util'); var context = require('vm').runInNewContext; +// isBoolean +assert.equal(true, util.isBoolean(true)); +assert.equal(true, util.isBoolean(false)); +assert.equal(true, util.isBoolean(Boolean())); +assert.equal(true, util.isBoolean(new Boolean())); +assert.equal(true, util.isBoolean(new Boolean(true))); +assert.equal(true, util.isBoolean(context('Boolean')())); +assert.equal(false, util.isBoolean({})); +assert.equal(false, util.isBoolean(/regexp/)); + +// isNumber +assert.equal(true, util.isNumber(0)); +assert.equal(true, util.isNumber(NaN)); +assert.equal(true, util.isNumber(Number())); +assert.equal(true, util.isNumber(new Number())); +assert.equal(true, util.isNumber(new Number(10))); +assert.equal(true, util.isNumber(context('Number')())); +assert.equal(false, util.isNumber({})); +assert.equal(false, util.isNumber(/regexp/)); + +// isString +assert.equal(true, util.isString('string')); +assert.equal(true, util.isString(String())); +assert.equal(true, util.isString(new String())); +assert.equal(true, util.isString(new String(10))); +assert.equal(true, util.isString(context('String')())); +assert.equal(false, util.isString({})); +assert.equal(false, util.isString(/regexp/)); + // isArray assert.equal(true, util.isArray([])); assert.equal(true, util.isArray(Array()));