Files
enviPy-bayer/static/js/ketcher2/node_modules/varstream/tests/parser.mocha.js
2025-06-23 20:13:54 +02:00

994 lines
35 KiB
JavaScript
Executable File

var VarStream = require('../src/VarStream')
, fs = require('fs')
, assert = require('assert')
, StringDecoder = require('string_decoder').StringDecoder;
// Tests
describe('Parsing VarStream', function() {
var scope = {};
var myVarStream=new VarStream(scope,'vars');
it("should work for simple datas", function(done) {
var readStream = fs.createReadStream(__dirname+'/fixtures/1-simple.dat');
readStream.pipe(myVarStream, { end: false });
readStream.on('end', function () {
// Numbers
assert.equal(typeof scope.vars.aSimpleIntValue, 'number');
assert.equal(scope.vars.aSimpleIntValue,1898);
assert.equal(typeof scope.vars.aSimpleIntNegativeValue, 'number');
assert.equal(scope.vars.aSimpleIntNegativeValue,-1669);
assert.equal(typeof scope.vars.aSimpleFloatValue, 'number');
assert.equal(scope.vars.aSimpleFloatValue,1.0025);
assert.equal(typeof scope.vars.aSimpleFloatNegativeValue, 'number');
assert.equal(scope.vars.aSimpleFloatNegativeValue,-1191.0025);
// Booleans
assert.equal(typeof scope.vars.aSimpleBoolValueTrue, 'boolean');
assert.equal(scope.vars.aSimpleBoolValueTrue,true);
assert.equal(typeof scope.vars.aSimpleBoolValueFalse, 'boolean');
assert.equal(scope.vars.aSimpleBoolValueFalse,false);
// Strings
assert.equal(typeof scope.vars.aSimpleStringValue, 'string');
assert.equal(scope.vars.aSimpleStringValue,"I'm the king of the world!");
assert.equal(typeof scope.vars.aSimpleStringMultilineValue, 'string');
assert.equal(scope.vars.aSimpleStringMultilineValue,
"I'm the king of the world!\nYou know!\nIt's true.");
done();
});
});
/*
it("should work for other text", function(done) {
fs.createReadStream(__dirname+'/fixtures/9-othertext.dat').pipe(myVarStream)
.once('end', function () {
// Strings
assert.equal(typeof scope.vars.aSimpleWellDeclaredStringValue, 'string');
assert.equal(scope.vars.aSimpleWellDeclaredStringValue,
"I'm the king of the world!");
assert.equal(typeof scope.vars.aSimpleWellDeclaredStringMultilineValue,
'string');
assert.equal(scope.vars.aSimpleWellDeclaredStringMultilineValue,
"I'm the king of the world!\nYou \"know\"!\nIt's true.");
done();
});
});*/
it("should work for data trees", function(done) {
var readStream = fs.createReadStream(__dirname+'/fixtures/2-trees.dat');
readStream.pipe(myVarStream, { end: false });
readStream.on('end', function () {
assert.equal(typeof scope.vars.treeRoot.branch1,'object');
assert.equal(scope.vars.treeRoot.branch1.aSimpleIntValue,1898);
assert.equal(scope.vars.treeRoot.branch1.aSimpleIntNegativeValue,-1669);
assert.equal(typeof scope.vars.treeRoot.branch2,'object');
assert.equal(scope.vars.treeRoot.branch2.aSimpleFloatValue,1.0025);
assert.equal(scope.vars.treeRoot.branch2.aSimpleFloatNegativeValue,
-1191.0025);
assert.equal(typeof scope.vars.treeRoot.branch3,'object');
assert.equal(scope.vars.treeRoot.branch3.aSimpleBoolValueTrue,true);
assert.equal(scope.vars.treeRoot.branch3.aSimpleBoolValueFalse,false);
assert.equal(typeof scope.vars.treeRoot.branch3.branch1,'object');
assert.equal(scope.vars.treeRoot.branch3.branch1.aSimpleNullValue,null);
assert.equal(scope.vars.treeRoot.branch3.branch1.aSimpleStringValue,
"I'm the king of the world!");
assert.equal(typeof scope.vars.treeRoot.branch3.branch2,'object');
assert.equal(scope.vars.treeRoot.branch3.branch2.aSimpleStringMultilineValue,
"I'm the king of the world!\r\nYou know!\r\nIt's true.");
//assert.equal(scope.vars.treeRoot.branch3.branch2.aSimpleWellDeclaredStringValue,
// "I'm the king of the world!");
//assert.equal(typeof scope.vars.treeRoot.branch3.branch2.branch1,'object');
//assert.equal(
// scope.vars.treeRoot.branch3.branch2.branch1.aSimpleWellDeclaredStringMultilineValue,
// "I'm the king of the world!\nYou \"know\"!\nIt's true.");
done();
});
});
it("should deleted empty datas", function(done) {
var readStream = fs.createReadStream(__dirname+'/fixtures/3-delete.dat');
readStream.pipe(myVarStream, { end: false });
readStream.on('end', function () {
assert.equal(typeof scope.vars.treeRoot.branch1.aSimpleIntNegativeValue,'undefined');
assert.equal(typeof scope.vars.treeRoot.branch2,'undefined');
assert.equal(typeof scope.vars.treeRoot.branch3.aSimpleBoolValueTrue,'undefined');
assert.equal(typeof scope.vars.treeRoot.branch3.branch1.aSimpleStringValue,'string');
assert.equal(scope.vars.treeRoot.branch3.branch1.aSimpleStringValue,'');
done();
});
});
it("should take backward references in count", function(done) {
var readStream = fs.createReadStream(__dirname+'/fixtures/4-backward.dat');
readStream.pipe(myVarStream, { end: false });
readStream.on('end', function () {
assert.equal(typeof scope.vars.treeRoot.branch1,'object');
assert.strictEqual(scope.vars.treeRoot.branch1.aSimpleIntValue,2000);
assert.strictEqual(scope.vars.treeRoot.branch1.aSimpleIntNegativeValue,-2000);
assert.equal(typeof scope.vars.treeRoot.branch2,'object');
assert.strictEqual(scope.vars.treeRoot.branch2.aSimpleFloatValue,2.0001);
assert.strictEqual(scope.vars.treeRoot.branch2.aSimpleFloatNegativeValue,-1000.0002);
assert.equal(typeof scope.vars.treeRoot.branch3,'object');
assert.strictEqual(scope.vars.treeRoot.branch3.aSimpleBoolValueTrue,true);
assert.strictEqual(scope.vars.treeRoot.branch3.aSimpleBoolValueFalse,false);
assert.equal(typeof scope.vars.treeRoot.branch3.branch1,'object');
assert.strictEqual(scope.vars.treeRoot.branch3.branch1.aSimpleNullValue,null);
assert.strictEqual(scope.vars.treeRoot.branch3.branch1.aSimpleStringValue,
"I'm not the king of the world!");
//assert.equal(typeof scope.vars.treeRoot.branch3.branch2,'object');
//assert.equal(scope.vars.treeRoot.branch3.branch2.aSimpleStringMultilineValue,
// "I'm not the king of the world!\nYou know!\nIt's true.");
//assert.equal(scope.vars.treeRoot.branch3.branch2.aSimpleWellDeclaredStringValue,
// "I'm not the king of the world!");
//assert.equal(typeof scope.vars.treeRoot.branch3.branch2.branch1,'object');
//assert.equal(
// scope.vars.treeRoot.branch3.branch2.branch1.aSimpleWellDeclaredStringMultilineValue,
// "I'm not the king of the world!\nYou \"know\"!\nIt's true.");
done();
});
});
it("should work with operators", function(done) {
var readStream = fs.createReadStream(__dirname+'/fixtures/5-operators.dat');
readStream.pipe(myVarStream, { end: false });
readStream.on('end', function () {
// Numbers
assert.equal(typeof scope.vars.aSimpleIntValue, 'number');
assert.equal(scope.vars.aSimpleIntValue,(((1898+5)*2)-15)%8);
assert.equal(typeof scope.vars.aSimpleIntNegativeValue, 'number');
assert.equal(scope.vars.aSimpleIntNegativeValue,(((-1669)+6)*-3)-1);
assert.equal(typeof scope.vars.aSimpleFloatValue, 'number');
assert.equal(scope.vars.aSimpleFloatValue,(1.0025+0.0025)/0.0025);
assert.equal(typeof scope.vars.aSimpleFloatNegativeValue, 'number');
assert.equal(scope.vars.aSimpleFloatNegativeValue,((-1191.0025)-(-0.0025))/-0.0025);
// Booleans
assert.equal(typeof scope.vars.aSimpleBoolValueTrue, 'boolean');
assert.equal(scope.vars.aSimpleBoolValueTrue,true);
assert.equal(typeof scope.vars.aSimpleBoolValueFalse, 'boolean');
assert.equal(scope.vars.aSimpleBoolValueFalse,false);
// Strings
assert.equal(typeof scope.vars.aSimpleStringValue, 'string');
assert.equal(scope.vars.aSimpleStringValue,"I'm the king of the world! Yep!");
assert.equal(typeof scope.vars.aSimpleStringMultilineValue, 'string');
assert.equal(scope.vars.aSimpleStringMultilineValue,
"I'm the king of the world!\nYou know!\nIt's true.\r\nYep.");
/*assert.equal(typeof scope.vars.aSimpleWellDeclaredStringValue, 'string');
assert.equal(scope.vars.aSimpleWellDeclaredStringValue,
"I'm the king of the world! Yep!");
assert.equal(typeof scope.vars.aSimpleWellDeclaredStringMultilineValue,
'string');
assert.equal(scope.vars.aSimpleWellDeclaredStringMultilineValue,
"I'm the king of the world!\nYou \"know\"!\nIt's true.\nYep.");
assert.equal(scope.vars.treeRoot.branch3.branch4,
scope.vars.treeRoot.branch3.branch2);*/
done();
});
});
it("should work with arrays", function(done) {
var readStream = fs.createReadStream(__dirname+'/fixtures/6-arrays.dat');
readStream.pipe(myVarStream, { end: false });
readStream.on('end', function () {
// First array
assert.equal(typeof scope.vars.aSimpleArray,'object');
assert.equal(scope.vars.aSimpleArray instanceof Array,true);
assert.equal(scope.vars.aSimpleArray.length,9);
assert.equal(scope.vars.aSimpleArray[0],0);
assert.equal(scope.vars.aSimpleArray[1],1);
assert.equal(scope.vars.aSimpleArray[2],2);
assert.equal(scope.vars.aSimpleArray[3],3);
assert.equal(scope.vars.aSimpleArray[4],4);
assert.equal(scope.vars.aSimpleArray[5],5);
assert.equal(scope.vars.aSimpleArray[6],6);
assert.equal(scope.vars.aSimpleArray[7],9);
assert.equal(scope.vars.aSimpleArray[8],8);
// Second array
assert.equal(typeof scope.vars.aSimpleArray2,'object');
assert.equal(scope.vars.aSimpleArray2 instanceof Array,true);
assert.equal(scope.vars.aSimpleArray2.length,10);
assert.equal(scope.vars.aSimpleArray2[0].value,5);
assert.equal(scope.vars.aSimpleArray2[1].value,4);
assert.equal(typeof scope.vars.aSimpleArray2[2],'undefined');
assert.equal(typeof scope.vars.aSimpleArray2[3],'undefined');
assert.equal(typeof scope.vars.aSimpleArray2[4],'undefined');
assert.equal(typeof scope.vars.aSimpleArray2[5],'undefined');
assert.equal(typeof scope.vars.aSimpleArray2[6],'undefined');
assert.equal(typeof scope.vars.aSimpleArray2[7],'undefined');
assert.equal(typeof scope.vars.aSimpleArray2[8],'undefined');
assert.equal(scope.vars.aSimpleArray2[9].value,5);
done();
});
});
it("Should work with truncated content beetween chunks", function(done) {
var readStream = fs.createReadStream(__dirname+'/fixtures/7-truncated-part1.dat');
readStream.pipe(myVarStream, { end: false })
readStream.on('end', function () {
done();
});
});
it("Should work with truncated content beetween chunks", function(done) {
var readStream = fs.createReadStream(__dirname+'/fixtures/7-truncated-part2.dat');
readStream.pipe(myVarStream, { end: false });
readStream.on('end', function () {
done();
});
});
it("Should interpret rightvals first", function(done) {
var readStream = fs.createReadStream(__dirname+'/fixtures/8-rightval.dat');
readStream.pipe(myVarStream, { end: false });
readStream.on('end', function () {
assert.equal(scope.vars.aSimpleArray[0],10);
assert.equal(scope.vars.aSimpleArray[1],10);
assert.equal(scope.vars.aSimpleArray2[0].value,9);
assert.equal(scope.vars.aSimpleArray2[1].value,9);
done();
});
});
it("Should output good contents", function(done) {
var content = ''
, decoder = new StringDecoder('utf8');
myVarStream.on('data', function(chunk) {
content += decoder.write(chunk);
});
myVarStream.on('end', function() {
assert.equal(content,
fs.readFileSync(__dirname+'/fixtures/0-result.dat', 'utf8'));
done();
});
});
});
describe('Reading chunked varstreams', function() {
it("Should work at the lval level", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('aVar1=ok\naVa');
assert.equal(scope.vars.aVar1,'ok');
assert.equal(typeof scope.vars.aVar2,'undefined');
myVarStream.read('r2=1000\naVar3=2000\n');
assert.equal(scope.vars.aVar2,1000);
assert.equal(scope.vars.aVar3,2000);
});
it("Should work at the operator level", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('aVar1=ok\naVar2');
assert.equal(scope.vars.aVar1,'ok');
assert.equal(typeof scope.vars.aVar2,'undefined');
myVarStream.read('=1000\naVar3=2000\n');
assert.equal(scope.vars.aVar2,1000);
assert.equal(scope.vars.aVar3,2000);
});
it("Should work at the next operator level", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('aVar1=ok\naVar2=');
assert.equal(scope.vars.aVar1,'ok');
assert.equal(typeof scope.vars.aVar2,'undefined');
myVarStream.read('1000\naVar3=2000\n');
assert.equal(scope.vars.aVar2,1000);
assert.equal(scope.vars.aVar3,2000);
});
it("Should work at the rval level", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('aVar1=ok\naVar2=1');
assert.equal(scope.vars.aVar1,'ok');
assert.equal(typeof scope.vars.aVar2,'undefined');
myVarStream.read('000\naVar3=2000\n');
assert.equal(scope.vars.aVar2,1000);
assert.equal(scope.vars.aVar3,2000);
});
it("Should work at the multiline level", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('aVar1=ok\naVar2=Y');
assert.equal(scope.vars.aVar1,'ok');
assert.equal(typeof scope.vars.aVar2,'undefined');
myVarStream.read('ep!\\\n');
assert.equal(scope.vars.aVar2,'Yep!\n');
myVarStream.read(' That\'');
assert.equal(scope.vars.aVar2,'Yep!\n That\'');
myVarStream.read('s me!\n');
assert.equal(scope.vars.aVar2,'Yep!\n That\'s me!');
});
});
describe('Reading varstreams', function() {
it("should work well with props containing underscores", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('a_obj.a_text=This is a text \\\\\n');
assert.strictEqual(scope.vars.a_obj.a_text,'This is a text \\');
myVarStream.read('a_obj.a_text=This is \\a text.\n');
assert.strictEqual(scope.vars.a_obj.a_text,'This is \\a text.');
myVarStream.read('a_obj.a_text=This is \\\\a text.\n');
assert.strictEqual(scope.vars.a_obj.a_text,'This is \\a text.');
});
it("should work well when chars are escaped", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('aObj.aText=This is a text \\\\\n');
assert.strictEqual(scope.vars.aObj.aText,'This is a text \\');
myVarStream.read('aObj.aText=This is \\a text.\n');
assert.strictEqual(scope.vars.aObj.aText,'This is \\a text.');
myVarStream.read('aObj.aText=This is \\\\a text.\n');
assert.strictEqual(scope.vars.aObj.aText,'This is \\a text.');
});
it("should work when the stream refers to its root scope with ^", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('aObj.parent&=^\n');
assert.equal(scope.vars,scope.vars.aObj.parent);
});
it("should work when the stream refers to its root scope with ^0", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('aObj.parent&=^\n');
assert.equal(scope.vars,scope.vars.aObj.parent);
});
it("should work well when chars are escaped in multiline strings", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
myVarStream.read('aObj.aText=This is a \\\n');
assert.strictEqual(scope.vars.aObj.aText,'This is a \n');
myVarStream.read('multiline \\ text.\\\n');
assert.strictEqual(scope.vars.aObj.aText,'This is a \nmultiline \\ text.\n');
myVarStream.read('With two \\\\ lines.\\\\\n');
assert.strictEqual(scope.vars.aObj.aText,'This is a \nmultiline \\ text.\nWith two \\ lines.\\');
});
});
describe('Reading bad varstreams', function() {
describe("should silently fail when", function() {
it("a line ends with no value after =", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("a line has an empty lvalue", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\n=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("a line has an empty lvalue with a multiline rightvalue", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\n=truc\\n1\\n2\\nmachin\n\nvalidVar2=bidule\n'); // Something wrong here
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("a line ends with no value after &=", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar&=\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("a line ends with no value after +=", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar+=\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("a line ends with no value after -=", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar-=\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("a line ends with no value after /=", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar/=\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("when there are an empty node at start", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\n.ASimpleVar=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("when there are an empty node somewhere", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar.aNode..anotherNode.and=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
ASimpleVar: {},
validVar2: 'bidule'
});
});
it("when there are an empty node at end", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar.anode.=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
ASimpleVar: {},
validVar2: 'bidule'
});
});
it("when there malformed nodes at start", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\n$%*.ASimpleVar.anode.$=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("when there malformed nodes somewhere", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar.anode.$.another=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
ASimpleVar: {},
validVar2: 'bidule'
});
});
it("when there malformed nodes at end", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar.anode.$=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
ASimpleVar: {},
validVar2: 'bidule'
});
});
it("there are malformed backward reference in a leftval", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\n^3g.SimpleVar.anode=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("there are malformed backward reference in a leftval 2", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\n^g3.SimpleVar.anode=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});
it("there are malformed backward reference in a righval", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar.anode&=^3g.truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
ASimpleVar: {anode: null},
validVar2: 'bidule'
});
});
it("there are malformed backward reference in a righval 2", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar.anode&=^g3.truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
ASimpleVar: {anode: null},
validVar2: 'bidule'
});
});
it("there are out of range backward reference in a leftval", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\n^12.ASimpleVar.anode=truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
validVar2: 'bidule'
});
});/*
it("there are out of range backward reference in a rightval", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar.anode+=^12.truc.truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
ASimpleVar: {anode: null},
validVar2: 'bidule'
});
});*/
it("a legal char is escaped", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar.anode=truc\\truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
ASimpleVar: {anode: 'truc\\truc'},
validVar2: 'bidule'
});
});
it("a legal char is escaped in a multiline value", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars');
assert.doesNotThrow(function() {
myVarStream.read('validVar1=machin\nASimpleVar.anode=truc\\\ntruc\\truc\nvalidVar2=bidule\n');
});
assert.deepEqual(scope.vars, {
validVar1: 'machin',
ASimpleVar: {anode: 'truc\ntruc\\truc'},
validVar2: 'bidule'
});
});
});
describe("in strict mode, should raise exceptions when", function() {
it("a line ends with no =", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Unexpected new line found while parsing '
+' a leftValue.') {
return true;
}
}
);
});
it("a line has no lvalue", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('=ASimpleVar\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Found an empty leftValue.') {
return true;
}
}
);
});
it("a line ends with no value after &=", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar&=\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Found an empty rightValue.') {
return true;
}
}
);
});
it("a line ends with no value after +=", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar+=\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Found an empty rightValue.') {
return true;
}
}
);
});
it("a line ends with no value after -=", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar-=\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Found an empty rightValue.') {
return true;
}
}
);
});
it("a line ends with no value after *=", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar*=\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Found an empty rightValue.') {
return true;
}
}
);
});
it("a line ends with no value after /=", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar/=\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Found an empty rightValue.') {
return true;
}
}
);
});
it("there are a empty node at start", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('.ASimpleVar=true\n');
},
function(err) {
if(err instanceof Error
&&err.message==='The leftValue can\'t have empty nodes'
+' (.ASimpleVar).') {
return true;
}
}
);
});
it("there are a empty node somewhere", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar.prop..prop.prop=true\n');
},
function(err) {
if(err instanceof Error
&&err.message==='The leftValue can\'t have empty nodes'
+' (ASimpleVar.prop..prop.prop).') {
return true;
}
}
);
});
it("there are a empty node at end", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar.=false\n');
},
function(err) {
if(err instanceof Error
&&err.message==='The leftValue can\'t have empty nodes (ASimpleVar.).') {
return true;
}
}
);
});
it("there are malformed nodes", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimp-+leVar.ds+d=false\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Unexpected char after the "-" operator. Expected "="'
+' found "+".') {
return true;
}
}
);
});
it("there are malformed nodes", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar.ds$d=false\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Illegal chars found in a the node "ds$d".') {
return true;
}
}
);
});
it("there are out of range backward reference", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar.prop1.prop2=false\n^4.test=true\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Backward reference index is greater than the'
+' previous node max index.') {
return true;
}
}
);
});
it("there are malformed backward reference in a righval", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar.prop1.prop2=false\n^4b.test=true\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Malformed backward reference.') {
return true;
}
}
);
});
it("there are malformed backward reference in a righval 2", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('ASimpleVar.prop1.prop2=false\n^b5.test=true\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Malformed backward reference.') {
return true;
}
}
);
});
it("there are malformed backward reference in a leftval", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('^b5.test=true\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Malformed backward reference.') {
return true;
}
}
);
});
it("there are malformed backward reference in a leftval 2", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('^5b.test=true\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Malformed backward reference.') {
return true;
}
}
);
});
it("there are bad range backward reference in a leftval", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('^8.test=true\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Backward reference index is greater than the previous node max index.') {
return true;
}
}
);
});
it("a legal char is escaped", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('test=t\\rue\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Found an escape char but there was nothing to escape.') {
return true;
}
}
);
});
it("a legal char is escaped in a multiline value", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('test=truc\\\ntruc\\truc\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Found an escape char but there was nothing to escape.') {
return true;
}
}
);
});
it("an operator is not folled by =", function() {
var scope = {};
var myVarStream=new VarStream.Reader(scope,'vars',
VarStream.Reader.STRICT_MODE);
assert.throws(
function() {
myVarStream.read('test&\n');
},
function(err) {
if(err instanceof Error
&&err.message==='Unexpected char after the "&" operator. Expected "=" found "\n".') {
return true;
}
}
);
});
});
});