frontend/.pnpm-store/v3/files/e2/702e1c6773d0968cc55e7241226fe6e89aa20170d27b6a4621caf95e01ee447222359e5a26302345a5c9de5ee28307b2a9c8bf78e175423f823714ea6e95ec

143 lines
4.2 KiB
Plaintext

import { RowSplit, MultipleRowResult, RowSplitResult } from "./rowSplit";
import { Converter } from "./Converter";
const assert = require("assert");
describe("Test delimiters", function () {
const getDelimiter = (str, opt: { delimiter: string | string[] }): string => {
return RowSplit.prototype["getDelimiter"].call({
conv: {
parseParam: {
delimiter: opt.delimiter
}
}
}, str);
}
it("should return the explicitly specified delimiter", function () {
var delimiter = ";";
var rowStr = "a;b;c";
var returnedDelimiter = getDelimiter(rowStr, { delimiter: ";" });
assert.equal(returnedDelimiter, delimiter);
});
it("should return the autodetected delimiter if 'auto' specified", function () {
var rowStr = "a;b;c";
var returnedDelimiter = getDelimiter(rowStr, { delimiter: "auto" });
assert(returnedDelimiter === ";");
});
it("should return the ',' delimiter if delimiter cannot be specified, in case of 'auto'", function () {
var rowStr = "abc";
var returnedDelimiter = getDelimiter(rowStr, { delimiter: "auto" });
assert(returnedDelimiter === ",");
});
it("should accetp an array with potential delimiters", function () {
var rowStr = "a$b$c";
var returnedDelimiter = getDelimiter(rowStr, { delimiter: [",", ";", "$"] });
assert(returnedDelimiter === '$');
});
});
describe("ParseMultiLine function", function () {
const rowSplit = new RowSplit(new Converter());
const func = (lines: string[]): MultipleRowResult => {
return rowSplit.parseMultiLines(lines);
}
it("should convert lines to csv lines", function () {
var lines = [
"a,b,c,d",
"hello,world,csvtojson,abc",
"1,2,3,4"
];
var res = func(lines);
assert.equal(res.rowsCells.length, 3);
assert.equal(res.partial, "");
});
it("should process line breaks", function () {
var lines = [
"a,b,c",
'15",hello,"ab',
"cde\"",
"\"b\"\"b\",cc,dd"
];
var res = func(lines);
assert.equal(res.rowsCells.length, 3);
assert.equal(res.rowsCells[1][0], "15\"");
assert.equal(res.rowsCells[1][2], "ab\ncde");
assert.equal(res.rowsCells[2][0], "b\"b");
assert.equal(res.partial, "");
});
it("should return partial if line not closed", function () {
var lines = [
"a,b,c",
'15",hello,"ab',
"d,e,f"
];
var res = func(lines);
assert.equal(res.rowsCells.length, 1);
assert.equal(res.partial, "15\",hello,\"ab\nd,e,f\n");
});
});
describe("RowSplit.parse function", function () {
const rowSplit = new RowSplit(new Converter());
const func = (str): RowSplitResult => {
return rowSplit.parse(str);
}
it("should split complete csv line", function () {
var str = "hello,world,csvtojson,awesome";
var res = func(str);
assert.equal(res.cells.length, 4);
assert.equal(res.closed, true);
});
it("should split incomplete csv line", function () {
var str = "hello,world,\"csvtojson,awesome";
var res = func(str);
assert.equal(res.closed, false);
});
it("should allow multiple line", function () {
var str = "\"he\"llo\",world,\"csvtojson,a\"\nwesome\"";
var res = func(str);
assert.equal(res.closed, true);
assert.equal(res.cells[2], 'csvtojson,a"\nwesome');
});
it("should allow blank quotes", () => {
const data = "a|^^|^b^";
const rowSplit = new RowSplit(new Converter({
delimiter: '|',
quote: '^',
noheader: true
}));
const res = rowSplit.parse(data);
assert.equal(res.cells[1], "");
})
it("should allow blank quotes in quotes", () => {
const data = 'a,"hello,this,"", test"';
const rowSplit = new RowSplit(new Converter({
noheader: true
}));
const res = rowSplit.parse(data);
assert.equal(res.cells[1], 'hello,this,", test');
})
it("should smart detect if an initial quote is only part of value ", () => {
const data = '"Weight" (kg),Error code,"Height" (m)';
const rowSplit = new RowSplit(new Converter({
noheader: true
}));
const res = rowSplit.parse(data);
assert.equal(res.cells.length, 3);
assert(res.closed);
assert.equal(res.cells[0],'"Weight" (kg)');
assert.equal(res.cells[1],'Error code');
assert.equal(res.cells[2],'"Height" (m)');
})
});