| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811 | 
							- if (!clarinet) { // node 
 
-   var clarinet  = require('../clarinet.js')
 
-     , _         = require('underscore')
 
-     ;
 
- }
 
- function assert(expr, msg) {
 
-   if (!expr) {
 
-     throw new Error(msg || 'failed');
 
-   }
 
- }
 
- var seps   = [undefined, /\t|\n|\r/, '']
 
-   , sep
 
-   , docs   =
 
-     { empty_array :
 
-       { text      : '[]'
 
-       , events    :
 
-         [ ['openarray'  , undefined]
 
-         , ['closearray' , undefined]
 
-         , ['end'        , undefined]
 
-         , ['ready'      , undefined]
 
-         ]
 
-       }
 
-     , just_slash :
 
-       { text      : '["\\\\"]'
 
-       , events    :
 
-         [ ['openarray'  , undefined]
 
-         , ["value"      , "\\"]
 
-         , ['closearray' , undefined]
 
-         , ['end'        , undefined]
 
-         , ['ready'      , undefined]
 
-         ]
 
-       }
 
-     , zero_byte    :
 
-       { text       : '{"foo": "\\u0000"}'
 
-       , events     :
 
-         [ ["openobject"  , "foo"]
 
-         , ["value"       , "\u0000"]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , empty_value  :
 
-       { text       : '{"foo": ""}'
 
-       , events     :
 
-         [ ["openobject"  , "foo"]
 
-         , ["value"       , ""]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , three_byte_utf8 :
 
-       { text          : '{"matzue": "松江", "asakusa": "浅草"}'
 
-       , events        :
 
-         [ ["openobject"  , "matzue"]
 
-         , ["value"       , "松江"]
 
-         , ["key"         , "asakusa"]
 
-         , ["value"       , "浅草"]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , four_byte_utf8 :
 
-       { text          : '{ "U+10ABCD": "" }'
 
-       , events        :
 
-         [ ["openobject"  , "U+10ABCD"]
 
-         , ["value"       , ""]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , bulgarian    :
 
-       { text       : '["Да Му Еба Майката"]'
 
-       , events     :
 
-         [ ["openarray"   , undefined]
 
-         , ["value"       , "Да Му Еба Майката"]
 
-         , ["closearray"  , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , codepoints_from_unicodes  :
 
-       { text       : '["\\u004d\\u0430\\u4e8c\\ud800\\udf02"]'
 
-       , events     :
 
-         [ ["openarray"   , undefined]
 
-         , ["value"       , "\u004d\u0430\u4e8c\ud800\udf02"]
 
-         , ["closearray"  , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , empty_object :
 
-       { text       : '{}'
 
-       , events     :
 
-         [ ["openobject"  , undefined]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , foobar   :
 
-       { text   : '{"foo": "bar"}'
 
-       , events :
 
-         [ ["openobject"  , "foo"]
 
-         , ["value"       , "bar"]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , as_is    :
 
-       { text   : "{\"foo\": \"its \\\"as is\\\", \\\"yeah\", \"bar\": false}"
 
-       , events :
 
-         [ ["openobject"  , "foo"]
 
-         , ["value"       , 'its "as is", "yeah']
 
-         , ["key"         , "bar"]
 
-         , ["value"       , false]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , array    :
 
-       { text   : '["one", "two"]'
 
-       , events : 
 
-         [ ['openarray'  , undefined]
 
-         , ['value'      , 'one']
 
-         , ['value'      , 'two']
 
-         , ['closearray' , undefined]
 
-         , ['end'        , undefined]
 
-         , ['ready'      , undefined]
 
-         ]
 
-       }
 
-     , array_fu :
 
-       { text   : '["foo", "bar", "baz",true,false,null,{"key":"value"},' +
 
-                  '[null,null,null,[]]," \\\\ "]'
 
-       , events : 
 
-         [ ['openarray'   , undefined]
 
-         , ['value'       , 'foo']
 
-         , ['value'       , 'bar']
 
-         , ['value'       , 'baz']
 
-         , ['value'       , true]
 
-         , ['value'       , false]
 
-         , ['value'       , null]
 
-         , ['openobject'  , 'key']
 
-         , ['value'       , "value"]
 
-         , ["closeobject" , undefined]
 
-         , ['openarray'   , undefined]
 
-         , ['value'       , null]
 
-         , ['value'       , null]
 
-         , ['value'       , null]
 
-         , ['openarray'   , undefined]
 
-         , ['closearray'  , undefined]
 
-         , ['closearray'  , undefined]
 
-         , ['value'       , " \\ "]
 
-         , ['closearray'  , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , simple_exp    :
 
-       { text   : '[10e-01]'
 
-       , events : 
 
-         [ ['openarray'  , undefined]
 
-         , ['value'      , 10e-01]
 
-         , ['closearray' , undefined]
 
-         , ['end'        , undefined]
 
-         , ['ready'      , undefined]
 
-         ]
 
-       }
 
-     , nested   :
 
-       { text   : '{"a":{"b":"c"}}'
 
-       , events :
 
-         [ ["openobject"  , "a"]
 
-         , ["openobject"  , "b"]
 
-         , ["value"       , "c"]
 
-         , ["closeobject" , undefined]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , nested_array  :
 
-       { text        : '{"a":["b", "c"]}'
 
-       , events      :
 
-           [ ["openobject"  , "a"]
 
-           , ['openarray'   , undefined]
 
-           , ['value'       , 'b']
 
-           , ['value'       , 'c']
 
-           , ['closearray'  , undefined]
 
-           , ["closeobject" , undefined]
 
-           , ['end'         , undefined]
 
-           , ['ready'       , undefined]
 
-           ]
 
-       }
 
-     , array_of_objs :
 
-       { text        : '[{"a":"b"}, {"c":"d"}]'
 
-       , events      :
 
-         [ ['openarray'   , undefined]
 
-         , ["openobject"  , 'a']
 
-         , ['value'       , 'b']
 
-         , ["closeobject" , undefined]
 
-         , ["openobject"  , 'c']
 
-         , ['value'       , 'd']
 
-         , ["closeobject" , undefined]
 
-         , ['closearray'  , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , two_keys  :
 
-       { text    : '{"a": "b", "c": "d"}'
 
-       , events  :
 
-         [ ["openobject"  , "a"]
 
-         , ["value"       , "b"]
 
-         , ["key"         , "c"]
 
-         , ["value"       , "d"]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , key_true  :
 
-       { text    : '{"foo": true, "bar": false, "baz": null}'
 
-       , events  :
 
-         [ ["openobject"  , "foo"]
 
-         , ["value"       , true]
 
-         , ["key"         , "bar"]
 
-         , ["value"       , false]
 
-         , ["key"         , "baz"]
 
-         , ["value"       , null]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , obj_strange_strings  :
 
-       { text               : 
 
-         '{"foo": "bar and all\\\"", "bar": "its \\\"nice\\\""}'
 
-       , events             :
 
-         [ ["openobject"    , "foo"]
 
-         , ["value"         , 'bar and all"']
 
-         , ["key"           , "bar"]
 
-         , ["value"         , 'its "nice"']
 
-         , ["closeobject"   , undefined]
 
-         , ['end'           , undefined]
 
-         , ['ready'         , undefined]
 
-         ]
 
-       } 
 
-     , bad_foo_bar         :
 
-       { text              : 
 
-           '["foo", "bar"'
 
-        , events           :
 
-          [ ["openarray"   , undefined]
 
-          , ["value"       , 'foo']
 
-          , ["value"       , 'bar']
 
-          , ['error'       , undefined]
 
-          , ['end'         , undefined]
 
-          , ['ready'       , undefined]
 
-          ]
 
-        }
 
-     , string_invalid_escape:
 
-       { text             : 
 
-           '["and you can\'t escape thi\s"]'
 
-        , events          :
 
-          [ ["openarray"   , undefined]
 
-          , ["value"       , 'and you can\'t escape this']
 
-          , ["closearray"  , undefined]
 
-          , ['end'         , undefined]
 
-          , ['ready'       , undefined]
 
-          ]
 
-        }
 
-     , nuts_and_bolts :
 
-       { text         : '{"boolean, true": true' +
 
-                        ', "boolean, false": false' +
 
-                        ', "null": null }'
 
-        , events          :
 
-          [ ["openobject"   , "boolean, true"]
 
-          , ["value"        , true]
 
-          , ["key"          , "boolean, false"]
 
-          , ["value"        , false]
 
-          , ["key"          , "null"]
 
-          , ["value"        , null]
 
-          , ["closeobject"  , undefined]
 
-          , ['end'          , undefined]
 
-          , ['ready'        , undefined]
 
-          ]
 
-       }
 
-     , frekin_string:
 
-       { text    : '["\\\\\\"\\"a\\""]'
 
-       , events  :
 
-         [ ["openarray"   , undefined]
 
-         , ["value"       , '\\\"\"a\"']
 
-         , ["closearray"  , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , array_of_string_insanity  :
 
-       { text    : '["\\\"and this string has an escape at the beginning",' +
 
-                   '"and this string has no escapes"]'
 
-       , events  :
 
-         [ ["openarray"   , undefined]
 
-         , ["value"       , "\"and this string has an escape at the beginning"]
 
-         , ["value"       , "and this string has no escapes"]
 
-         , ["closearray"  , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , non_utf8           :
 
-       { text   : 
 
-         '{"CoreletAPIVersion":2,"CoreletType":"standalone",' +
 
-         '"documentation":"A corelet that provides the capability to upload' +
 
-         ' a folder’s contents into a user’s locker.","functions":[' + 
 
-         '{"documentation":"Displays a dialog box that allows user to ' +
 
-         'select a folder on the local system.","name":' +
 
-         '"ShowBrowseDialog","parameters":[{"documentation":"The ' +
 
-         'callback function for results.","name":"callback","required":' +
 
-         'true,"type":"callback"}]},{"documentation":"Uploads all mp3 files' +
 
-         ' in the folder provided.","name":"UploadFolder","parameters":' +
 
-         '[{"documentation":"The path to upload mp3 files from."' +
 
-         ',"name":"path","required":true,"type":"string"},{"documentation":' +
 
-         ' "The callback function for progress.","name":"callback",' +
 
-         '"required":true,"type":"callback"}]},{"documentation":"Returns' +
 
-         ' the server name to the current locker service.",' +
 
-         '"name":"GetLockerService","parameters":[]},{"documentation":' +
 
-         '"Changes the name of the locker service.","name":"SetLockerSer' +
 
-         'vice","parameters":[{"documentation":"The value of the locker' +
 
-         ' service to set active.","name":"LockerService","required":true' +
 
-         ',"type":"string"}]},{"documentation":"Downloads locker files to' +
 
-         ' the suggested folder.","name":"DownloadFile","parameters":[{"' +
 
-         'documentation":"The origin path of the locker file.",' +
 
-         '"name":"path","required":true,"type":"string"},{"documentation"' +
 
-         ':"The Window destination path of the locker file.",' +
 
-         '"name":"destination","required":true,"type":"integer"},{"docum' +
 
-         'entation":"The callback function for progress.","name":' +
 
-         '"callback","required":true,"type":"callback"}]}],' +
 
-         '"name":"LockerUploader","version":{"major":0,' +
 
-         '"micro":1,"minor":0},"versionString":"0.0.1"}'
 
-       , events : 
 
-         [ [ "openobject"  , "CoreletAPIVersion"]
 
-         , [ "value"       , 2 ]
 
-         , [ "key"         , "CoreletType"]
 
-         , [ "value"       , "standalone" ]
 
-         , [ "key"         , "documentation"]
 
-         , [ "value"       , "A corelet that provides the capability to upload a folder’s contents into a user’s locker."]
 
-         , ["key"          , "functions"]
 
-         , [ "openarray"   , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "Displays a dialog box that allows user to select a folder on the local system."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "ShowBrowseDialog"]
 
-         , [ "key"         , "parameters"]
 
-         , [ "openarray"   , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "The callback function for results."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "callback"]
 
-         , [ "key"         , "required"]
 
-         , [ "value"       , true]
 
-         , [ "key"         , "type"]
 
-         , [ "value"       , "callback"]
 
-         , [ "closeobject" , undefined]
 
-         , [ "closearray"  , undefined]
 
-         , [ "closeobject" , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "Uploads all mp3 files in the folder provided."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "UploadFolder"]
 
-         , [ "key"         , "parameters"]
 
-         , [ "openarray"   , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "The path to upload mp3 files from."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "path"]
 
-         , [ "key"         , "required"]
 
-         , [ "value"       , true]
 
-         , [ "key"         , "type"]
 
-         , [ "value"       , "string"]
 
-         , [ "closeobject" , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "The callback function for progress."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "callback"]
 
-         , [ "key"         , "required"]
 
-         , [ "value"       , true ]
 
-         , [ "key"         , "type"]
 
-         , [ "value"       , "callback"]
 
-         , [ "closeobject" , undefined]
 
-         , [ "closearray"  , undefined]
 
-         , [ "closeobject" , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "Returns the server name to the current locker service."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "GetLockerService"]
 
-         , [ "key"         , "parameters"]
 
-         , [ "openarray"   , undefined]
 
-         , [ "closearray"  , undefined]
 
-         , [ "closeobject" , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "Changes the name of the locker service."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "SetLockerService"]
 
-         , [ "key"         , "parameters"]
 
-         , [ "openarray"   , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "The value of the locker service to set active."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "LockerService" ]
 
-         , [ "key"         , "required" ]
 
-         , [ "value"       , true]
 
-         , [ "key"         , "type"]
 
-         , [ "value"       , "string"]
 
-         , [ "closeobject" , undefined]
 
-         , [ "closearray"  , undefined]
 
-         , [ "closeobject" , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "Downloads locker files to the suggested folder."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "DownloadFile"]
 
-         , [ "key"         , "parameters"]
 
-         , [ "openarray"   , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "The origin path of the locker file."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "path"]
 
-         , [ "key"         , "required"]
 
-         , [ "value"       , true]
 
-         , [ "key"         , "type"]
 
-         , [ "value"       , "string"]
 
-         , [ "closeobject" , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "The Window destination path of the locker file."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "destination"]
 
-         , [ "key"         , "required"]
 
-         , [ "value"       , true]
 
-         , [ "key"         , "type"]
 
-         , [ "value"       , "integer"]
 
-         , [ "closeobject" , undefined]
 
-         , [ "openobject"  , "documentation"]
 
-         , [ "value"       , "The callback function for progress."]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "callback"]
 
-         , [ "key"         , "required"]
 
-         , [ "value"       , true]
 
-         , [ "key"         , "type"]
 
-         , [ "value"       , "callback"]
 
-         , [ "closeobject" , undefined]
 
-         , [ "closearray"  , undefined]
 
-         , [ "closeobject" , undefined]
 
-         , [ "closearray"  , undefined]
 
-         , [ "key"         , "name"]
 
-         , [ "value"       , "LockerUploader"]
 
-         , [ "key"         , "version"]
 
-         , [ "openobject"  , "major"]
 
-         , [ "value"       , 0]
 
-         , [ "key"         , "micro"]
 
-         , [ "value"       , 1]
 
-         , [ "key"         , "minor"]
 
-         , [ "value"       , 0]
 
-         , [ "closeobject" , undefined]
 
-         , [ "key"         , "versionString"]
 
-         , [ "value"       , "0.0.1"]
 
-         , [ "closeobject" , undefined]
 
-         , [ "end"         , undefined]
 
-         , [ "ready"       , undefined]
 
-         ]
 
-       }
 
-     , array_of_arrays    :
 
-       { text   : '[[[["foo"]]]]'
 
-       , events : 
 
-         [ ['openarray'  , undefined]
 
-         , ['openarray'  , undefined]
 
-         , ['openarray'  , undefined]
 
-         , ['openarray'  , undefined]
 
-         , ["value"      , "foo"]
 
-         , ['closearray' , undefined]
 
-         , ['closearray' , undefined]
 
-         , ['closearray' , undefined]
 
-         , ['closearray' , undefined]
 
-         , ['end'        , undefined]
 
-         , ['ready'      , undefined]
 
-         ]
 
-       }
 
-     , low_overflow :
 
-       { text       : '[-9223372036854775808]',
 
-         chunks: [
 
-           '[-92233720', '36854775808]'
 
-         ]
 
-       , events     :
 
-         [ ['openarray'  , undefined]
 
-         , ["value"      , -9223372036854775808]
 
-         , ['closearray' , undefined]
 
-         , ['end'        , undefined]
 
-         , ['ready'      , undefined]
 
-         ]
 
-       }
 
-     , high_overflow :
 
-       { text       : '[9223372036854775808]'
 
-       , events     : 
 
-         [ ['openarray'  , undefined]
 
-         , ["value"      , 9223372036854775808]
 
-         , ['closearray' , undefined]
 
-         , ['end'        , undefined]
 
-         , ['ready'      , undefined]
 
-         ]
 
-       }
 
-     , floats       :
 
-       { text       : '[0.1e2, 1e1, 3.141569, 10000000000000e-10]'
 
-       , events     :
 
-         [ ['openarray'  , undefined]
 
-         , ["value"      , 0.1e2]
 
-         , ["value"      , 1e1]
 
-         , ["value"      , 3.141569]
 
-         , ["value"      , 10000000000000e-10]
 
-         , ['closearray' , undefined]
 
-         , ['end'        , undefined]
 
-         , ['ready'      , undefined]
 
-         ]
 
-       }
 
-     , numbers_game :
 
-       { text       : '[1,0,-1,-0.3,0.3,1343.32,3345,3.1e124,'+
 
-                      ' 9223372036854775807,-9223372036854775807,0.1e2, ' +
 
-                      '1e1, 3.141569, 10000000000000e-10,' +
 
-                      '0.00011999999999999999, 6E-06, 6E-06, 1E-06, 1E-06,'+
 
-                      '"2009-10-20@20:38:21.539575", 9223372036854775808,' +
 
-                      '123456789,-123456789,' +
 
-                      '2147483647, -2147483647]'
 
-       , events     :
 
-         [ ['openarray'  , undefined]
 
-         , ["value"      , 1]
 
-         , ["value"      , 0]
 
-         , ["value"      , -1]
 
-         , ["value"      , -0.3]
 
-         , ["value"      , 0.3]
 
-         , ["value"      , 1343.32]
 
-         , ["value"      , 3345]
 
-         , ["value"      , 3.1e124]
 
-         , ["value"      , 9223372036854775807]
 
-         , ["value"      , -9223372036854775807]
 
-         , ["value"      , 0.1e2]
 
-         , ["value"      , 1e1]
 
-         , ["value"      , 3.141569]
 
-         , ["value"      , 10000000000000e-10]
 
-         , ["value"      , 0.00011999999999999999]
 
-         , ["value"      , 6E-06]
 
-         , ["value"      , 6E-06]
 
-         , ["value"      , 1E-06]
 
-         , ["value"      , 1E-06]
 
-         , ["value"      , "2009-10-20@20:38:21.539575"]
 
-         , ["value"      , 9223372036854775808]
 
-         , ["value"      , 123456789]
 
-         , ["value"      , -123456789]
 
-         , ["value"      , 2147483647]
 
-         , ["value"      , -2147483647]
 
-         , ['closearray' , undefined]
 
-         , ['end'        , undefined]
 
-         , ['ready'      , undefined]
 
-         ]
 
-       }
 
-     , johnsmith  :
 
-       { text     : '{ "firstName": "John", "lastName" : "Smith", "age" : ' +
 
-                    '25, "address" : { "streetAddress": "21 2nd Street", ' + 
 
-                    '"city" : "New York", "state" : "NY", "postalCode" : ' +
 
-                    ' "10021" }, "phoneNumber": [ { "type" : "home", ' + 
 
-                    '"number": "212 555-1234" }, { "type" : "fax", ' + 
 
-                    '"number": "646 555-4567" } ] }'
 
-       , events   :
 
-         [ ["openobject"   , "firstName"]
 
-         , ["value"        , "John"]
 
-         , ["key"          , "lastName"]
 
-         , ["value"        , "Smith"]
 
-         , ["key"          , "age"]
 
-         , ["value"        , 25]
 
-         , ["key"          , "address"]
 
-         , ["openobject"   , "streetAddress"]
 
-         , ["value"        , "21 2nd Street"]
 
-         , ["key"          , "city"]
 
-         , ["value"        , "New York"]
 
-         , ["key"          , "state"]
 
-         , ["value"        , "NY"]
 
-         , ["key"          , "postalCode"]
 
-         , ["value"        , "10021"]
 
-         , ["closeobject"  , undefined]
 
-         , ["key"          , "phoneNumber"]
 
-         , ["openarray"    , undefined]
 
-         , ["openobject"   , "type"]
 
-         , ["value"        , "home"]
 
-         , ["key"          , "number"]
 
-         , ["value"        , "212 555-1234"]
 
-         , ["closeobject"  , undefined]
 
-         , ["openobject"   , "type"]
 
-         , ["value"        , "fax"]
 
-         , ["key"          , "number"]
 
-         , ["value"        , "646 555-4567"]
 
-         , ["closeobject"  , undefined]
 
-         , ["closearray"   , undefined]
 
-         , ["closeobject"  , undefined]
 
-         ]
 
-       }
 
-     , array_null :
 
-       { text     : '[null,false,true]',
 
-         chunks   : ['[nu', 'll,', 'fa', 'lse,', 'tr', 'ue]']
 
-       , events   :
 
-         [ ["openarray"   , undefined]
 
-         , ["value"       , null]
 
-         , ["value"       , false]
 
-         , ["value"       , true]
 
-         , ["closearray"  , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , empty_array_comma :
 
-       { text    : '{"a":[],"c": {}, "b": true}'
 
-       , events  :
 
-         [ ["openobject"  , "a"]
 
-         , ["openarray"   , undefined]
 
-         , ["closearray"  , undefined]
 
-         , ["key"         , "c"]
 
-         , ["openobject"  , undefined]
 
-         , ["closeobject" , undefined]
 
-         , ["key"         , "b"]
 
-         , ["value"       , true]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     , incomplete_json_terminates_ending_in_number :
 
-       { text    : '[[1,2,3],[4,5'
 
-       , events  :
 
-         [ ["openarray"   , undefined]
 
-         , ["openarray"   , undefined]
 
-         , ["value"       , 1]
 
-         , ["value"       , 2]
 
-         , ["value"       , 3]
 
-         , ["closearray"  , undefined]
 
-         , ["openarray"   , undefined]
 
-         , ["value"       , 4]    
 
-         , ["error"       , undefined]    
 
-         ]
 
-       }
 
-     , incomplete_json_terminates_ending_in_comma :
 
-       { text    : '[[1,2,3],'
 
-       , events  :
 
-         [ ["openarray"   , undefined]
 
-         , ["openarray"   , undefined]
 
-         , ["value"       , 1]
 
-         , ["value"       , 2]
 
-         , ["value"       , 3]
 
-         , ["closearray"  , undefined]
 
-         , ["error"       , undefined]
 
-         ]
 
-       }
 
-     , json_org  :
 
-       { text    : 
 
-           ('{\r\n' +
 
-           '          "glossary": {\n' +
 
-           '              "title": "example glossary",\n\r' +
 
-           '      \t\t"GlossDiv": {\r\n' +
 
-           '                  "title": "S",\r\n' +
 
-           '      \t\t\t"GlossList": {\r\n' +
 
-           '                      "GlossEntry": {\r\n' +
 
-           '                          "ID": "SGML",\r\n' +
 
-           '      \t\t\t\t\t"SortAs": "SGML",\r\n' +
 
-           '      \t\t\t\t\t"GlossTerm": "Standard Generalized ' + 
 
-           'Markup Language",\r\n' +
 
-           '      \t\t\t\t\t"Acronym": "SGML",\r\n' +
 
-           '      \t\t\t\t\t"Abbrev": "ISO 8879:1986",\r\n' +
 
-           '      \t\t\t\t\t"GlossDef": {\r\n' +
 
-           '                              "para": "A meta-markup language,' +
 
-           ' used to create markup languages such as DocBook.",\r\n' +
 
-           '      \t\t\t\t\t\t"GlossSeeAlso": ["GML", "XML"]\r\n' +
 
-           '                          },\r\n' +
 
-           '      \t\t\t\t\t"GlossSee": "markup"\r\n' +
 
-           '                      }\r\n' +
 
-           '                  }\r\n' +
 
-           '              }\r\n' +
 
-           '          }\r\n' +
 
-           '      }\r\n')
 
-       , events  :
 
-         [ ["openobject"  , "glossary"]
 
-         , ["openobject"  , "title"]
 
-         , ['value'       , "example glossary"]
 
-         , ["key"         , "GlossDiv"]
 
-         , ["openobject"  , "title"]
 
-         , ['value'       , "S"]
 
-         , ["key"         , "GlossList"]
 
-         , ["openobject"  , "GlossEntry"]
 
-         , ["openobject"  , "ID"]
 
-         , ['value'       , "SGML"]
 
-         , ["key"         , "SortAs"]
 
-         , ['value'       , "SGML"]
 
-         , ["key"         , "GlossTerm"]
 
-         , ['value'       , "Standard Generalized Markup Language"]
 
-         , ["key"         , "Acronym"]
 
-         , ['value'       , "SGML"]
 
-         , ["key"         , "Abbrev"]
 
-         , ['value'       , 'ISO 8879:1986']
 
-         , ["key"         , "GlossDef"]
 
-         , ["openobject"  , "para"]
 
-         , ['value'       , 'A meta-markup language, used to create markup languages such as DocBook.']
 
-         , ["key"         , "GlossSeeAlso"]
 
-         , ['openarray'   , undefined]
 
-         , ['value'       , "GML"]
 
-         , ['value'       , "XML"]
 
-         , ['closearray'  , undefined]
 
-         , ["closeobject" , undefined]
 
-         , ["key"         , "GlossSee"]
 
-         , ["value"       , "markup"]
 
-         , ["closeobject" , undefined]
 
-         , ["closeobject" , undefined]
 
-         , ["closeobject" , undefined]
 
-         , ["closeobject" , undefined]
 
-         , ["closeobject" , undefined]
 
-         , ['end'         , undefined]
 
-         , ['ready'       , undefined]
 
-         ]
 
-       }
 
-     ,
 
-     string_chunk_span :
 
-       {
 
-         text: '["L\'Oréal", "Lé\'Oral", "éalL\'Or"]',
 
-         chunks: [
 
-           '["L\'OrÃ',
 
-           '©al", "Lé\'Oral", "éalL\'Or"]'
 
-         ],
 
-         events: [
 
-           ['openarray', undefined],
 
-           ['value', 'L\'Oréal'],
 
-           ['value', 'Lé\'Oral'],
 
-           ['value', 'éalL\'Or'],
 
-           ['closearray', undefined]
 
-         ]
 
-       }
 
-     };
 
- function generic(key, prechunked, sep) {
 
-   return function () {
 
-     var doc        = docs[key].text
 
-       , events     = docs[key].events
 
-       , l          = typeof FastList === 'function' ? new FastList() : []
 
-       , doc_chunks = !prechunked ? doc.split(sep) : docs[key].chunks
 
-       , parser     = clarinet.parser()
 
-       , i          = 0
 
-       , current
 
-       , env = process && process.env ? process.env : window
 
-       , record     = []
 
-       ;
 
-     _.each(events, function(event_pair) { 
 
-       l.push(event_pair); 
 
-     });
 
-     _.each(clarinet.EVENTS, function(event) {
 
-       parser["on"+event] = function (value) {
 
-         if(env.CRECORD) { // for really big json we dont want to type all
 
-           record.push([event,value]);
 
-           if(event === 'end') console.log(JSON.stringify(record, null, 2));
 
-         } else {
 
-           current = l.shift();
 
-           ++i;
 
-           if(!(current && current[0])) { return; }
 
-           assert(current[0] === event, 
 
-             '[ln' + i + '] event: [' + current[0] + '] got: [' + event +']');
 
-           if(event!== 'error')
 
-             assert(current[1] === value, 
 
-               '[ln' + i + '] value: [' + current[1] + '] got: [' + value +']');
 
-         }
 
-       };
 
-     });
 
-     _.each(doc_chunks, function(chunk) { 
 
-      parser.write(chunk);
 
-     });
 
-     parser.end();
 
-   };
 
- }
 
- describe('clarinet', function(){
 
-   describe('#generic', function() {
 
-     for (var key in docs) {
 
-       if (docs.hasOwnProperty(key)) {
 
-         // undefined means no split
 
-         // /\t|\n|\r| / means on whitespace
 
-         // '' means on every char
 
-         for(var i in seps) {
 
-           sep = seps[i];
 
-           it('[' + key + '] should be able to parse -> ' + sep,
 
-             generic(key, false, sep));
 
-         }
 
-       }
 
-     }
 
-   });
 
-   describe('#pre-chunked', function() {
 
-     for (var key in docs) {
 
-       if (docs.hasOwnProperty(key)) {
 
-         if (!docs[key].chunks) continue;
 
-         it('[' + key + '] should be able to parse pre-chunked', generic(key, true));
 
-       }
 
-     }
 
-   });
 
- });
 
 
  |