Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jju/test/test_document.js')
-rw-r--r--node_modules/jju/test/test_document.js214
1 files changed, 214 insertions, 0 deletions
diff --git a/node_modules/jju/test/test_document.js b/node_modules/jju/test/test_document.js
new file mode 100644
index 000000000..5f1ef2aaf
--- /dev/null
+++ b/node_modules/jju/test/test_document.js
@@ -0,0 +1,214 @@
+var assert = require('assert')
+var create = require('../lib/document').Document
+var jju = require('..')
+
+var str = '{ x\r\n:\n1, y: {"..z.": 123, t: null, s:"123", a:[ 1,2,{x:3},] }}\n'
+var d = create(str)
+assert.equal(d + '', str)
+assert.deepEqual(d.get(''), {x:1,y:{'..z.':123,t:null,s:'123',a:[1,2,{x:3}]}})
+assert.deepEqual(d.get('x'), 1)
+assert.deepEqual(d.get('x.x'), undefined)
+assert.deepEqual(d.get('x.x.x.x'), undefined)
+assert.strictEqual(d.get('y.x'), undefined)
+assert.deepEqual(d.get('y.s'), '123')
+assert.strictEqual(d.get('y.t'), null)
+assert.strictEqual(d.get('y.t.x'), undefined)
+assert.equal(d.has(''), true)
+assert.equal(d.has('x'), true)
+assert.equal(d.has('x.x'), false)
+assert.equal(d.has('x.x.x.x'), false)
+assert.equal(d.has('y.x'), false)
+assert.equal(d.has('y'), true)
+assert.equal(d.has('y.s'), true)
+assert.equal(d.has('y.t'), true)
+assert.equal(d.has('a'), false)
+
+// arrays
+assert.deepEqual(d.get('y.a'), [1,2,{x:3}])
+assert.deepEqual(d.get('y.a.0'), 1)
+assert.deepEqual(d.get('y.a.2.x'), 3)
+assert.deepEqual(d.get('y.a.10'), undefined)
+assert.deepEqual(d.has('y.a.0'), true)
+assert.deepEqual(d.has('y.a.10'), false)
+assert.deepEqual(d.get('y.a.2'), {x:3})
+assert.deepEqual(d.get('y.a.-1'), undefined)
+
+// controversial
+assert.strictEqual(d.get('y.s.0'), undefined)
+assert.equal(d.has('y.s.0'), false)
+
+// paths
+assert.deepEqual(d.get([]), {x:1,y:{'..z.':123,t:null,s:'123',a:[1,2,{x:3}]}})
+assert.strictEqual(d.has([]), true)
+assert.strictEqual(d.get(['y','..z.']), 123)
+assert.strictEqual(d.has(['y','..z.']), true)
+assert.deepEqual(d.get(['y','a',2,'x']), 3)
+assert.deepEqual(create('[1]').set(0, 4).get(''), [4])
+assert.deepEqual(create('[1]').set(1, 4).get(''), [1,4])
+assert.deepEqual(create('[1]').has(0), true)
+assert.deepEqual(create('[1]').has(1), false)
+assert.deepEqual(create('[1]').get(0), 1)
+
+// invalid paths
+assert.throws(function() { create('[1]').set(null, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set({}, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set(/./, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set(function(){}, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set(false, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set(undefined, 4) }, /invalid path type/i)
+
+// set root
+assert.strictEqual(create(str).set('', 4).get(''), 4)
+assert.strictEqual(create(str).set('', null).get(''), null)
+assert.strictEqual(create(str).set('', {x:4}).get('x'), 4)
+assert.deepEqual(create(str).set('', [1,2,3]).get(''), [1,2,3])
+assert.strictEqual(create('1').set('', 4).get(''), 4)
+assert.strictEqual(create('null').set('', 4).get(''), 4)
+assert.strictEqual(create('[]').set('', 4).get(''), 4)
+assert.strictEqual(create('{}').set('', 4).get(''), 4)
+
+// set 1st level
+assert.deepEqual(create('{}').set('x', 4).get('x'), 4)
+assert.deepEqual(create('{a:{b:[]}}').set('a.b.0', 4).get('a'), {b:[4]})
+//assert.deepEqual(create('1').set('x', 4).get('x'), 4)
+//assert.deepEqual(create('null').set('x', 4).get('x'), 4)
+
+// array: boundaries
+assert.strictEqual(create('[]').set('0', 4).get('0'), 4)
+assert.strictEqual(create('[1,2,3]').set('2', 4).get('2'), 4)
+assert.strictEqual(create('[1,2,3]').set('3', 4).get('3'), 4)
+
+// various error cases
+assert.throws(function() { create('1').set('x', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('null').set('x', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('[]').set('x', 4) }, /set key .* of an array/)
+assert.throws(function() { create('""').set('x', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('{}').set('x.x.x', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('1').set('1', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('null').set('1', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('""').set('1', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('[]').set('-1', 4) }, /set key .* of an array/)
+assert.throws(function() { create('[]').set('1', 4) }, /set key .* out of bounds/)
+assert.throws(function() { create('[1,2,3]').set('4', 4) }, /set key .* out of bounds/)
+assert.throws(function() { create('{a:{b:[]}}').set('a.b.x', 4) }, /set key .* of an array/)
+
+// unsetting stuff
+assert.throws(function() { create('[]').unset('') }, /can't remove root document/)
+
+// arrays: handling spaces correctly
+assert.equal(create("[]").set(0,{})+"", '[{}]')
+assert.equal(create("[0]").set(1,{})+"", '[0,{}]')
+assert.equal(create("[0,]").set(1,{})+"", '[0,{},]')
+assert.equal(create("[ ]").set(0,{})+"", '[{} ]')
+assert.equal(create("[ 0 , ]").set(1,{})+"", '[ 0 , {}, ]')
+assert.equal(create("[ 0 ]").set(1,{})+"", '[ 0, {} ]')
+assert.equal(create("{}").set('y',{})+"", '{"y":{}}')
+assert.equal(create("{x:1}").set('y',{})+"", '{x:1,y:{}}')
+assert.equal(create("{x:1,}").set('y',{})+"", '{x:1,y:{},}')
+assert.equal(create("{ }").set('y',{})+"", '{"y":{} }')
+assert.equal(create("{ x:1 , }").set('y',{})+"", '{ x:1 , y:{}, }')
+assert.equal(create("{ x:1 }").set('y',{})+"", '{ x:1, y:{} }')
+
+// deleting elements
+assert.throws(function() { create('[]').unset('0') }, /unset key .* out of bounds/)
+assert.throws(function() { create('[1,2]').unset('2') }, /unset key .* out of bounds/)
+assert.throws(function() { create('[1,2,3]').unset('0') }, /in the middle of an array/)
+
+// CommonJS assert spec is "awesome"
+assert.deepEqual(create('[1,2]').unset('1').get(''), [1])
+assert.deepEqual(create('[1,2]').unset('1').get('').length, 1)
+assert.deepEqual(create('[1,2,3]').unset('2').unset('1').get(''), [1])
+assert.deepEqual(create('[1,2,3]').unset('2').unset('1').get('').length, 1)
+assert.deepEqual(create('[1]').unset('0').get(''), [])
+assert.deepEqual(create('[1]').unset('0').get('').length, 0)
+
+assert.deepEqual(create('{x:{y:"z"}, z:4}').unset('x').get(''), {z:4})
+assert.throws(function() { create('[1,2]').unset('') }, /root/)
+
+// getting crazy
+//assert.deepEqual(create(str).set('a.b.c.d.e', 1).get('a'), {b:{c:{d:{e:1}}}})
+
+// update: arrays
+assert.deepEqual(create("[1]").update([2,3])+"", '[2,3]')
+assert.deepEqual(create("[1]").update([2,3,4])+"", '[2,3,4]')
+assert.deepEqual(create("[]").update([2])+"", '[2]')
+assert.deepEqual(create("[2]").update([])+"", '[]')
+assert.deepEqual(create("[2,3,4]").update([2,3])+"", '[2,3]')
+assert.deepEqual(create("[2,3,4]").update([])+"", '[]')
+assert.deepEqual(create("[]").update([2,3,4])+"", '[2,3,4]')
+assert.deepEqual(create(" /*zz*/ [ 2 , 3 , 4 ] /*xx*/ ").update([])+"", ' /*zz*/ [ ] /*xx*/ ')
+assert.deepEqual(create(" /*zz*/ [ ] /*xx*/ ").update([2,3,4])+"", ' /*zz*/ [2,3,4 ] /*xx*/ ')
+
+// update: objects
+assert.deepEqual(create("{x:1}").update({x:1,y:2,z:3})+"", '{x:1,y:2,z:3}')
+assert.deepEqual(create("{x:1}").update({x:2,z:3,t:4})+"", '{x:2,z:3,t:4}')
+assert.deepEqual(create("{}").update({x:1,y:2})+"", '{"x":1,"y":2}')
+assert.deepEqual(create("{x:1}").update({})+"", '{}')
+assert.deepEqual(create("{x:1,y:2}").update({x:1})+"", '{x:1}')
+assert.deepEqual(create(" /*zz*/ { x /*a*/ : /*b*/ 2 , y:3 , z //\n: 4 } /*xx*/ ").update({})+"", ' /*zz*/ { } /*xx*/ ')
+assert.deepEqual(create(" /*zz*/ { } /*xx*/ ").update({x: 2, y: 3, z: 4})+"", ' /*zz*/ {"x":2,"y":3,"z":4 } /*xx*/ ')
+
+// remove trailing comma
+assert.deepEqual(create("{x:1,}").update({})+"", '{}')
+assert.deepEqual(create("[0,]").update([])+"", '[]')
+assert.deepEqual(create("[0 /*z*/ , /*z*/]").update([])+"", '[ /*z*/]')
+
+// mode
+assert.equal(create('{"test":123}', {mode:'json'}).update({q:1,w:2})+'', '{"q":1,"w":2}')
+
+assert.equal(create('{1:2}').update({ a: 1, b: [1,2], c: 3})+'', '{a:1,b:[1,2],c:3}')
+
+// undef
+//assert.throws(function(){ jju.update(undefined, undefined) }, /root doc/)
+assert.equal(jju.update(undefined, undefined), '')
+assert.equal(jju.update(undefined, 42), '42')
+assert.equal(jju.update(undefined, {x: 5}), '{"x":5}')
+
+/*
+ * real test
+ */
+var upd = { name: 'yapm',
+ version: '0.6.0',
+ description: 'npm wrapper allowing to use package.yaml instead of package.json',
+ author: { name: 'Alex Kocharin', email: 'alex@kocharin.ru' },
+ keywords:
+ [ 'package manager',
+ 'modules',
+ 'install',
+ 'package.yaml',
+ 'package.json5',
+ 'yaml',
+ 'json5',
+ 'npm' ],
+ preferGlobal: true,
+ homepage: 'https://npmjs.org/doc/',
+ repository: { type: 'git', url: 'https://github.com/rlidwka/yapm' },
+ bugs: { url: 'http://github.com/rlidwka/yapm/issues' },
+ main: './yapm.js',
+ bin: { yapm: './yapm.js' },
+ dependencies: { npm: '*', 'js-yaml': '*', through: '*', 'json5-utils': '*' },
+ devDependencies: { async: '*' },
+ optionalDependencies: { 'yaml-update': '*' },
+ test_nonascii: 'ั‚ะตัั‚' }
+
+assert.deepEqual(create(create('{"garbage":"garbage"}').update(upd)).get(''), upd)
+assert.deepEqual(JSON.parse(create('{"garbage":"garbage"}', {mode:'json',legacy:true}).update(upd)), upd)
+
+//console.log(create('{"garbage":"garbage"}').update(upd)+'')
+
+//assert.deepEqual(create(" [ ] //").set(0,{})+"" [ ,{}] //
+
+
+//node -e 'console.log(require("./document").Document("{}").set("",[1,2,3])+"")'[1, 2, 3]
+
+//alex@elu:~/json5-utils/lib$ node -e 'console.log(require("./document").Document("[]").set("0",[1,2,3]).get(""))'
+//[ [ 1, 2, 3 ] ]
+
+
+/*assert.equal(create('"test"').get(''), 'test')
+assert.equal(create('"test"').get([]), 'test')
+assert.equal(create('"test"').get(false), 'test')
+assert.equal(create(undefined).get(''), undefined)
+
+//assert.equal(create('"test"').set('', 'foo').toString(), '"foo"')
+*/