forked from enviPath/enviPy
357 lines
9.3 KiB
JavaScript
Executable File
357 lines
9.3 KiB
JavaScript
Executable File
var VarStream = require('../src/VarStream')
|
|
, fs = require('fs')
|
|
, assert = require('assert')
|
|
, StringDecoder = require('string_decoder').StringDecoder;
|
|
|
|
// Tests
|
|
describe('Writing varstreams', function() {
|
|
|
|
describe("should work when", function() {
|
|
|
|
it("outputting simple values", function() {
|
|
var data = '';
|
|
new VarStream.Writer(function(str) {
|
|
data += str;
|
|
},
|
|
VarStream.Reader.STRICT_MODE).write({
|
|
'var1': 'machin',
|
|
'var2': 'bidule',
|
|
'var3': 'truc'
|
|
});
|
|
assert.equal(data,
|
|
'var1=machin\nvar2=bidule\nvar3=truc\n');
|
|
});
|
|
|
|
it("outputting variable trees", function() {
|
|
var data = '';
|
|
new VarStream.Writer(function(str) {
|
|
data += str;
|
|
}).write({
|
|
'var1': {
|
|
'var11': {
|
|
'var111':'machin'
|
|
},
|
|
'var12': 'bidule',
|
|
'var13': 'truc'
|
|
}
|
|
});
|
|
assert.equal(data,
|
|
'var1.var11.var111=machin\nvar1.var12=bidule\nvar1.var13=truc\n');
|
|
});
|
|
|
|
it("outputting variable trees and optimizing it", function() {
|
|
var data = '';
|
|
new VarStream.Writer(function(str) {
|
|
data += str;
|
|
},
|
|
VarStream.Writer.MORPH_CONTEXTS
|
|
).write({
|
|
'var1': {
|
|
'var11': {
|
|
'var111':'machin'
|
|
},
|
|
'var12': 'bidule',
|
|
'var13': 'truc'
|
|
}
|
|
});
|
|
assert.equal(data,
|
|
'var1.var11.var111=machin\nvar1.var12=bidule\n^.var13=truc\n');
|
|
});
|
|
|
|
it("outputting simple arrays", function() {
|
|
var data = '';
|
|
new VarStream.Writer(function(str) {
|
|
data += str;
|
|
}).write({
|
|
'var1': {
|
|
'var11': {
|
|
'var111': ['machin', 'bidule', 'truc']
|
|
},
|
|
'var12': ['machin', 'bidule', 'truc'],
|
|
'var13': ['machin', 'bidule', 'truc']
|
|
}
|
|
});
|
|
assert.equal(data,
|
|
'var1.var11.var111.0=machin\n' +
|
|
'var1.var11.var111.1=bidule\n' +
|
|
'var1.var11.var111.2=truc\n' +
|
|
'var1.var12.0=machin\n' +
|
|
'var1.var12.1=bidule\n' +
|
|
'var1.var12.2=truc\n' +
|
|
'var1.var13.0=machin\n' +
|
|
'var1.var13.1=bidule\n' +
|
|
'var1.var13.2=truc\n'
|
|
);
|
|
});
|
|
|
|
it("outputting simple arrays in merging mode", function() {
|
|
var data = '';
|
|
new VarStream.Writer(function(str) {
|
|
data += str;
|
|
},
|
|
VarStream.Writer.MERGE_ARRAYS
|
|
).write({
|
|
'var1': {
|
|
'var11': {
|
|
'var111': ['machin', 'bidule', 'truc']
|
|
},
|
|
'var12': ['machin', 'bidule', 'truc'],
|
|
'var13': ['machin', 'bidule', 'truc']
|
|
}
|
|
});
|
|
assert.equal(data,
|
|
'var1.var11.var111.+=machin\n' +
|
|
'var1.var11.var111.+=bidule\n' +
|
|
'var1.var11.var111.+=truc\n' +
|
|
'var1.var12.+=machin\n' +
|
|
'var1.var12.+=bidule\n' +
|
|
'var1.var12.+=truc\n' +
|
|
'var1.var13.+=machin\n' +
|
|
'var1.var13.+=bidule\n' +
|
|
'var1.var13.+=truc\n'
|
|
);
|
|
});
|
|
|
|
it("outputting simple arrays and optimizing", function() {
|
|
var data = '';
|
|
new VarStream.Writer(function(str) {
|
|
data += str;
|
|
},
|
|
VarStream.Writer.MORPH_CONTEXTS
|
|
).write({
|
|
'var1': {
|
|
'var11': {
|
|
'var111': ['machin', 'bidule', 'truc']
|
|
},
|
|
'var12': ['machin', 'bidule', 'truc'],
|
|
'var13': ['machin', 'bidule', 'truc']
|
|
}
|
|
});
|
|
assert.equal(data,
|
|
'var1.var11.var111.0=machin\n' +
|
|
'^.1=bidule\n' +
|
|
'^.2=truc\n' +
|
|
'var1.var12.0=machin\n' +
|
|
'^.1=bidule\n' +
|
|
'^.2=truc\n' +
|
|
'var1.var13.0=machin\n' +
|
|
'^.1=bidule\n' +
|
|
'^.2=truc\n'
|
|
);
|
|
});
|
|
|
|
it("outputting object collections", function() {
|
|
var data = '';
|
|
new VarStream.Writer(function(str) {
|
|
data += str;
|
|
}).write({
|
|
'var1': {
|
|
'var11': {
|
|
'var111': [{
|
|
name: 'machin',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'bidule',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'truc',
|
|
type: 'obj'
|
|
}]
|
|
},
|
|
'var12': [{
|
|
name: 'machin',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'bidule',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'truc',
|
|
type: 'obj'
|
|
}],
|
|
'var13': [{
|
|
name: 'machin',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'bidule',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'truc',
|
|
type: 'obj'
|
|
}]
|
|
}
|
|
});
|
|
assert.equal(data,
|
|
'var1.var11.var111.0.name=machin\n' +
|
|
'var1.var11.var111.0.type=obj\n' +
|
|
'var1.var11.var111.1.name=bidule\n' +
|
|
'var1.var11.var111.1.type=obj\n' +
|
|
'var1.var11.var111.2.name=truc\n' +
|
|
'var1.var11.var111.2.type=obj\n' +
|
|
'var1.var12.0.name=machin\n' +
|
|
'var1.var12.0.type=obj\n' +
|
|
'var1.var12.1.name=bidule\n' +
|
|
'var1.var12.1.type=obj\n' +
|
|
'var1.var12.2.name=truc\n' +
|
|
'var1.var12.2.type=obj\n' +
|
|
'var1.var13.0.name=machin\n' +
|
|
'var1.var13.0.type=obj\n' +
|
|
'var1.var13.1.name=bidule\n' +
|
|
'var1.var13.1.type=obj\n' +
|
|
'var1.var13.2.name=truc\n' +
|
|
'var1.var13.2.type=obj\n'
|
|
);
|
|
});
|
|
|
|
it("outputting object collections in merging mode", function() {
|
|
var data = '';
|
|
new VarStream.Writer(function(str) {
|
|
data += str;
|
|
},
|
|
VarStream.Writer.MERGE_ARRAYS
|
|
).write({
|
|
'var1': {
|
|
'var11': {
|
|
'var111': [{
|
|
name: 'machin',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'bidule',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'truc',
|
|
type: 'obj'
|
|
}]
|
|
},
|
|
'var12': [{
|
|
name: 'machin',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'bidule',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'truc',
|
|
type: 'obj'
|
|
}],
|
|
'var13': [{
|
|
name: 'machin',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'bidule',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'truc',
|
|
type: 'obj'
|
|
}]
|
|
}
|
|
});
|
|
assert.equal(data,
|
|
'var1.var11.var111.+.name=machin\n' +
|
|
'var1.var11.var111.*.type=obj\n' +
|
|
'var1.var11.var111.+.name=bidule\n' +
|
|
'var1.var11.var111.*.type=obj\n' +
|
|
'var1.var11.var111.+.name=truc\n' +
|
|
'var1.var11.var111.*.type=obj\n' +
|
|
'var1.var12.+.name=machin\n' +
|
|
'var1.var12.*.type=obj\n' +
|
|
'var1.var12.+.name=bidule\n' +
|
|
'var1.var12.*.type=obj\n' +
|
|
'var1.var12.+.name=truc\n' +
|
|
'var1.var12.*.type=obj\n' +
|
|
'var1.var13.+.name=machin\n' +
|
|
'var1.var13.*.type=obj\n' +
|
|
'var1.var13.+.name=bidule\n' +
|
|
'var1.var13.*.type=obj\n' +
|
|
'var1.var13.+.name=truc\n' +
|
|
'var1.var13.*.type=obj\n'
|
|
);
|
|
});
|
|
|
|
it("outputting object collections and optimizing", function() {
|
|
var data = '';
|
|
new VarStream.Writer(function(str) {
|
|
data += str;
|
|
},
|
|
VarStream.Writer.MORPH_CONTEXTS
|
|
).write({
|
|
'var1': {
|
|
'var11': {
|
|
'var111': [{
|
|
name: 'machin',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'bidule',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'truc',
|
|
type: 'obj'
|
|
}]
|
|
},
|
|
'var12': [{
|
|
name: 'machin',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'bidule',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'truc',
|
|
type: 'obj'
|
|
}],
|
|
'var13': [{
|
|
name: 'machin',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'bidule',
|
|
type: 'obj'
|
|
}, {
|
|
name: 'truc',
|
|
type: 'obj'
|
|
}]
|
|
}
|
|
});
|
|
assert.equal(data,
|
|
'var1.var11.var111.0.name=machin\n' +
|
|
'^.type=obj\n' +
|
|
'var1.var11.var111.1.name=bidule\n' +
|
|
'^.type=obj\n' +
|
|
'var1.var11.var111.2.name=truc\n' +
|
|
'^.type=obj\n' +
|
|
'var1.var12.0.name=machin\n' +
|
|
'^.type=obj\n' +
|
|
'var1.var12.1.name=bidule\n' +
|
|
'^.type=obj\n' +
|
|
'var1.var12.2.name=truc\n' +
|
|
'^.type=obj\n' +
|
|
'var1.var13.0.name=machin\n' +
|
|
'^.type=obj\n' +
|
|
'var1.var13.1.name=bidule\n' +
|
|
'^.type=obj\n' +
|
|
'var1.var13.2.name=truc\n' +
|
|
'^.type=obj\n'
|
|
);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
describe('Writing bad varstreams', function() {
|
|
|
|
describe("should raise exceptions when in strict mode and", function() {
|
|
|
|
it("the given root object is not an object or an array", function() {
|
|
assert.throws(
|
|
function() {
|
|
new VarStream.Writer(function() {}).write('');
|
|
},
|
|
function(err) {
|
|
if(err instanceof Error
|
|
&&err.message==='The root scope must be an Object or an Array.') {
|
|
return true;
|
|
}
|
|
}
|
|
);
|
|
});
|
|
|
|
});
|
|
|
|
});
|