parse-noquotes.spec.ts 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import expect = require('expect.js');
  4. import {
  5. parseDSVNoQuotes
  6. } from '@jupyterlab/csvviewer';
  7. let parseDSV = parseDSVNoQuotes;
  8. describe('csvviewer/parsenoquotes', () => {
  9. describe('parseDSVNoQuotes', () => {
  10. it('does basic parsing of csv files', () => {
  11. let data = `a,b,c,d\r\n0,1,2,3\r\n4,5,6,7`;
  12. let options = {data, columnOffsets: false};
  13. let offsets = parseDSV(options);
  14. expect(offsets.nrows).to.eql(3);
  15. expect(offsets.ncols).to.eql(0);
  16. expect(offsets.offsets).to.eql([0, 9, 18]);
  17. });
  18. it('does basic parsing of csv files with column offsets', () => {
  19. let data = `a,b,c,d\r\n0,1,2,3\r\n4,5,6,7`;
  20. let options = {data, columnOffsets: true};
  21. let offsets = parseDSV(options);
  22. expect(offsets.nrows).to.eql(3);
  23. expect(offsets.ncols).to.eql(4);
  24. expect(offsets.offsets).to.eql([0, 2, 4, 6, 9, 11, 13, 15, 18, 20, 22, 24]);
  25. });
  26. // For simplicity, we'll use \n as a row delimiter below.
  27. it('handles trailing row delimiter', () => {
  28. let data = `a,b,c,d\n0,1,2,3\n4,5,6,7\n`;
  29. let options = {data, rowDelimiter: '\n'};
  30. let results;
  31. results = parseDSV({...options, columnOffsets: false});
  32. expect(results.nrows).to.eql(3);
  33. expect(results.offsets).to.eql([0, 8, 16]);
  34. results = parseDSV({...options, columnOffsets: true});
  35. expect(results.nrows).to.eql(3);
  36. expect(results.ncols).to.eql(4);
  37. expect(results.offsets).to.eql([0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]);
  38. });
  39. it('handles changing the field delimiter', () => {
  40. let data = `a\tb\tc\td\n0\t1\t2\t3\n4\t5\t6\t7\n`;
  41. let options = {data, delimiter: '\t', rowDelimiter: '\n'};
  42. let results;
  43. results = parseDSV({...options, columnOffsets: false});
  44. expect(results.nrows).to.eql(3);
  45. expect(results.offsets).to.eql([0, 8, 16]);
  46. results = parseDSV({...options, columnOffsets: true});
  47. expect(results.nrows).to.eql(3);
  48. expect(results.ncols).to.eql(4);
  49. expect(results.offsets).to.eql([0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]);
  50. });
  51. it('handles starting on a new row', () => {
  52. let data = `a,b,c,d\n0,1,2,3\n4,5,6,7\n`;
  53. let options = {data, rowDelimiter: '\n', startIndex: 8};
  54. let results;
  55. results = parseDSV({...options, columnOffsets: false});
  56. expect(results.nrows).to.eql(2);
  57. expect(results.offsets).to.eql([8, 16]);
  58. results = parseDSV({...options, columnOffsets: true});
  59. expect(results.nrows).to.eql(2);
  60. expect(results.ncols).to.eql(4);
  61. expect(results.offsets).to.eql([8, 10, 12, 14, 16, 18, 20, 22]);
  62. });
  63. it('handles a max row argument', () => {
  64. let data = `a,b,c,d\n0,1,2,3\n4,5,6,7\n`;
  65. let options = {data, rowDelimiter: '\n', maxRows: 2};
  66. let results;
  67. results = parseDSV({...options, columnOffsets: false});
  68. expect(results.nrows).to.eql(2);
  69. expect(results.offsets).to.eql([0, 8]);
  70. results = parseDSV({...options, columnOffsets: true});
  71. expect(results.nrows).to.eql(2);
  72. expect(results.ncols).to.eql(4);
  73. expect(results.offsets).to.eql([0, 2, 4, 6, 8, 10, 12, 14]);
  74. });
  75. it('handles a start index and max row argument', () => {
  76. let data = `a,b,c,d\n0,1,2,3\n4,5,6,7\n`;
  77. let options = {data, rowDelimiter: '\n', startIndex: 8, maxRows: 1};
  78. let results;
  79. results = parseDSV({...options, columnOffsets: false});
  80. expect(results.nrows).to.eql(1);
  81. expect(results.offsets).to.eql([8]);
  82. results = parseDSV({...options, columnOffsets: true});
  83. expect(results.nrows).to.eql(1);
  84. expect(results.ncols).to.eql(4);
  85. expect(results.offsets).to.eql([8, 10, 12, 14]);
  86. });
  87. it('adjusts columns to match first row by default', () => {
  88. let data = `a,b,c,d\n0,\n1,2,3,4,5,6`;
  89. let options = {data, rowDelimiter: '\n'};
  90. let results;
  91. // results = parseDSV({...options, columnOffsets: false});
  92. // expect(results.nrows).to.eql(3);
  93. // expect(results.offsets).to.eql([0, 8, 12]);
  94. results = parseDSV({...options, columnOffsets: true});
  95. expect(results.nrows).to.eql(3);
  96. expect(results.ncols).to.eql(4);
  97. expect(results.offsets).to.eql([0, 2, 4, 6, 8, 10, 10, 10, 11, 13, 15, 17]);
  98. });
  99. it('adjusts columns to match first row by default with CRLF row delimiter', () => {
  100. let data = `a,b,c,d\r\n0,\r\n1,2,3,4,5,6`;
  101. let options = {data, rowDelimiter: '\r\n'};
  102. let results;
  103. // results = parseDSV({...options, columnOffsets: false});
  104. // expect(results.nrows).to.eql(3);
  105. // expect(results.offsets).to.eql([0, 8, 12]);
  106. results = parseDSV({...options, columnOffsets: true});
  107. expect(results.nrows).to.eql(3);
  108. expect(results.ncols).to.eql(4);
  109. expect(results.offsets).to.eql([ 0, 2, 4, 6, 9, 11, 11, 11, 13, 15, 17, 19 ]);
  110. });
  111. it('adjusts columns to match ncols', () => {
  112. let data = `a,b,c,d\n0,\n1,2,3,4,5,6`;
  113. let options = {data, rowDelimiter: '\n', ncols: 5};
  114. let results;
  115. // results = parseDSV({...options, columnOffsets: false});
  116. // expect(results.nrows).to.eql(3);
  117. // expect(results.offsets).to.eql([0, 8, 12]);
  118. results = parseDSV({...options, columnOffsets: true});
  119. expect(results.nrows).to.eql(3);
  120. expect(results.ncols).to.eql(5);
  121. expect(results.offsets).to.eql([0, 2, 4, 6, 7, 8, 10, 10, 10, 10, 11, 13, 15, 17, 19]);
  122. });
  123. it('adjusts columns to match ncols with CRLF row delimiter', () => {
  124. let data = `a,b,c,d\r\n0,\r\n1,2,3,4,5,6`;
  125. let options = {data, rowDelimiter: '\r\n', ncols: 5};
  126. let results;
  127. // results = parseDSV({...options, columnOffsets: false});
  128. // expect(results.nrows).to.eql(3);
  129. // expect(results.offsets).to.eql([0, 8, 12]);
  130. results = parseDSV({...options, columnOffsets: true});
  131. expect(results.nrows).to.eql(3);
  132. expect(results.ncols).to.eql(5);
  133. expect(results.offsets).to.eql([0, 2, 4, 6, 7, 9, 11, 11, 11, 11, 13, 15, 17, 19, 21]);
  134. });
  135. it('adjusts columns to match ncols with one row', () => {
  136. let data = `a,b,c,d`;
  137. let options = {data, rowDelimiter: '\n', ncols: 7};
  138. let results;
  139. // results = parseDSV({...options, columnOffsets: false});
  140. // expect(results.nrows).to.eql(3);
  141. // expect(results.offsets).to.eql([0, 8, 12]);
  142. results = parseDSV({...options, columnOffsets: true});
  143. expect(results.nrows).to.eql(1);
  144. expect(results.ncols).to.eql(7);
  145. expect(results.offsets).to.eql([0, 2, 4, 6, 7, 7, 7]);
  146. });
  147. it('adjusts columns to match ncols with one row and trailing delimiter', () => {
  148. let data = `a,b,c,d\n`;
  149. let options = {data, rowDelimiter: '\n', ncols: 7};
  150. let results;
  151. // results = parseDSV({...options, columnOffsets: false});
  152. // expect(results.nrows).to.eql(3);
  153. // expect(results.offsets).to.eql([0, 8, 12]);
  154. results = parseDSV({...options, columnOffsets: true});
  155. expect(results.nrows).to.eql(1);
  156. expect(results.ncols).to.eql(7);
  157. expect(results.offsets).to.eql([0, 2, 4, 6, 7, 7, 7]);
  158. });
  159. it('handles a single row delimiter', () => {
  160. let data = `\n`;
  161. let options = {data, rowDelimiter: '\n'};
  162. let results;
  163. // results = parseDSV({...options, columnOffsets: false});
  164. // expect(results.nrows).to.eql(3);
  165. // expect(results.offsets).to.eql([0, 8, 12]);
  166. results = parseDSV({...options, columnOffsets: true});
  167. expect(results.nrows).to.eql(1);
  168. expect(results.ncols).to.eql(1);
  169. expect(results.offsets).to.eql([0]);
  170. });
  171. });
  172. });
  173. // console.log(Array.from(results.offsets));
  174. // console.log(Array.from(results.offsets).map(i => data[i]));
  175. // console.log(Array.from(results.offsets).map((i, ind, arr) => data.slice(i, arr[ind + 1])));