blob: 3c193d7c49cf77c3899c4b846c99850f0349c82f [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/**
* @fileoverview Tests for stringify.js
*/
var test = require('tape');
var stringify = require('./../../src/vdl/stringify.js');
test('stableCircularStringify', function(t) {
var recursiveA = {
x: 5
};
recursiveA.y = recursiveA;
var recursiveB = {
q: 9
};
var recursiveC = {
p: 10
};
recursiveB.c = recursiveC;
recursiveC.b = recursiveB;
var recursiveDependent = {
rec: recursiveB
};
// A repeated identical object shouldn't be replaced by references.
var repeatedObject = {
a: 5
};
var tests = [
{
input: 1,
expected: '1'
},
{
input: 4.0,
expected: '4'
},
{
input: true,
expected: 'true'
},
{
input: 'ok',
expected: '"ok"'
},
{
input: {
'c': 'b',
'a': 'd'
},
expected: '{"a":"d","c":"b"}'
},
{
input: new Set([3, 5, 7]),
expected: '{3:true,5:true,7:true}'
},
{
input: new Set([[], [2], [2]]),
expected: '{[]:true,[2]:true,[2]:true}'
},
{
input: new Map([['a', 5], [3, 'we']]),
expected: '{3:"we","a":5}'
},
{
input: ['x', 'y'],
expected: '["x","y"]'
},
{
input: {
'c': 'b',
'b' : {
'x': 8
},
'a': 'd'
},
expected: '{"a":"d","b":{"x":8},"c":"b"}'
},
{
input: [
new Set([{}, null]),
new Map([
[[3, 1], 70],
['a', { 'ax': 5 }]
])
],
expected: '[{{}:true,null:true},{[3,1]:70,"a":{"ax":5}}]'
},
{
input: recursiveA,
expected: '{"x":5,"y":ID[0]}'
},
{
input: recursiveDependent,
expected: '{"rec":{"c":{"b":ID[1],"p":10},"q":9}}'
},
{
input: [
repeatedObject, repeatedObject
],
expected: '[{"a":5},{"a":5}]'
},
{
input: new Uint8Array([4, 10]),
expected: '[4,10]'
},
{
input: new Uint16Array([2560, 10]),
expected: '[2560,10]'
},
{
input: new Date(0),
expected: 'Wed Dec 31 1969 16:00:00 GMT-0800 (PST)'
}
];
for (var i = 0; i < tests.length; i++) {
var test = tests[i];
var resultStr = stringify(test.input);
t.equals(resultStr, test.expected);
}
t.end();
});