json.html revision a9322fe09a9ab78373155a607fc8b0d1b8f903e9
286N/A suite = new Y.Test.Suite("JSON Tests"),
286N/A "url": "http://www.JSON.org/",\
286N/A "\\/\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?" : "A key can be any string"\
var data = Y.JSON.parse('{"obj":{},"arr":[],"f":false,"t":true,"n":null,"int":12345,"fl":1.2345,"str":"String\\nwith\\tescapes"}');
Y.Assert.isObject(data);
var data = Y.JSON.parse(JSON_STRING);
Y.Assert.isArray(data);
Y.Assert.isString(data[0]);
Y.Assert.isObject(data[1]);
Y.Assert.isArray(data[1]["object with 1 member"]);
Y.Assert.areSame(1,data[1]["object with 1 member"].length);
Y.Assert.isNumber(data[4]);
Y.Assert.isBoolean(data[5]);
Y.Assert.isBoolean(data[6]);
Y.Assert.isNull(data[7]);
Y.Assert.areSame(1234567890,data[8].integer);
Y.Assert.areSame(-9876.543210,data[8].real);
Y.Assert.areSame(0.123456789e-12,data[8].e);
Y.Assert.areSame(1.234567890e+34,data[8].E);
Y.Assert.areSame(23456789012E66,data[8][""]);
Y.Assert.areSame(0,data[8].zero);
Y.Assert.areSame(1,data[8].one);
Y.Assert.areSame(" ",data[8].space);
Y.Assert.areSame('"',data[8].quote);
Y.Assert.areSame("\\",data[8].backslash);
Y.Assert.areSame("\b\f\n\r\t",data[8].controls);
Y.Assert.areSame("/ & \/",data[8].slash);
Y.Assert.areSame("abcdefghijklmnopqrstuvwxyz",data[8].alpha);
Y.Assert.areSame("ABCDEFGHIJKLMNOPQRSTUVWXYZ",data[8].ALPHA);
Y.Assert.areSame("0123456789",data[8].digit);
Y.Assert.areSame("digit",data[8]["0123456789"]);
Y.Assert.areSame(1234567890,data[8].integer);
Y.Assert.areSame("`1~!@#$%^&*()_+-={':[,]}|;.</>?",data[8].special);
Y.Assert.areSame("\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",data[8].hex);
Y.Assert.areSame(true,data[8]["true"]);
Y.Assert.areSame(false,data[8]["false"]);
Y.Assert.isNull(data[8]["null"]);
Y.Assert.isArray(data[8]["array"]);
Y.Assert.isObject(data[8]["object"]);
Y.Assert.areSame(" ",data[8]["# -- --> */"]);
Y.ArrayAssert.itemsAreSame([1,2,3,4,5,6,7],data[8][" s p a c e d "]);
Y.ArrayAssert.itemsAreSame([1,2,3,4,5,6,7],data[8].compact);
Y.Assert.areSame("{\"object with 1 member\":[\"array with 1 element\"]}",data[8].jsontext);
Y.Assert.areSame("" \u0022 %22 0x22 034 "",data[8].quotes);
Y.Assert.areSame("A key can be any string",data[8]["\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]);
Y.Assert.areSame(0.5,data[9]);
Y.Assert.areSame(98.6,data[10]);
Y.Assert.areSame(99.44,data[11]);
Y.Assert.areSame(1066,data[12]);
Y.Assert.areSame(1e1,data[13]);
Y.Assert.areSame(0.1e1,data[14]);
Y.Assert.areSame(1e-1,data[15]);
Y.Assert.areSame(1e00,data[16]);
Y.Assert.areSame(2e+00,data[17]);
Y.Assert.areSame(2e-00,data[18]);
Y.Assert.areSame("rosebud",data[19]);
Y.log("Parsed raw string, but should have failed.","warn","TestRunner");
Y.log("Parsed raw boolean, but should have failed.","warn","TestRunner");
Y.log("Parsed raw number, but should have failed.","warn","TestRunner");
Y.log("Parsed raw null, but should have failed.","warn","TestRunner");
Y.log("Parsed empty string, but should have failed.","warn","TestRunner");
Y.JSON.parse('{"fn":function(){}}');
Y.log("Parsed a function, but should have failed.","warn","TestRunner");
Y.JSON.parse('{"re":/abc/}');
Y.log("Parsed regular expression literal, but should have failed.","warn","TestRunner");
Y.JSON.parse('{"dt":new Date()}');
Y.JSON.parse('{"foo":bar}');
Y.log("Parsed unquoted non-native value, but should have failed.","warn","TestRunner");
Y.JSON.parse('{foo:1}');
Y.log("Parsed unquoted object key, but should have failed.","warn","TestRunner");
Y.JSON.parse('{"unclosed":"object"');
Y.log("Parsed unclosed object, but should have failed.","warn","TestRunner");
Y.JSON.parse('["unclosed array"');
Y.log("Parsed unclosed array, but should have failed.","warn","TestRunner");
Y.JSON.parse('{"extra":"comma",}');
Y.log("Parsed object with extra comma, but should have failed.","warn","TestRunner");
Y.JSON.parse('{"extra":"commas",,}');
Y.log("Parsed object with two extra commas, but should have failed.","warn","TestRunner");
Y.JSON.parse('["extra","comma",]');
Y.log("Parsed array with extra comma, but should have failed.","warn","TestRunner");
Y.JSON.parse('["extra","commas",,]');
Y.log("Parsed array with two extra commas, but should have failed.","warn","TestRunner");
suite.add(new Y.Test.Case({
Y.Assert.areSame('[true,false,null,-0.12345,"string",{"object with one member":["array with one element"]}]',
Y.JSON.stringify([true,false,null,-0.12345,"string",{"object with one member":["array with one element"]}]));
Y.Assert.areSame('{"five":"String with\\nnewline","four":null,"one":1,"six":{"nested":-0.12345},"three":false,"two":true}',
Y.JSON.stringify({one:1,two:true,three:false,four:null,five:"String with\nnewline",six : {nested:-0.12345}}));
Y.JSON.stringify({dt : new Date(1946,6,6)}));
suite.add(new Y.Test.Case({
Y.Assert.areSame('{}',
Y.JSON.stringify({foo:1,bar:[1,2,3],baz:true},[]));
suite.add(new Y.Test.Case({
Y.JSON.stringify(o,null,6));
Y.JSON.stringify(o,null,5));
Y.JSON.stringify(o,null,4));
Y.JSON.stringify(o,null,3));
Y.Assert.areSame('{}', Y.JSON.stringify(o,null,0));
suite.add(new Y.Test.Case({
var data = Y.JSON.parse(JSON_STRING, function (k,v) {
return -(Math.abs(v|0));
if (Y.Lang.isArray(v)) {
Y.Assert.areSame(-42, data[4]);
Y.Assert.areSame(-1234567890, data[8].integer);
Y.Assert.areSame(-9876, data[8].real);
Y.Assert.areSame(-1, data[8].one);
suite.add(new Y.Test.Case({
suite.add(new Y.Test.Case({
Y.Console.prototype.printLogEntry = function (m) {
m = Y.merge(
cat_class : this.getClassName('entry',m.category),
src_class : this.getClassName('entry',m.source)
var n = Y.Node.create(this.get('entryTemplate').replace(/\{([\w-]+)\}/g,
var yconsole = new Y.Console({
//yconsole.hideCategory('info');
yconsole.printLogEntry = function (m) {
if (m.category === 'section') {
} else if (m.category === "break") {
} else if (m.category === "info") {
return Y.Console.prototype.printLogEntry.call(this,m);
Y.log("Tests","section","TestRunner");
Y.Test.Runner.add(suite);