'use strict';

var test = require('tape');
var traverse = require('../');

test('stringify', function (t) {
	var obj = [5, 6, -3, [7, 8, -2, 1], { f: 10, g: -13 }];

	var s = '';
	traverse(obj).forEach(function (node) {
		if (Array.isArray(node)) {
			this.before(function () { s += '['; });
			this.post(function (child) {
				if (!child.isLast) { s += ','; }
			});
			this.after(function () { s += ']'; });
		} else if (typeof node === 'object') {
			this.before(function () { s += '{'; });
			this.pre(function (x, key) {
				s += '"' + key + '":';
			});
			this.post(function (child) {
				if (!child.isLast) { s += ','; }
			});
			this.after(function () { s += '}'; });
		} else if (typeof node === 'function') {
			s += 'null';
		} else {
			s += node.toString();
		}
	});

	t.equal(s, JSON.stringify(obj));
	t.end();
});
