# All files rowSplit.test.ts

100% Statements 31/31
100% Branches 0/0
100% Functions 0/0
100% Lines 31/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    1111x

    1x
    4x
    1x

    1x
    1x
    1x

    1x
    1x

    1x

    1x
    1x

    1x

    1x

    1x

    3x

    1x
    1x

    1x

    1x

    1x
    1x

    1x

    1x

    1x
    3x
    1x

    1x

    1x
    1x

    1x
     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');
      });

    });