Skip to content

Commit

Permalink
test: improve querystring.parse assertion messages
Browse files Browse the repository at this point in the history
  • Loading branch information
mscdex committed Feb 8, 2017
1 parent 851c419 commit 7b72507
Showing 1 changed file with 24 additions and 8 deletions.
32 changes: 24 additions & 8 deletions test/parallel/test-querystring.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';
require('../common');
const assert = require('assert');
const inspect = require('util').inspect;

// test using assert
const qs = require('querystring');
Expand Down Expand Up @@ -126,28 +127,43 @@ assert.strictEqual('918854443121279438895193',
qs.parse('id=918854443121279438895193').id);


function check(actual, expected) {
function check(actual, expected, input) {
assert(!(actual instanceof Object));
assert.deepStrictEqual(Object.keys(actual).sort(),
Object.keys(expected).sort());
Object.keys(expected).forEach(function(key) {
assert.deepStrictEqual(actual[key], expected[key]);
const actualKeys = Object.keys(actual).sort();
const expectedKeys = Object.keys(expected).sort();
let msg;
if (typeof input === 'string') {
msg = `Input: ${inspect(input)}\n` +
`Actual keys: ${inspect(actualKeys)}\n` +
`Expected keys: ${inspect(expectedKeys)}`;
}
assert.deepStrictEqual(actualKeys, expectedKeys, msg);
expectedKeys.forEach(function(key) {
if (typeof input === 'string') {
msg = `Input: ${inspect(input)}\n` +
`Key: ${inspect(key)}\n` +
`Actual value: ${inspect(actual[key])}\n` +
`Expected value: ${inspect(expected[key])}`;
} else {
msg = undefined;
}
assert.deepStrictEqual(actual[key], expected[key], msg);
});
}

// test that the canonical qs is parsed properly.
qsTestCases.forEach(function(testCase) {
check(qs.parse(testCase[0]), testCase[2]);
check(qs.parse(testCase[0]), testCase[2], testCase[0]);
});

// test that the colon test cases can do the same
qsColonTestCases.forEach(function(testCase) {
check(qs.parse(testCase[0], ';', ':'), testCase[2]);
check(qs.parse(testCase[0], ';', ':'), testCase[2], testCase[0]);
});

// test the weird objects, that they get parsed properly
qsWeirdObjects.forEach(function(testCase) {
check(qs.parse(testCase[1]), testCase[2]);
check(qs.parse(testCase[1]), testCase[2], testCase[1]);
});

qsNoMungeTestCases.forEach(function(testCase) {
Expand Down

0 comments on commit 7b72507

Please sign in to comment.