2
0

utccsvreadwrite.pp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. unit utcCSVReadWrite;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, punit, csvreadwrite;
  6. procedure RegisterTests;
  7. implementation
  8. var
  9. FData: TStrings;
  10. FParser: TCSVParser;
  11. procedure HaveNext(ARow, ACol: integer; AValue: String);
  12. var
  13. CN: String;
  14. begin
  15. CN := Format('Cell(row: %d, col: %d)', [ARow, ACol]);
  16. AssertTrue('Have ' + CN, FParser.ParseNextCell);
  17. AssertEquals(CN + ': Row matches', ARow, FParser.CurrentRow);
  18. AssertEquals(CN + ': Col matches', ACol, FParser.CurrentCol);
  19. AssertEquals(CN + ': Value', AValue, FParser.CurrentCellText);
  20. end;
  21. procedure AssertLine(ARow: Integer; const AValues: array of String);
  22. var
  23. I: Integer;
  24. begin
  25. for I := 0 to High(AValues) do
  26. HaveNext(ARow, I, AValues[I]);
  27. end;
  28. function Setup: TTestString;
  29. begin
  30. Result := '';
  31. if Assigned(FParser) then
  32. FParser.Free;
  33. FParser := TCSVParser.Create;
  34. if Assigned(FData) then
  35. FData.Free;
  36. FData := TStringList.Create;
  37. end;
  38. function TearDown: TTestString;
  39. begin
  40. Result := '';
  41. FreeAndNil(FData);
  42. FreeAndNil(FParser);
  43. end;
  44. function TCSVReadWrite_TestEmpty: TTestString;
  45. begin
  46. Result := '';
  47. AssertNotNull('Have parser', FParser);
  48. end;
  49. function TCSVReadWrite_TestNormalLine: TTestString;
  50. begin
  51. Result := '';
  52. FParser.SetSource('this,is,a,normal,line');
  53. AssertLine(0, ['this', 'is', 'a', 'normal', 'line']);
  54. end;
  55. function TCSVReadWrite_TestQuotedLine: TTestString;
  56. begin
  57. Result := '';
  58. FParser.SetSource('"this","is","a","quoted","line"');
  59. AssertLine(0, ['this', 'is', 'a', 'quoted', 'line']);
  60. end;
  61. function TCSVReadWrite_TestInlineQuotedLine: TTestString;
  62. begin
  63. Result := '';
  64. FParser.SetSource('"this","line",has,mixed" quoting"');
  65. AssertLine(0, ['this', 'line', 'has', 'mixed quoting']);
  66. end;
  67. function TCSVReadWrite_TestQuotedNewLine: TTestString;
  68. begin
  69. Result := '';
  70. FParser.SetSource('"this","line",has,"an embedded' + LineEnding + 'newline"');
  71. AssertLine(0, ['this', 'line', 'has', 'an embedded' + LineEnding + 'newline']);
  72. end;
  73. function TCSVReadWrite_Test2Lines: TTestString;
  74. begin
  75. Result := '';
  76. FParser.SetSource('"this","line",has,an embedded' + LineEnding + 'newline');
  77. AssertLine(0, ['this', 'line', 'has', 'an embedded']);
  78. AssertLine(1, ['newline']);
  79. end;
  80. function TCSVReadWrite_TestEscapedQuotes: TTestString;
  81. begin
  82. Result := '';
  83. FParser.SetSource('"this","line",has,"an embedded "" quote"');
  84. AssertLine(0, ['this', 'line', 'has', 'an embedded " quote']);
  85. end;
  86. procedure RegisterTests;
  87. begin
  88. AddSuite('TCSVReadWriteTests', @Setup, @TearDown,Nil,True);
  89. AddTest('TestEmpty', @TCSVReadWrite_TestEmpty, 'TCSVReadWriteTests');
  90. AddTest('TestNormalLine', @TCSVReadWrite_TestNormalLine, 'TCSVReadWriteTests');
  91. AddTest('TestQuotedLine', @TCSVReadWrite_TestQuotedLine, 'TCSVReadWriteTests');
  92. AddTest('TestInlineQuotedLine', @TCSVReadWrite_TestInlineQuotedLine, 'TCSVReadWriteTests');
  93. AddTest('TestQuotedNewLine', @TCSVReadWrite_TestQuotedNewLine, 'TCSVReadWriteTests');
  94. AddTest('Test2Lines', @TCSVReadWrite_Test2Lines, 'TCSVReadWriteTests');
  95. AddTest('TestEscapedQuotes', @TCSVReadWrite_TestEscapedQuotes, 'TCSVReadWriteTests');
  96. end;
  97. end.