UNPKG

js-lightning

Version:

Direct Javascript to Web interpreted server inspired by PHP

478 lines (363 loc) 17.8 kB
'use strict'; const chai = require('chai'); const sinon = require('sinon'); const sinonChai = require('sinon-chai'); const expect = chai.expect; chai.use(sinonChai); describe("Basic testing includes reading of different files", function () { var fs = require('fs'); var MultiIni = require('../src'); var Serializer = require('../src/serializer'); it("Availability of the class ", function () { expect(MultiIni).not.to.be.undefined; expect(MultiIni).not.to.be.null; }); it("Read a basic with a section and 2 simple keys and a comment", function () { var ini = new MultiIni.Class(); var data = ini.read('test/data/single.ini'); expect(data).not.to.be.null; expect(data['section1']).to.be.defined; expect(data['section1']['key1']).to.equal('value1'); expect(data['section1']['key2']).to.equal('value2'); expect(data['section1']['key3']).to.equal('value3'); expect(data['section1']['key4']).to.equal('value4'); expect(data['section1']['key5']).to.equal('value5'); expect(data['section1']['key6']).to.equal('value6'); expect(data['section1']['key7']).to.equal(' value7'); expect(data['section1']['key8']).to.equal('VALUE8'); }); it("Read a basic, detect boolean values and properly convert them", function () { var ini = new MultiIni.Class({ filters: [MultiIni.filters.boolean] }); var data = ini.read('test/data/boolean_values.ini'); expect(data).not.to.be.null; expect(data['section1']).to.be.defined; expect(data['section1']['key1']).to.equal(true); expect(data['section1']['key2']).to.equal(false); expect(data['section1']['key3']).to.equal(true); expect(data['section1']['key4']).to.equal(false); expect(data['section1']['key5']).to.equal(true); expect(data['section1']['key6']).to.equal(false); expect(data['section1']['key7']).to.equal(true); expect(data['section1']['key8']).to.equal(false); expect(data['section1']['key10']).to.equal(true); expect(data['section1']['key11']).to.equal(false); }); it("Read a basic with a section with multi line values", function () { var ini = new MultiIni.Class(); var data = ini.read('test/data/multi_line.ini'); expect(data).not.to.be.null; expect(data['section1']).to.be.defined; // test first value expect(data['section1']['key1']).to.equal('value1'); // multi line parsing should stop to fetch key5 expect(data['section1']['key5']).to.equal('value5'); expect(data['section1']['key2']).to.equal('line1\nline2'); expect(data['section1']['key3']).to.equal('\nline2\nline3'); expect(data['section1']['key4']).to.equal('\nline2\nline3\n'); expect(data['section1']['key6']).to.equal('\nline1\nline2=dummy\n'); expect(data['section1']['key7']).to.equal('line1\n line2\n line3'); }); it("Read a basic with a section with multi level keys and single and multi line values", function () { var ini = new MultiIni.Class(); var data = ini.read('test/data/multi_level_line.ini'); expect(data).not.to.be.null; expect(data['section1']).to.be.defined; // check for the second level expect(data['section1']['key1']).to.be.defined; expect(data['section1']['key1']['subkey1']).to.equal('value1'); expect(data['section1']['key1']['subkey2']).to.equal('value2'); // check the third level expect(data['section1']['key2']).to.be.defined; expect(data['section1']['key2']['subkey1']['subkey1']).to.equal('value3'); expect(data['section1']['key2']['subkey1']['subkey2']).to.equal('value4'); expect(data['section1']['key2']['subkey2']).to.equal('value5'); expect(data['section1']['key2']['subkey3']).to.be.defined; expect(data['section1']['key2']['subkey3']['subkey1']).to.equal('value6'); // multi line parsing with second level expect(data['section1']['key3']).to.be.defined; expect(data['section1']['key3']['subkey1']).to.equal('line1\nline2'); expect(data['section1']['key3']['subkey2']).to.equal('\nline2\nline3'); expect(data['section1']['key3']['subkey3']).to.equal('\nline2\nline3\n'); // multi line parsing with third level expect(data['section1']['key4']).to.be.defined; expect(data['section1']['key4']['subkey1']).to.be.defined; expect(data['section1']['key4']['subkey1']['subkey1']).to.equal('line1\nline2'); expect(data['section1']['key4']['subkey1']['subkey2']).to.equal('\nline2\nline3'); expect(data['section1']['key4']['subkey1']['subkey3']).to.equal('\nline2\nline3\n'); expect(data['section1']['key4']['subkey2']).to.equal('value'); }); it("Read ini with array definitions", function () { var ini = new MultiIni.Class(); var data = ini.read('test/data/array.ini'); expect(data).not.to.be.null; expect(data['section1']).to.be.defined; // array in key expect(data['section1']['key1']).to.be.defined; expect(data['section1']['key1'].length).to.equal(2); expect(data['section1']['key1'][0]).to.equal('value1'); expect(data['section1']['key1'][1]).to.equal('value2'); // normal key value expect(data['section1']['key2']).to.equal('value3'); // array in subkey expect(data['section1']['key3']).to.be.defined; expect(data['section1']['key3']['subkey']).to.be.defined; expect(data['section1']['key3']['subkey'].length).to.equal(2); expect(data['section1']['key3']['subkey'][0]).to.equal('value4'); expect(data['section1']['key3']['subkey'][1]).to.equal('value5'); }); it("Read ini with section inheritance", function () { var ini = new MultiIni.Class(); var data = ini.read('test/data/section_inheritance.ini'); expect(data).not.to.be.null; expect(data['section2']).to.be.defined; expect(data['section2']['key1']).to.equal('value1'); expect(data['section1']['key2']).to.equal('value2'); expect(data['section2']['key2']).to.equal('overwritten value2'); expect(data['section2']['key3']).to.equal('value3'); expect(data['section2']['key4']['nested']['deeper']).to.equal('value4'); expect(data['section1']['key5']['nested']['deeper']).to.equal('value5'); expect(data['section2']['key5']['nested']['deeper']).to.equal('overwritten value5'); }) it("Read ini with section inheritance for arrays", function () { var ini = new MultiIni.Class(); var data = ini.read('test/data/section_inheritance.ini'); expect(data).not.to.be.null; expect(data['section2']).to.be.defined; expect(data['section1']['key6']).to.be.defined; expect(data['section1']['key6']['subkey']).to.be.defined; expect(data['section1']['key6']['subkey'].length).to.equal(1); expect(data['section1']['key6']['subkey'][0]).to.equal('valueX'); expect(data['section1']['key6']['subkey'][1]).to.be.undefined; expect(data['section2']['key6']['subkey'].length).to.equal(2); expect(data['section2']['key6']['subkey'][0]).to.equal('valueX'); expect(data['section2']['key6']['subkey'][1]).to.equal('valueY'); }) it("Write ini file with one section and multiple single line values", function () { var data = { section1: { key1: 'value1', key2: 'value2' } }; var ini = new MultiIni.Class(); ini.write('test/out/single.ini', data); var content = fs.readFileSync('test/out/single.ini', {encoding: 'utf8'}); var expectedContent = fs.readFileSync('test/data/result/single.ini', {encoding: 'utf8'}); expect(content).to.equal(expectedContent); }); it("Write ini file with one section and multiple multi level single line values", function () { var data = { section1: { key1: { subkey1: 'value1', subkey2: 'value2' }, key2: { subkey: 'value3' } } }; var ini = new MultiIni.Class(); ini.write('test/out/multi_level.ini', data); var content = fs.readFileSync('test/out/multi_level.ini', {encoding: 'utf8'}); var expectedContent = fs.readFileSync('test/data/result/multi_level.ini', {encoding: 'utf8'}); expect(content).to.equal(expectedContent); }); it("Write a file with single and multi level and array definitions", function () { var data = { section1: { key1: { subkey1: ['value1', 'value2'], subkey2: 'value3' }, key2: ['value4', 'value5'] } }; var ini = new MultiIni.Class(); ini.write('test/out/array.ini', data); var content = fs.readFileSync('test/out/array.ini', {encoding: 'utf8'}); var expectedContent = fs.readFileSync('test/data/result/array.ini', {encoding: 'utf8'}); expect(content).to.equal(expectedContent); }); it("Write a file with single and multi level with multi line", function () { var data = { section1: { key1: { subkey1: 'line1\nline2', subkey2: '\nline2', subkey3: '\nline2\n', subkey4: 'value1' }, key2: 'line1\nline2', key3: '\nline2', key4: '\nline2\n', key5: 'value2' } }; var ini = new MultiIni.Class(); ini.write('test/out/multi_line.ini', data); var content = fs.readFileSync('test/out/multi_line.ini', {encoding: 'utf8'}); var expectedContent = fs.readFileSync('test/data/result/multi_line.ini', {encoding: 'utf8'}); expect(content).to.equal(expectedContent); }); it("Write a file with single and multi level, multi line and array", function () { var data = { section1: { key1: { subkey1: ['line1\nline2', '\nline2', '\nline2\n', 'value1'], subkey2: 'value2' }, key2: ['line1\nline2', '\nline2', '\nline2\n', 'value3'], key3: 'value4' } }; var ini = new MultiIni.Class(); ini.write('test/out/all.ini', data); var content = fs.readFileSync('test/out/all.ini', {encoding: 'utf8'}); var expectedContent = fs.readFileSync('test/data/result/all.ini', {encoding: 'utf8'}); expect(content).to.equal(expectedContent); }); it("Write a ascii ini file and write it manuel", function () { var ini = new MultiIni.Class({encoding: 'ascii'}); var serializer = new Serializer({encoding: 'ascii', line_breaks: 'unix'}); var data = { section: { key: "Straße mit Häusern" } }; ini.write('test/out/ascii.ini', data); fs.writeFileSync('test/out/ascii_serialized.ini', serializer.serialize(data), {encoding: 'ascii'}); var content = fs.readFileSync('test/out/ascii.ini', {encoding: 'ascii'}); var expectedContent = fs.readFileSync('test/out/ascii_serialized.ini', {encoding: 'ascii'}); expect(content).to.equal(expectedContent); }); // it("Compare both reading results, via ini and manuel", function () { // var data = { // section: { // key: "Straße mit Häusern" // } // }; // // MultiIni.write('test/out/ascii_read_write.ini', data, {encoding: 'ascii'}); // // var content = MultiIni.read('test/out/ascii_read_write.ini', {encoding: 'ascii'}); // // expect(content.section.key).to.equal(data.section.key); // }); // it("Read a file with an invalid lines ignoring it", function () { // var data = MultiIni.read('test/data/invalid_line.ini') // // expect(data).not.to.be.null; // // expect(data['section']).to.be.defined; // // expect(data['section']['valid']).to.equal('valid'); // // expect(data['section']['invalid']).not.to.be.defined; // // expect(data['section']['invalid_multiline']).not.to.be.defined; // }); // // it("Read a file with an invalid lines reading it", function () { // var data = MultiIni.read('test/data/invalid_line.ini', {ignore_invalid: false}) // // expect(data).not.to.be.null; // // expect(data['section']).to.be.defined; // // expect(data['section']['valid']).to.equal('valid'); // // expect(data['section']['invalid']).to.equal('invalid'); // // expect(data['section']['invalid_multiline']).to.equal('line1\nline2\nline3'); // }); // // it("Read a file with an invalid with invalid callback and abort", function () { // var cb = function (line) { // expect(line).to.equal('invalid="invalid"a') // return false // }; // var data = MultiIni.read('test/data/invalid_line.ini', {ignore_invalid: false, oninvalid: cb}) // // expect(data).to.be.undefined; // }); it("Read a basic file with a section and 2 simple keys and one multiline with keep quotes", function () { var ini = new MultiIni.Class({keep_quotes: true}); var data = ini.read('test/data/combined_keep_quotes.ini'); expect(data).not.to.be.null; expect(data['section1']).to.be.defined; expect(data['section1']['key1']).to.equal('"value1"'); expect(data['section1']['multiline']).to.equal('"line1\nline2\nline3\n"'); expect(data['section1']['key2']).to.equal('value2'); }); it("Read a basic file with a section and 2 simple keys and one multiline with keep quotes and writing it", function () { var ini = new MultiIni.Class({keep_quotes: true}); var data = ini.read('test/data/combined_keep_quotes.ini'); ini.write('test/out/combined_keep_quotes.ini', data); var content = fs.readFileSync('test/out/combined_keep_quotes.ini', {encoding: 'utf8'}); var expectedContent = fs.readFileSync('test/data/result/combined_keep_quotes.ini', {encoding: 'utf8'}); expect(content).to.equal(expectedContent); }); it("Read and writing a file with constants", function () { var ini = new MultiIni.Class(); var data = ini.read('test/data/constant.ini'); expect(data).not.to.be.null; expect(data['section']).to.be.defined; expect(data['section']['key1']).to.equal('"Part1 " CONSTANT'); expect(data['section']['key2']).to.equal('CONSTANT " Part2"'); expect(data['section']['key3']).to.equal('Part1" CONSTANT "Part2'); ini.write('test/out/constant.ini', data); }); it("Read and writing a file with constants with keeping quotes", function () { var ini = new MultiIni.Class({keep_quotes: true}); var data = ini.read('test/data/constant.ini'); expect(data).not.to.be.null; expect(data['section']).to.be.defined; expect(data['section']['key1']).to.equal('"Part1 " CONSTANT'); expect(data['section']['key2']).to.equal('CONSTANT " Part2"'); expect(data['section']['key3']).to.equal('"Part1" CONSTANT "Part2"'); ini.write('test/out/constant_keep.ini', data); }); it("Read a file with a section with values having escaped quotes", function () { var ini = new MultiIni.Class(); var data = ini.read('test/data/escaped_quotes.ini'); ini.write('test/out/escaped_quotes.ini', data); var content = fs.readFileSync('test/out/escaped_quotes.ini', {encoding: 'utf8'}); var expectedContent = fs.readFileSync('test/data/result/escaped_quotes.ini', {encoding: 'utf8'}); expect(content).to.equal(expectedContent); }); it("Apply uppercase filter", function () { var ini = new MultiIni.Class({ filters: [MultiIni.filters.uppercase] }); var data = ini.read('test/data/single.ini'); expect(data).not.to.be.null; expect(data['section1']).to.be.defined; expect(data['section1']['key1']).to.equal('VALUE1'); expect(data['section1']['key8']).to.equal('VALUE8'); }); it("Apply lowercase filter", function () { var ini = new MultiIni.Class({ filters: [MultiIni.filters.lowercase] }); var data = ini.read('test/data/single.ini'); expect(data).not.to.be.null; expect(data['section1']).to.be.defined; expect(data['section1']['key1']).to.equal('value1'); expect(data['section1']['key8']).to.equal('value8'); }); it("Apply trim empty lines filter", function () { var ini = new MultiIni.Class({ filters: [MultiIni.filters.trim] }); var data = ini.read('test/data/multi_line.ini'); expect(data).not.to.be.null; expect(data['section1']).to.be.defined; expect(data['section1']['key4']).to.equal('line2\nline3'); }); it("Read multi line ini of issue #12 with windows line breaks", function () { var instance = new MultiIni.Class({line_breaks: 'windows'}); var data = instance.read('test/data/issue_12.ini'); expect(data['(U+Pu) métal H2O']['description']).to.equal('(U+Pu) métal modération H2O\nParamétrage de la modération en H/(U+Pu)'); }); });