UNPKG

csvtojson

Version:

A tool concentrating on converting csv data to JSON with customised parser supporting

225 lines (208 loc) 7.49 kB
var assert = require("assert"); var parserMgr = require("../libs/core/parserMgr.js"); describe("ParserMgr", function() { it("should add a correct parser", function() { parserMgr.addParser("myparserName", /myParser.+/, function() {}); }); it("should add a parser if regular expression is a string", function() { parserMgr.addParser("myparserName", "hello regexp", function() {}); }); describe("array parser", function() { it("should return an array parser with specific column title", function() { var parser = parserMgr.getParser("*array*myArray"); assert(parser.name === "array"); }); it("should parse as an array", function() { var parser = parserMgr.getParser("*array*myArray"); var resultRow = {}; parser.parse({ "head": "*array*myArray", "item": "item1", "resultRow": resultRow }); parser.parse({ "head": "*array*myArray", "item": "item2", "resultRow": resultRow }); assert(resultRow.myArray[0] === "item1"); assert(resultRow.myArray[1] === "item2"); }); }); describe("json parser", function() { it("should return an json parser with specific column title", function() { var parser = parserMgr.getParser("*json*myJSON.item1"); assert(parser.name === "json"); }); it("should parse as an json", function() { var parser1 = parserMgr.getParser("*json*myJSON.item1"); var parser2 = parserMgr.getParser("*json*myJSON.item2"); var resultRow = {}; parser1.parse({ "item": "item1", "resultRow": resultRow }); parser2.parse({ "item": "item2", "resultRow": resultRow }); assert(resultRow.myJSON.item1 === "item1"); assert(resultRow.myJSON.item2 === "item2"); }); it("should parse a json containing array", function() { var parser1 = parserMgr.getParser("*json*myJSON.item1[0]"); var parser2 = parserMgr.getParser("*json*myJSON.item1[1]"); var resultRow = {}; parser1.parse({ "item": "item1", "resultRow": resultRow }); parser2.parse({ "item": "item2", "resultRow": resultRow }); assert(resultRow.myJSON.item1); assert(resultRow.myJSON.item1.length === 2); }); it("should parse a json containing child json with array", function() { var parser1 = parserMgr.getParser("*json*myJSON.item1.arr[0]"); var parser2 = parserMgr.getParser("*json*myJSON.item1.arr[1]"); var parser3 = parserMgr.getParser("*json*myJSON.item1.title"); var resultRow = {}; parser1.parse({ "item": "item1", "resultRow": resultRow }); parser2.parse({ "item": "item2", "resultRow": resultRow }); parser3.parse({ "item": "mytitle", "resultRow": resultRow }); assert(resultRow.myJSON.item1); assert(resultRow.myJSON.item1.arr.length === 2); assert(resultRow.myJSON.item1.title === "mytitle"); }); it("should parse a json containing child json with array containing child json", function() { var parser1 = parserMgr.getParser("*json*myJSON.item1.arr[0].title"); var parser2 = parserMgr.getParser("*json*myJSON.item1.arr[1].title"); var parser3 = parserMgr.getParser("*json*myJSON.item1.arr[2].title"); var resultRow = {}; parser1.parse({ "item": "item1", "resultRow": resultRow }); parser2.parse({ "item": "item2", "resultRow": resultRow }); parser3.parse({ "item": "item3", "resultRow": resultRow }); assert(resultRow.myJSON.item1); assert(resultRow.myJSON.item1.arr.length === 3); assert(resultRow.myJSON.item1.arr[0].title === "item1"); }); it("should parse a json containing child json with dynamic array containing child json", function() { var parser1 = parserMgr.getParser("*json*myJSON.item1.arr[].title"); var parser2 = parserMgr.getParser("*json*myJSON.item1.arr[].title"); var parser3 = parserMgr.getParser("*json*myJSON.item1.arr[].title"); var resultRow = {}; parser1.parse({ "item": "item1", "resultRow": resultRow }); parser2.parse({ "item": "item2", "resultRow": resultRow }); parser3.parse({ "item": "item3", "resultRow": resultRow }); assert(resultRow.myJSON.item1); assert(resultRow.myJSON.item1.arr.length === 3); assert(resultRow.myJSON.item1.arr[2].title === "item3"); }); it("should parse as flat json keys containing dots and square brackets in 'flatKeys' mode", function() { var parser1 = parserMgr.getParser("*json*myJSON.item[0].foo"); var parser2 = parserMgr.getParser("*json*myJSON.item[1].foo"); var resultRow = {}; parser1.parse({ "item": "item1", "resultRow": resultRow, config: { flatKeys: true } }); parser2.parse({ "item": "item2", "resultRow": resultRow, config: { flatKeys: true } }); assert(resultRow[ "myJSON.item[0].foo" ] === "item1"); assert(resultRow[ "myJSON.item[1].foo" ] === "item2"); }); it("should parse as flat json if a column is markd as 'flat'", function() { var parser1 = parserMgr.getParser("*flat*myJSON1.item[0].foo"); var parser2 = parserMgr.getParser("myJSON.item[1].foo"); var resultRow = {}; parser1.parse({ "item": "item1", "resultRow": resultRow }); parser2.parse({ "item": "item2", "resultRow": resultRow, }); assert(resultRow[ "myJSON1.item[0].foo" ] === "item1"); assert(resultRow.myJSON.item[1].foo=== "item2"); }); }); describe("json array parser", function () { it("should return an json array parser with specific column title", function () { var parser = parserMgr.getParser("*jsonarray*myJSON.item"); assert(parser.name === "jsonarray"); }); it("should parse as an json array with multiple columns", function () { var parser1 = parserMgr.getParser("*jsonarray*myJSON.item"); var parser2 = parserMgr.getParser("*jsonarray*myJSON.item"); var resultRow = {}; parser1.parse({ "head": "*jsonarray*myJSON.item", "item": "item1", "resultRow": resultRow }); parser2.parse({ "head": "*jsonarray*myJSON.item", "item": "item2", "resultRow": resultRow }); assert(resultRow.myJSON.item[0] === "item1"); assert(resultRow.myJSON.item[1] === "item2"); }); }); describe("*omit* parser", function() { it("should return an omit parser with specific column title", function() { var parser = parserMgr.getParser("*omit*item"); assert(parser.name === "omit"); }); it("should not contain omitted column in result", function() { var parser1 = parserMgr.getParser("*omit*column"); var resultRow = {}; parser1.parse({ "head": "*omit*column", "item": "item1", "resultRow": resultRow }); assert("{}" === JSON.stringify(resultRow)); }); }); it("can parse a csv head to parser array", function() { var head = ["*array*myArr", "*json*json.item1"]; var parsers = parserMgr.initParsers(head); assert(parsers[0].name === "array"); assert(parsers[1].name === "json"); }); });