QUnit.dump.setParser()
version added: 1.0.0.
Description
QUnit.dump.setParser( name, parser )
Override string serialization in QUnit.dump.parse()
for a given data type.
name | description |
---|---|
name (string) |
Value type |
parser (function) |
Value formatter callback |
Value type is one of the following:
array
bigint
(ES2020, determined by nativetypeof
)boolean
date
document
error
function
node
null
number
object
regexp
string
symbol
(ES2019, determined by nativetypeof
)undefined
window
If your callback allows recursion into arbitrary child value structures, you may call QUnit.dump.parse()
recursively. Recursive callers must pass on the stack, and call QUnit.dump.up()
to increase depth tracking beforehand, and QUnit.dump.down()
to decrease it afterward.
If your value type may contain any number of children (such as an object or array, something not limited to being formatted on a short single line), check the depth against QUnit.config.maxDepth
, and return a type-specific placeholder value if the depth limit was exceeded.
You may use QUnit.dump.join()
to aid in automatic formatting of indentation based on the current depth. Refer to examples below.
Changelog
QUnit 2.1 | The QUnit.jsDump alias was removed. |
QUnit 1.15 | The QUnit.jsDump interface was renamed to QUnit.dump .The QUnit.jsDump alias is deprecated. |
Examples
Value formatter
QUnit.dump.setParser('document', function (doc) {
return '[Document ' + doc.location.href + ']';
});
var example = { foo: document.createElement('div') };
var dumped1 = QUnit.dump.parse(example);
console.log(dumped1);
// # Default
// {
// "foo": <div></div>
// }
QUnit.dump.setParser('node', function (obj) {
return '[Node ' + obj.nodeName.toLowerCase() + ']';
});
var dumped2 = QUnit.dump.parse(example);
console.log(dumped2);
// # Custom
// {
// "foo": [Node div]
// }
Deep formatter
QUnit.dump.setParser('array', function (arr, stack) {
if (QUnit.config.maxDepth && QUnit.dump.depth > QUnit.config.maxDepth) {
return '[object Array]';
}
QUnit.dump.up();
let i = arr.length;
const ret = new Array(i);
while (i--) {
ret[i] = QUnit.dump.parse(arr[i], undefined, stack);
}
QUnit.dump.down();
return QUnit.dump.join('[', ret, ']');
// Output:
// 1. 'pre' text.
// 2. for each value:
// - line break and inner indentation
// - value as-is
// - comma (if not last)
// 3. line break and outer indentation (if any)
// 4. 'post' text
//
// [
// "foo",
// "bar"
// ]
});