From 51a4e66ce27a1edd42a6a00ec1c183536ad496b7 Mon Sep 17 00:00:00 2001 From: Raynos Date: Thu, 21 Mar 2013 14:07:11 -0700 Subject: [PATCH] use json-stringify-safe in render.js to not throw on circular structures --- lib/render.js | 5 +++-- package.json | 3 ++- test/circular-things.js | 43 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 test/circular-things.js diff --git a/lib/render.js b/lib/render.js index ec486aaf..52f71c8b 100644 --- a/lib/render.js +++ b/lib/render.js @@ -1,5 +1,6 @@ var Stream = require('stream'); var json = typeof JSON === 'object' ? JSON : require('jsonify'); +var getSerialize = require('json-stringify-safe').getSerialize() module.exports = Render; @@ -70,8 +71,8 @@ function encodeResult (res, count) { output += outer + '---\n'; output += inner + 'operator: ' + res.operator + '\n'; - var ex = json.stringify(res.expected) || ''; - var ac = json.stringify(res.actual) || ''; + var ex = json.stringify(res.expected, getSerialize) || ''; + var ac = json.stringify(res.actual, getSerialize) || ''; if (Math.max(ex.length, ac.length) > 65) { output += inner + 'expected:\n' + inner + ' ' + ex + '\n'; diff --git a/package.json b/package.json index 973aa98e..8b1f8b6b 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "dependencies" : { "jsonify" : "~0.0.0", "deep-equal" : "~0.0.0", - "defined" : "~0.0.0" + "defined" : "~0.0.0", + "json-stringify-safe": "~4.0.0" }, "devDependencies" : { "tap" : "~0.3.0", diff --git a/test/circular-things.js b/test/circular-things.js new file mode 100644 index 00000000..0ac7baf7 --- /dev/null +++ b/test/circular-things.js @@ -0,0 +1,43 @@ +var tape = require('../'); +var tap = require('tap'); + +tap.test('circular test', function (assert) { + var test = tape.createHarness({ exit : false }); + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + // console.log("rs", rows) + + // console.log("deepEqual?") + + assert.same(rows, [ + "TAP version 13" + , "circular" + , { id: 1 + , ok: false + , name: " should be equal" + , operator: "equal" + , expected: "{}" + , actual: '{"circular":"[Circular]"}' + } + , "tests 1" + , "pass 0" + , "fail 1" + ]) + assert.end() + }) + + // tt.equal(10, 10) + // tt.end() + + test.stream.pipe(tc); + + test("circular", function (t) { + t.plan(1) + var circular = {} + circular.circular = circular + t.equal(circular, {}) + }) +})