tccsvreadwrite.pp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. unit tccsvreadwrite;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testutils, testregistry, csvreadwrite;
  6. type
  7. { TTestCSVReadWrite }
  8. TTestCSVReadWrite= class(TTestCase)
  9. private
  10. FData: TStrings;
  11. FParser: TCSVParser;
  12. procedure AssertLine(ARow: Integer; AValues: array of string);
  13. procedure HaveNext(ARow, ACol: integer; AValue: String);
  14. protected
  15. procedure SetUp; override;
  16. procedure TearDown; override;
  17. Property Parser : TCSVParser Read FParser;
  18. Property Data : TStrings Read FData;
  19. published
  20. procedure TestEmpty;
  21. Procedure TestNormalLine;
  22. Procedure TestQuotedLine;
  23. Procedure TestInlineQuotedLine;
  24. Procedure TestQuotedNewLine;
  25. Procedure Test2Lines;
  26. Procedure TestEscapedQuotes;
  27. end;
  28. implementation
  29. procedure TTestCSVReadWrite.TestEmpty;
  30. begin
  31. AssertNotNull('Have parser',Parser);
  32. end;
  33. procedure TTestCSVReadWrite.HaveNext(ARow,ACol: integer; AValue : String);
  34. Var
  35. CN : String;
  36. begin
  37. CN:=Format('Cell(row: %d, col: %d)',[ARow,ACol]);
  38. AssertTrue('Have '+CN,Parser.ParseNextCell);
  39. AssertEquals(CN+': Row matches',ARow,Parser.CurrentRow);
  40. AssertEquals(CN+': Col matched',ACol,Parser.CurrentCol);
  41. AssertEquals(CN+': Value',AValue,Parser.CurrentCellText);
  42. end;
  43. procedure TTestCSVReadWrite.AssertLine(ARow: Integer; AValues: array of string);
  44. Var
  45. I : Integer;
  46. begin
  47. For I:=0 to Length(AValues)-1 do
  48. HaveNext(ARow,I,AValues[i]);
  49. end;
  50. procedure TTestCSVReadWrite.TestNormalLine;
  51. begin
  52. FParser.SetSource('this,is,a,normal,line');
  53. AssertLine(0,['this','is','a','normal','line']);
  54. end;
  55. procedure TTestCSVReadWrite.TestQuotedLine;
  56. begin
  57. FParser.SetSource('"this","is","a","quoted","line"');
  58. AssertLine(0,['this','is','a','quoted','line']);
  59. end;
  60. procedure TTestCSVReadWrite.TestInlineQuotedLine;
  61. begin
  62. FParser.SetSource('"this","line",has,mixed" quoting"');
  63. AssertLine(0,['this','line','has','mixed quoting']);
  64. end;
  65. procedure TTestCSVReadWrite.TestQuotedNewLine;
  66. begin
  67. FParser.SetSource('"this","line",has,"an embedded'+lineEnding+'newline"');
  68. AssertLine(0,['this','line','has','an embedded'+lineending+'newline']);
  69. end;
  70. procedure TTestCSVReadWrite.Test2Lines;
  71. begin
  72. FParser.SetSource('"this","line",has,an embedded'+lineEnding+'newline');
  73. AssertLine(0,['this','line','has','an embedded']);
  74. AssertLine(1,['newline']);
  75. end;
  76. procedure TTestCSVReadWrite.TestEscapedQuotes;
  77. begin
  78. FParser.SetSource('"this","line",has,"an embedded "" quote"');
  79. AssertLine(0,['this','line','has','an embedded " quote']);
  80. end;
  81. procedure TTestCSVReadWrite.SetUp;
  82. begin
  83. FParser:=TCSVParser.Create;
  84. FData:=Tstrings.Create;
  85. end;
  86. procedure TTestCSVReadWrite.TearDown;
  87. begin
  88. FreeAndNil(FData);
  89. FreeAndNil(Fparser);
  90. end;
  91. initialization
  92. RegisterTest(TTestCSVReadWrite);
  93. end.