json.html revision a87b7acef05cfdc407cb96d1f42a0e533a699a80
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <link type="text/css" rel="stylesheet" href="/build/test/assets/test-console.css">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <style type="text/css" id="styleblock" class="highlight-ignore">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi font: normal 125%/1.4 Arial, sans-serif;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi .yui-skin-sam .yui-console .yui-console-content {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi font-size: 10px;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi .yui-skin-sam .yui-console-entry-pass .yui-console-entry-cat {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi background: #070;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi .yui-skin-sam .yui-console-entry-fail .yui-console-entry-cat {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi background: #700;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi .highlight-example {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi display: inline;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi width: 650px;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi .highlight-example h2 {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi display: none;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi .yui-skin-sam .yui-console-entry-time {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi display: none;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <h3>Form used for field value extraction, stringification</h3>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <input type="radio" name="radio" id="unchecked_radio" value="unchecked">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <input type="radio" name="radio" id="checked_radio" value="radio" checked="checked">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <input type="checkbox" name="box" id="unchecked_box" value="unchecked">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <input type="checkbox" name="box" id="checked_box" value="box" checked="checked">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <textarea id="textarea">textarea</textarea>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <option value="unselected">Unselected</option>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <option value="selected" selected="selected">Selected</option>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <select id="multiple_select" multiple="multiple" size="3">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <option value="unselected">Unselected</option>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <option value="selected" selected="selected">Selected</option>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <option value="selected also" selected="selected">Selected also</option>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <button id="button" type="button">content; no value</button>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <button id="button_with_value" type="button" value="button value">content and value</button>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <button id="button_submit" type="submit">content; no value</button>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <button id="button_submit_with_value" type="submit" value="submit button value">content and value</button>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <input type="button" id="input_button" value="input button">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <input type="submit" id="input_submit" value="input submit">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi <input type="image" id="input_image" src="404.png" value="input image">
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi<script type="text/javascript" src="/build/yui/yui.js"></script>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi<script type="text/javascript" src="/build/console/console-debug.js"></script>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi<script type="text/javascript" src="/build/json/json-debug.js"></script>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi<script type="text/javascript" src="/build/test/test-debug.js"></script>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi filter : 'debug',
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi useBrowserConsole : false,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi logInclude : { TestRunner: true, json: true, JSON: true }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}).use('test','console','json',function (Y) {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivar d = document,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi suite = new Y.Test.Suite("JSON Tests"),
d14abf155341d55053c76eeec58b787a456b753bRobert MustacchiJSON_STRING = '[\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "JSON Test Pattern pass1",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {"object with 1 member":["array with 1 element"]},\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "integer": 1234567890,\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "real": -9876.543210,\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "e": 0.123456789e-12,\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "E": 1.234567890E+34,\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "": 23456789012E66,\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "space": " ",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "quote": "\\"",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "backslash": "\\\\",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "controls": "\\b\\f\\n\\r\\t",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "slash": "/ & \\/",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "alpha": "abcdefghijklmnopqrstuvwxyz",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "digit": "0123456789",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "0123456789": "digit",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "special": "`1~!@#$%^&*()_+-={\':[,]}|;.</>?",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "hex": "\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "true": true,\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "false": false,\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "null": null,\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "array":[ ],\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "object":{ },\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "address": "50 St. James Street",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "comment": "// /* <!-- --",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "# -- --> */": " ",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi " s p a c e d " :[1,2 , 3\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "jsontext": "{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "quotes": "" \\u0022 %22 0x22 034 "",\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi "\\/\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?" : "A key can be any string"\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*****************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Tests begin here */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*****************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// wrapped in a function to allow repeating tests with native behavior disabled
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchifunction addTests() {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi name : "parse",
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnEmptyString : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnFunction : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnRegex : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnNew : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnUnquotedVal : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnUnquotedKey : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnUnclosedObject : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnUnclosedArray : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnExtraCommaInObject : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnDoubleExtraCommaInObject : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnExtraCommaInArray : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnDoubleExtraCommaInArray : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnMissingValue : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnCommaAfterClose : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnValueAfterClose : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnExtraClose : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnExpression : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnZeroPrefixedNumber : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnHex : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnIllegalBackslashEscape : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnMissingColon : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnDoubleColon : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnCommaInsteadOfColon : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnExtraClose : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnColonInsteadOfComma : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnSingleQuote : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnTabCharacter : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnLineBreakChar : true,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnMismatchedClose : true
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_emptyObject : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_emptyArray : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_JSONNatives : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // Note: backslashes are double escaped to emulate string returned from
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var data = Y.JSON.parse('{"obj":{},"arr":[],"f":false,"t":true,"n":null,"int":12345,"fl":1.2345,"str":"String\\nwith\\tescapes"}');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("String\nwith\tescapes",data.str);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_basics : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var data = Y.JSON.parse(JSON_STRING);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.isArray(data[1]["object with 1 member"]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(1,data[1]["object with 1 member"].length);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(1234567890,data[8].integer);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(-9876.543210,data[8].real);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(0.123456789e-12,data[8].e);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(1.234567890e+34,data[8].E);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(23456789012E66,data[8][""]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(0,data[8].zero);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(" ",data[8].space);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame('"',data[8].quote);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("\\",data[8].backslash);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("\b\f\n\r\t",data[8].controls);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("/ & \/",data[8].slash);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("abcdefghijklmnopqrstuvwxyz",data[8].alpha);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("ABCDEFGHIJKLMNOPQRSTUVWXYZ",data[8].ALPHA);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("0123456789",data[8].digit);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("digit",data[8]["0123456789"]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(1234567890,data[8].integer);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("`1~!@#$%^&*()_+-={':[,]}|;.</>?",data[8].special);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",data[8].hex);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(true,data[8]["true"]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(false,data[8]["false"]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.isNull(data[8]["null"]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.isArray(data[8]["array"]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.isObject(data[8]["object"]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("http://www.JSON.org/",data[8].url);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("// /* <!-- --",data[8].comment);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(" ",data[8]["# -- --> */"]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.ArrayAssert.itemsAreSame([1,2,3,4,5,6,7],data[8][" s p a c e d "]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.ArrayAssert.itemsAreSame([1,2,3,4,5,6,7],data[8].compact);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("{\"object with 1 member\":[\"array with 1 element\"]}",data[8].jsontext);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("" \u0022 %22 0x22 034 "",data[8].quotes);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("A key can be any string",data[8]["\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(99.44,data[11]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(0.1e1,data[14]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(2e+00,data[17]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(2e-00,data[18]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame("rosebud",data[19]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_nonObjectWrapper : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //Y.Assert.areSame('this is a string',Y.JSON.parse('"this is a string"'));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //Y.Assert.areSame(true,Y.JSON.parse('true'));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //Y.Assert.areSame(12345,Y.JSON.parse("12345"));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //Y.Assert.areSame(1.2345,Y.JSON.parse("1.2345"));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.Assert.areSame(null,Y.JSON.parse("null"));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnEmptyString : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed empty string, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnFunction : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('{"fn":function(){}}');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed a function, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnRegex : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('{"re":/abc/}');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed regular expression literal, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnNew : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('{"dt":new Date()}');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed <code>new Date()</code>, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnUnquotedVal : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('{"foo":bar}');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed unquoted non-native value, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnUnquotedKey : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed unquoted object key, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnUnclosedObject : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('{"unclosed":"object"');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed unclosed object, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnUnclosedArray : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('["unclosed array"');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed unclosed array, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnExtraCommaInObject : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // JS validator will allow, FF 3.1b2 native will allow. IE8 errors.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // eval will fail in IE6-7, but pass in others
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // Trailing commas are invalid, but not a security risk, so acceptable
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('{"extra":"comma",}');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed object with extra comma, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi throw new Error("Parsed object with extra comma, but should have failed.");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnDoubleExtraCommaInObject : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('{"extra":"commas",,}');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed object with two extra commas, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnExtraCommaInArray : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // Correct failure in IE6-8. FF accepts trailing commas without error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // Trailing commas are invalid, but not a security risk, so acceptable
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('["extra","comma",]');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed array with extra comma, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi throw new Error("Parsed array with extra comma, but should have failed.");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnDoubleExtraCommaInArray : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // Correct failure in IE6-8. FF accepts trailing commas without error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // Trailing commas are invalid, but not a security risk, so acceptable
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('["extra","commas",,]');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed array with two extra commas, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi throw new Error("Parsed array with two extra commas, but should have failed.");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnMissingValue : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // Correct failure in IE6-8. FF accepts trailing commas without error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // Trailing commas are invalid, but not a security risk, so acceptable
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var data = Y.JSON.parse('[,"<-- missing value"]');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed array with missing value ("+data[0]+"), but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi throw new Error("Parsed array with missing value ("+data[0]+"), but should have failed.");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnCommaAfterClose : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('["comma","after","close"],');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed comma after array close, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnValueAfterClose : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.JSON.parse('{"misplaced":"value"}" after close"');
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed string value after object close, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi test_failOnExtraClose : function () {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // parse should throw an error
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log("Parsed extra closing curly brace on object, but should have failed.","warn","TestRunner");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi Y.log(Y.JSON.stringify(data,null,4),"warn","TestLogger");
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('{"one":1,"two":true,"three":false,"four":null,"five":"String with\\nnewline","six":{"nested":-0.12345}}',
Y.JSON.stringify({one:1,two:true,three:false,four:null,five:"String with\nnewline",six : {nested:-0.12345}}));
o.recurse = o;
Y.JSON.stringify(o);
Y.JSON.stringify(o);
Y.JSON.stringify(o);
var d = new Date(Date.UTC(1946,6,6)),
function $(id) { return document.getElementById(id); }
Y.Assert.areSame('{'+
Y.JSON.stringify(data));
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({
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({
B.prototype = new A();
C.prototype = new B();
suite.add(new Y.Test.Case({
Y.JSON.stringify(10,function (k,v) {
} else if (t === 'string' && (this.toUpper)) {
delete this.toUpper;
return v.toUpperCase();
Y.Assert.areSame("{\n_\"num\": 2,\n_\"alpha\": \"ABC\",\n_\"obj\": {\n__\"nested_num\": 100,\n__\"alpha\": \"abc\"\n_},\n_\"arr\": [\n__2,\n__null,\n__4\n_]\n}",
} else if (t === 'string' && (this.toUpper)) {
delete this.toUpper;
return v.toUpperCase();
return typeof v === 'string' ? v.toUpperCase() : v;
var str = Y.JSON.stringify([new Date()], function (k,v) {
ref = Y.JSON.stringify(d);
Y.JSON.stringify({ dt: d, date_from_replacer: 1 },
suite.add(new Y.Test.Case({
var yconsole = new Y.Console({
//yconsole.hideCategory('info');
if (Y.JSON.useNativeParse) {
suite.add(new Y.Test.Case({
Y.JSON.useNativeParse = false;
Y.JSON.useNativeStringify = false;
Y.Test.Runner.add(suite);