From ca9ffac093fe68348bd095b3c018b010f0dc5518 Mon Sep 17 00:00:00 2001 From: Vishesh Duggar Date: Thu, 17 Sep 2020 16:09:11 +0530 Subject: [PATCH 1/2] Changed parse value --- lib/unroll.js | 24 +++++++++-- package-lock.json | 90 +++++++++++++++++++++++++++++----------- test/specs/unrollSpec.js | 15 +++++++ 3 files changed, 102 insertions(+), 27 deletions(-) diff --git a/lib/unroll.js b/lib/unroll.js index cd01f9c..e87828d 100644 --- a/lib/unroll.js +++ b/lib/unroll.js @@ -21,12 +21,30 @@ const isStringifiedJSON = function (value) { return true; }; +function falsyString(value) { + let valueStr = 'false'; + switch (value) { + case undefined: + valueStr = 'undefined' + break; + case typeof value === 'function': + valueStr = value.constructor.name; + default: + break; + } +} + const parseValue = function (value) { + let parsedValue = value; try { - return JSON.parse(value.match(/\[.*?\]/) ? value.slice(0) : value); - } catch (e) { - return value; + parsedValue = JSON.parse(value.match(/\[.*?\]/) ? value.slice(0) : value); + } finally { + if(!parsedValue) { + parsedValue = falsyString(parsedValue); + } + return parsedValue; } + }; const throwIfNoMatch = function (value, matcher) { diff --git a/package-lock.json b/package-lock.json index e29aa4f..63b7724 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "unroll", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -167,6 +167,7 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -3218,7 +3219,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.1.1", @@ -3277,7 +3279,8 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true + "dev": true, + "optional": true }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -3294,6 +3297,7 @@ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, + "optional": true, "requires": { "inherits": "~2.0.0" } @@ -3303,6 +3307,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, + "optional": true, "requires": { "hoek": "2.x.x" } @@ -3312,6 +3317,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", "dev": true, + "optional": true, "requires": { "balanced-match": "^0.4.1", "concat-map": "0.0.1" @@ -3321,7 +3327,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true + "dev": true, + "optional": true }, "caseless": { "version": "0.12.0", @@ -3341,13 +3348,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "dev": true, + "optional": true }, "combined-stream": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "dev": true, + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -3356,19 +3365,22 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "dev": true, + "optional": true }, "cryptiles": { "version": "2.0.5", @@ -3420,7 +3432,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "dev": true, + "optional": true }, "delegates": { "version": "1.0.0", @@ -3450,7 +3463,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", - "dev": true + "dev": true, + "optional": true }, "forever-agent": { "version": "0.6.1", @@ -3475,13 +3489,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "dev": true, + "optional": true }, "fstream": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, + "optional": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -3542,6 +3558,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, + "optional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3555,7 +3572,8 @@ "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "dev": true, + "optional": true }, "har-schema": { "version": "1.0.5", @@ -3599,7 +3617,8 @@ "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "dev": true, + "optional": true }, "http-signature": { "version": "1.1.1", @@ -3618,6 +3637,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, + "optional": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -3627,7 +3647,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.4", @@ -3641,6 +3662,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3656,7 +3678,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "optional": true }, "isstream": { "version": "0.1.2", @@ -3739,13 +3762,15 @@ "version": "1.27.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true + "dev": true, + "optional": true }, "mime-types": { "version": "2.1.15", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", "dev": true, + "optional": true, "requires": { "mime-db": "~1.27.0" } @@ -3755,6 +3780,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3763,13 +3789,15 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "dev": true, + "optional": true }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -3827,7 +3855,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "dev": true, + "optional": true }, "oauth-sign": { "version": "0.8.2", @@ -3848,6 +3877,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -3881,7 +3911,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "dev": true, + "optional": true }, "performance-now": { "version": "0.2.0", @@ -3894,7 +3925,8 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "dev": true, + "optional": true }, "punycode": { "version": "1.4.1", @@ -3937,6 +3969,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", "dev": true, + "optional": true, "requires": { "buffer-shims": "~1.0.0", "core-util-is": "~1.0.0", @@ -3983,6 +4016,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", "dev": true, + "optional": true, "requires": { "glob": "^7.0.5" } @@ -3991,7 +4025,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", - "dev": true + "dev": true, + "optional": true }, "semver": { "version": "5.3.0", @@ -4056,6 +4091,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4067,6 +4103,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -4083,6 +4120,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4099,6 +4137,7 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, + "optional": true, "requires": { "block-stream": "*", "fstream": "^1.0.2", @@ -4160,7 +4199,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "dev": true, + "optional": true }, "uuid": { "version": "3.0.1", @@ -4193,7 +4233,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "dev": true, + "optional": true } } }, @@ -6360,7 +6401,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "dev": true, + "optional": true }, "loose-envify": { "version": "1.3.1", diff --git a/test/specs/unrollSpec.js b/test/specs/unrollSpec.js index cc1b7f1..ff3a9f0 100644 --- a/test/specs/unrollSpec.js +++ b/test/specs/unrollSpec.js @@ -34,6 +34,21 @@ afterEach(function () { // }); describe('unroll()', () => { describe('outputs test title correctly', () => { + it('(array.notation) when called with falsy values or function ref', () => { + unroll( + testTitle, + () => {}, + [ + ['entity', 'thing'], + [undefined, 'moon'], + [parseInt, 'planet'] + ] + ); + assert.callCount(testSpy, 2); + assert.calledWithExactly(testSpy, 'The "undefined" jumped over the "moon".', match.func); + assert.calledWithExactly(testSpy, 'The "parseInt" jumped over the "planet".', match.func); + }); + it('(array.notation) when called with string values', () => { unroll( testTitle, From 2f2ee67816c3bce4eb085942991162b75d08d708 Mon Sep 17 00:00:00 2001 From: Vishesh Duggar Date: Thu, 17 Sep 2020 16:56:57 +0530 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Function=20and=20Clas?= =?UTF-8?q?s=20reference=20can=20be=20passed=20as=20arg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/unroll.js | 26 +++++--------------------- test/specs/unrollSpec.js | 12 +++++------- 2 files changed, 10 insertions(+), 28 deletions(-) diff --git a/lib/unroll.js b/lib/unroll.js index e87828d..c699839 100644 --- a/lib/unroll.js +++ b/lib/unroll.js @@ -21,30 +21,12 @@ const isStringifiedJSON = function (value) { return true; }; -function falsyString(value) { - let valueStr = 'false'; - switch (value) { - case undefined: - valueStr = 'undefined' - break; - case typeof value === 'function': - valueStr = value.constructor.name; - default: - break; - } -} - const parseValue = function (value) { - let parsedValue = value; try { - parsedValue = JSON.parse(value.match(/\[.*?\]/) ? value.slice(0) : value); - } finally { - if(!parsedValue) { - parsedValue = falsyString(parsedValue); - } - return parsedValue; + return JSON.parse(value.match(/\[.*?\]/) ? value.slice(0) : value); + } catch (e) { + return value; } - }; const throwIfNoMatch = function (value, matcher) { @@ -145,6 +127,8 @@ const getStringValue = function (value) { return JSON.stringify(value); } else if (type === 'number') { return value; + } else if (type === 'function') { + return value.name; } return `"${value}"`; }; diff --git a/test/specs/unrollSpec.js b/test/specs/unrollSpec.js index ff3a9f0..ac8aca0 100644 --- a/test/specs/unrollSpec.js +++ b/test/specs/unrollSpec.js @@ -36,17 +36,15 @@ describe('unroll()', () => { describe('outputs test title correctly', () => { it('(array.notation) when called with falsy values or function ref', () => { unroll( - testTitle, + 'Should print this as #entity', () => {}, [ - ['entity', 'thing'], - [undefined, 'moon'], - [parseInt, 'planet'] + ['entity'], + [parseInt] ] ); - assert.callCount(testSpy, 2); - assert.calledWithExactly(testSpy, 'The "undefined" jumped over the "moon".', match.func); - assert.calledWithExactly(testSpy, 'The "parseInt" jumped over the "planet".', match.func); + assert.callCount(testSpy, 1); + assert.calledWithExactly(testSpy, 'Should print this as parseInt', match.func); }); it('(array.notation) when called with string values', () => {