// 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();
});
