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