tccsvdataset.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548
  1. unit tccsvdataset;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, db, SysUtils, fpcunit, testregistry, csvdataset;
  6. type
  7. { TTestCSVDataset }
  8. TTestCSVDataset= class(TTestCase)
  9. private
  10. FCSVDataset: TCSVDataset;
  11. // Load CSVDataset from CSV stream containing lines
  12. procedure DoOpenClose(FieldNames: Boolean);
  13. Procedure LoadFromLines(Const Lines: Array of string);
  14. // Save CSVDataset to CSV stream, transform to lines
  15. Procedure SaveToLines(Const Lines: TStrings);
  16. // Save CSVDataset to CSV stream, transform to lines, compare with given lines
  17. Procedure AssertLines(Const Lines: Array of string);
  18. protected
  19. procedure SetUp; override;
  20. procedure TearDown; override;
  21. Property CSVDataset : TCSVDataset Read FCSVDataset;
  22. published
  23. procedure TestEmpty;
  24. procedure TestDefaults;
  25. Procedure TestLoadEmptyDefault;
  26. Procedure TestLoadEmptyFirstLineAsNames;
  27. Procedure TestLoad2fieldsFirstLineAsNames;
  28. Procedure TestLoad2fields;
  29. Procedure TestLoad2Records2fields;
  30. Procedure TestLoad2Records2fieldsTabDelim;
  31. Procedure TestSaveEmptyDefault;
  32. Procedure TestSaveEmptyFirstLineAsNames;
  33. Procedure TestSaveOneRecordDefault;
  34. Procedure TestSaveOneRecordFirstLineAsNames;
  35. Procedure TestSaveTwoRecordsDefault;
  36. Procedure TestSaveTwoRecordsFirstLineAsNames;
  37. Procedure TestSaveTwoRecordsFirstLineAsNamesTabDelim;
  38. Procedure TestSaveOneRecord2FieldsDefault;
  39. Procedure TestSaveOneRecord2FieldsFirstLineAsNames;
  40. Procedure TestLoadPriorFieldDefs;
  41. Procedure TestLoadPriorFieldDefsNoFieldNames;
  42. Procedure TestLoadPriorFieldDefsNoFieldNamesWrongCount;
  43. Procedure TestLoadPriorFieldDefsFieldNamesWrongCount;
  44. Procedure TestLoadPriorFieldDefsFieldNamesWrongNames;
  45. Procedure TestOpenCloseCycle1;
  46. Procedure TestOpenCloseCycle2;
  47. end;
  48. implementation
  49. procedure TTestCSVDataset.TestEmpty;
  50. begin
  51. AssertNotNull('Have CSV dataset',CSVDataset);
  52. AssertFalse('Not open',CSVDataset.Active);
  53. AssertEquals('No fielddefs',0,CSVDataset.FieldDefs.Count);
  54. AssertEquals('Name','DS',CSVDataset.Name);
  55. end;
  56. procedure TTestCSVDataset.TestDefaults;
  57. begin
  58. With CSVDataset.CSVOptions do
  59. begin
  60. AssertEquals('DefaultFieldLength',255,DefaultFieldLength);
  61. AssertEquals('FirstLineAsFieldNames',False,FirstLineAsFieldNames);
  62. AssertEquals('Delimiter',',',Delimiter);
  63. AssertEquals('QuoteChar','"',QuoteChar);
  64. AssertEquals('LineEnding',sLineBreak,LineEnding);
  65. AssertEquals('IgnoreOuterWhitespace',False,IgnoreOuterWhitespace);
  66. AssertEquals('QuoteOuterWhitespace',True,QuoteOuterWhitespace);
  67. AssertEquals('EqualColCountPerRow',True,EqualColCountPerRow);
  68. end;
  69. end;
  70. procedure TTestCSVDataset.LoadFromLines(const Lines: array of string);
  71. Var
  72. L : TStringList;
  73. s : TStream;
  74. begin
  75. S:=Nil;
  76. L:=TStringList.Create;
  77. try
  78. L.AddStrings(Lines);
  79. S:=TStringStream.Create(L.Text);
  80. CSVDataset.LoadFromCSVStream(S);
  81. finally
  82. S.Free;
  83. L.Free;
  84. end;
  85. end;
  86. procedure TTestCSVDataset.SaveToLines(const Lines: TStrings);
  87. Var
  88. S : TStringStream;
  89. begin
  90. S:=TStringStream.Create('');
  91. try
  92. CSVDataset.SaveToCSVStream(S);
  93. Lines.Text:=S.DataString;
  94. {
  95. Writeln('----');
  96. Writeln(S.DataString);
  97. Writeln('----');
  98. }
  99. finally
  100. S.Free;
  101. end;
  102. end;
  103. procedure TTestCSVDataset.AssertLines(const Lines: array of string);
  104. Var
  105. L : TStrings;
  106. I : Integer;
  107. begin
  108. L:=TStringList.Create;
  109. try
  110. SaveToLines(L);
  111. AssertEquals('Number of lines',Length(Lines),L.Count);
  112. For I:=0 to L.Count-1 do
  113. AssertEquals('Correct line '+IntToStr(0),Lines[I],L[i]);
  114. finally
  115. L.Free;
  116. end;
  117. end;
  118. procedure TTestCSVDataset.TestLoadEmptyDefault;
  119. begin
  120. LoadFromLines(['a']);
  121. AssertEquals('Active',True,CSVDataset.Active);
  122. AssertEquals('field count',1,CSVDataset.FieldDefs.Count);
  123. AssertEquals('field name','Column1',CSVDataset.FieldDefs[0].Name);
  124. AssertEquals('field size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[0].Size);
  125. AssertEquals('Not Empty',False,CSVDataset.EOF and CSVDataset.BOF);
  126. AssertEquals('field contents','a',CSVDataset.Fields[0].AsString);
  127. end;
  128. procedure TTestCSVDataset.TestLoadEmptyFirstLineAsNames;
  129. begin
  130. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  131. CSVDataset.CSVOptions.DefaultFieldLength:=128;
  132. LoadFromLines(['a']);
  133. AssertEquals('Active',True,CSVDataset.Active);
  134. AssertEquals('field count',1,CSVDataset.FieldDefs.Count);
  135. AssertEquals('field name','a',CSVDataset.FieldDefs[0].Name);
  136. AssertEquals('field size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[0].Size);
  137. AssertEquals('Empty',True,CSVDataset.EOF and CSVDataset.BOF);
  138. end;
  139. procedure TTestCSVDataset.TestLoad2fieldsFirstLineAsNames;
  140. begin
  141. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  142. CSVDataset.CSVOptions.DefaultFieldLength:=128;
  143. LoadFromLines(['a,b']);
  144. AssertEquals('Active',True,CSVDataset.Active);
  145. AssertEquals('field count',2,CSVDataset.FieldDefs.Count);
  146. AssertEquals('field 0 name','a',CSVDataset.FieldDefs[0].Name);
  147. AssertEquals('field 0 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[0].Size);
  148. AssertEquals('field 1 name','b',CSVDataset.FieldDefs[1].Name);
  149. AssertEquals('field 1 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[1].Size);
  150. AssertEquals('Empty',True,CSVDataset.EOF and CSVDataset.BOF);
  151. end;
  152. procedure TTestCSVDataset.TestLoad2fields;
  153. begin
  154. CSVDataset.CSVOptions.DefaultFieldLength:=128;
  155. LoadFromLines(['a,b']);
  156. AssertEquals('Active',True,CSVDataset.Active);
  157. AssertEquals('field count',2,CSVDataset.FieldDefs.Count);
  158. AssertEquals('field 0 name','Column1',CSVDataset.FieldDefs[0].Name);
  159. AssertEquals('field 0 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[0].Size);
  160. AssertEquals('field 1 name','Column2',CSVDataset.FieldDefs[1].Name);
  161. AssertEquals('field 1 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[1].Size);
  162. AssertEquals('Empty',False,CSVDataset.EOF and CSVDataset.BOF);
  163. AssertEquals('Not Empty',False,CSVDataset.EOF and CSVDataset.BOF);
  164. AssertEquals('field 0 contents','a',CSVDataset.Fields[0].AsString);
  165. AssertEquals('field 1 contents','b',CSVDataset.Fields[1].AsString);
  166. end;
  167. procedure TTestCSVDataset.TestLoad2Records2fields;
  168. begin
  169. CSVDataset.CSVOptions.DefaultFieldLength:=128;
  170. LoadFromLines(['a,b','c,d']);
  171. AssertEquals('Active',True,CSVDataset.Active);
  172. AssertEquals('field count',2,CSVDataset.FieldDefs.Count);
  173. AssertEquals('field 0 name','Column1',CSVDataset.FieldDefs[0].Name);
  174. AssertEquals('field 0 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[0].Size);
  175. AssertEquals('field 1 name','Column2',CSVDataset.FieldDefs[1].Name);
  176. AssertEquals('field 1 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[1].Size);
  177. AssertEquals('Empty',False,CSVDataset.EOF and CSVDataset.BOF);
  178. AssertEquals('Not Empty',False,CSVDataset.EOF and CSVDataset.BOF);
  179. AssertEquals('field 0 contents','a',CSVDataset.Fields[0].AsString);
  180. AssertEquals('field 1 contents','b',CSVDataset.Fields[1].AsString);
  181. CSVDataset.Next;
  182. AssertEquals('not At EOF',False,CSVDataset.EOF);
  183. AssertEquals('field 0 contents','c',CSVDataset.Fields[0].AsString);
  184. AssertEquals('field 1 contents','d',CSVDataset.Fields[1].AsString);
  185. CSVDataset.Next;
  186. AssertEquals('At EOF',True,CSVDataset.EOF);
  187. end;
  188. procedure TTestCSVDataset.TestLoad2Records2fieldsTabDelim;
  189. begin
  190. CSVDataset.CSVOptions.Delimiter:=#9;
  191. CSVDataset.CSVOptions.DefaultFieldLength:=10;
  192. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  193. LoadFromLines(['f_a'#9'f_b','a1'#9'b1','a2'#9'b2']);
  194. AssertEquals('Active',True,CSVDataset.Active);
  195. AssertEquals('field count',2,CSVDataset.FieldDefs.Count);
  196. AssertEquals('field 0 name','f_a',CSVDataset.FieldDefs[0].Name);
  197. AssertEquals('field 0 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[0].Size);
  198. AssertEquals('field 1 name','f_b',CSVDataset.FieldDefs[1].Name);
  199. AssertEquals('field 1 size',CSVDataset.CSVOptions.DefaultFieldLength,CSVDataset.FieldDefs[1].Size);
  200. AssertEquals('field 0 contents','a1',CSVDataset.Fields[0].AsString);
  201. AssertEquals('field 1 contents','b1',CSVDataset.Fields[1].AsString);
  202. CSVDataset.Next;
  203. AssertEquals('field 0 contents','a2',CSVDataset.Fields[0].AsString);
  204. AssertEquals('field 1 contents','b2',CSVDataset.Fields[1].AsString);
  205. CSVDataset.Next;
  206. AssertEquals('At EOF',True,CSVDataset.EOF);
  207. end;
  208. procedure TTestCSVDataset.TestSaveEmptyDefault;
  209. begin
  210. CSVDataset.FieldDefs.Add('a',ftString);
  211. CSVDataset.CreateDataset;
  212. AssertLines([]);
  213. end;
  214. procedure TTestCSVDataset.TestSaveEmptyFirstLineAsNames;
  215. begin
  216. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  217. CSVDataset.FieldDefs.Add('a',ftString);
  218. CSVDataset.CreateDataset;
  219. AssertLines(['a']);
  220. end;
  221. procedure TTestCSVDataset.TestSaveOneRecordDefault;
  222. begin
  223. // CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  224. CSVDataset.FieldDefs.Add('a',ftString,20);
  225. CSVDataset.CreateDataset;
  226. CSVDataset.Append;
  227. CSVDataset.Fields[0].AsString:='b';
  228. CSVDataset.Post;
  229. AssertLines(['b']);
  230. end;
  231. procedure TTestCSVDataset.TestSaveOneRecordFirstLineAsNames;
  232. begin
  233. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  234. CSVDataset.FieldDefs.Add('a',ftString,20);
  235. CSVDataset.CreateDataset;
  236. CSVDataset.Append;
  237. CSVDataset.Fields[0].AsString:='b';
  238. CSVDataset.Post;
  239. AssertLines(['a','b']);
  240. end;
  241. procedure TTestCSVDataset.TestSaveTwoRecordsDefault;
  242. begin
  243. CSVDataset.FieldDefs.Add('a',ftString,20);
  244. CSVDataset.CreateDataset;
  245. CSVDataset.Append;
  246. CSVDataset.Fields[0].AsString:='b';
  247. CSVDataset.Post;
  248. CSVDataset.Append;
  249. CSVDataset.Fields[0].AsString:='c';
  250. CSVDataset.Post;
  251. AssertLines(['b','c']);
  252. end;
  253. procedure TTestCSVDataset.TestSaveTwoRecordsFirstLineAsNames;
  254. begin
  255. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  256. CSVDataset.FieldDefs.Add('a',ftString,20);
  257. CSVDataset.CreateDataset;
  258. CSVDataset.Append;
  259. CSVDataset.Fields[0].AsString:='b';
  260. CSVDataset.Post;
  261. CSVDataset.Append;
  262. CSVDataset.Fields[0].AsString:='c';
  263. CSVDataset.Post;
  264. AssertLines(['a','b','c']);
  265. end;
  266. procedure TTestCSVDataset.TestSaveTwoRecordsFirstLineAsNamesTabDelim;
  267. begin
  268. CSVDataset.CSVOptions.Delimiter:=#9;
  269. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  270. CSVDataset.FieldDefs.Add('f_a',ftString,2);
  271. CSVDataset.FieldDefs.Add('f_b',ftString,2);
  272. CSVDataset.CreateDataset;
  273. CSVDataset.InsertRecord(['a2','b2']);
  274. CSVDataset.InsertRecord(['a1','b1']);
  275. AssertLines(['f_a'#9'f_b','a1'#9'b1','a2'#9'b2']);
  276. end;
  277. procedure TTestCSVDataset.TestSaveOneRecord2FieldsDefault;
  278. begin
  279. CSVDataset.FieldDefs.Add('a',ftString,20);
  280. CSVDataset.FieldDefs.Add('b',ftString,20);
  281. CSVDataset.CreateDataset;
  282. CSVDataset.Append;
  283. CSVDataset.Fields[0].AsString:='c';
  284. CSVDataset.Fields[1].AsString:='d';
  285. CSVDataset.Post;
  286. AssertLines(['c,d']);
  287. end;
  288. procedure TTestCSVDataset.TestSaveOneRecord2FieldsFirstLineAsNames;
  289. begin
  290. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  291. CSVDataset.FieldDefs.Add('a',ftString,20);
  292. CSVDataset.FieldDefs.Add('b',ftString,20);
  293. CSVDataset.CreateDataset;
  294. CSVDataset.Append;
  295. CSVDataset.Fields[0].AsString:='c';
  296. CSVDataset.Fields[1].AsString:='d';
  297. CSVDataset.Post;
  298. AssertLines(['a,b','c,d']);
  299. end;
  300. procedure TTestCSVDataset.TestLoadPriorFieldDefs;
  301. begin
  302. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  303. CSVDataset.FieldDefs.Add('a',ftString,20);
  304. CSVDataset.FieldDefs.Add('b',ftInteger,4);
  305. LoadFromLines(['a,b','1,2']);
  306. AssertEquals('field count',2,CSVDataset.FieldDefs.Count);
  307. AssertEquals('field 0 name','a',CSVDataset.FieldDefs[0].Name);
  308. AssertEquals('field 0 size',20,CSVDataset.FieldDefs[0].Size);
  309. AssertEquals('field 1 name','b',CSVDataset.FieldDefs[1].Name);
  310. AssertEquals('field 1 size',4,CSVDataset.FieldDefs[1].Size);
  311. AssertEquals('field 1 typee',Ord(ftInteger),Ord(CSVDataset.FieldDefs[1].DataType));
  312. AssertEquals('Not Empty',False,CSVDataset.EOF and CSVDataset.BOF);
  313. AssertEquals('field 0 contents','1',CSVDataset.Fields[0].AsString);
  314. AssertEquals('field 1 contents',2,CSVDataset.Fields[1].AsInteger);
  315. end;
  316. procedure TTestCSVDataset.TestLoadPriorFieldDefsNoFieldNames;
  317. begin
  318. CSVDataset.FieldDefs.Add('a',ftString,20);
  319. CSVDataset.FieldDefs.Add('b',ftInteger,4);
  320. LoadFromLines(['1,2']);
  321. AssertEquals('field count',2,CSVDataset.FieldDefs.Count);
  322. AssertEquals('field 0 name','a',CSVDataset.FieldDefs[0].Name);
  323. AssertEquals('field 0 size',20,CSVDataset.FieldDefs[0].Size);
  324. AssertEquals('field 1 name','b',CSVDataset.FieldDefs[1].Name);
  325. AssertEquals('field 1 size',4,CSVDataset.FieldDefs[1].Size);
  326. AssertEquals('field 1 typee',Ord(ftInteger),Ord(CSVDataset.FieldDefs[1].DataType));
  327. AssertEquals('Not Empty',False,CSVDataset.EOF and CSVDataset.BOF);
  328. AssertEquals('field 0 contents','1',CSVDataset.Fields[0].AsString);
  329. AssertEquals('field 1 contents',2,CSVDataset.Fields[1].AsInteger);
  330. end;
  331. procedure TTestCSVDataset.TestLoadPriorFieldDefsNoFieldNamesWrongCount;
  332. Var
  333. OK : Boolean;
  334. begin
  335. CSVDataset.FieldDefs.Add('a',ftString,20);
  336. CSVDataset.FieldDefs.Add('b',ftInteger,4);
  337. try
  338. LoadFromLines(['1']);
  339. OK:=False;
  340. except
  341. OK:=true;
  342. end;
  343. if not OK then
  344. Fail('Expected exception, but none raised');
  345. end;
  346. procedure TTestCSVDataset.TestLoadPriorFieldDefsFieldNamesWrongCount;
  347. const
  348. EM = 'DS : CSV File Field count (1) does not match dataset field count (2).';
  349. Var
  350. OK : String;
  351. begin
  352. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  353. CSVDataset.FieldDefs.Add('a',ftString,20);
  354. CSVDataset.FieldDefs.Add('b',ftInteger,4);
  355. try
  356. LoadFromLines(['A']);
  357. OK:='Expected exception, but none raised';
  358. except
  359. on E : Exception do
  360. if (E.Message<>EM) then
  361. OK:=ComparisonMsg(EM,E.Message);
  362. end;
  363. if (OK<>'') then
  364. Fail(OK);
  365. end;
  366. procedure TTestCSVDataset.TestLoadPriorFieldDefsFieldNamesWrongNames;
  367. const
  368. EM = 'DS : CSV File field 1: name "c" does not match dataset field name "b".';
  369. Var
  370. OK : String;
  371. begin
  372. CSVDataset.CSVOptions.FirstLineAsFieldNames:=True;
  373. CSVDataset.FieldDefs.Add('a',ftString,20);
  374. CSVDataset.FieldDefs.Add('b',ftInteger,4);
  375. try
  376. LoadFromLines(['a,c']);
  377. OK:='No exception raised';
  378. except
  379. on E : Exception do
  380. if (E.Message<>EM) then
  381. OK:=ComparisonMsg(EM,E.Message)
  382. end;
  383. if (OK<>'') then
  384. Fail(OK);
  385. end;
  386. const
  387. FILENAME = 'test.dat';
  388. procedure TTestCSVDataset.DoOpenClose(FieldNames : Boolean);
  389. begin
  390. CSVDataset.FileName := FILENAME;
  391. With CSVDataset do
  392. begin
  393. CSVOptions.FirstLineAsFieldNames := FieldNames;
  394. CSVOptions.DefaultFieldLength := 255;
  395. CSVOptions.Delimiter := ',';
  396. CSVOptions.QuoteChar := '"';
  397. CSVOptions.IgnoreOuterWhitespace := False;
  398. CSVOptions.QuoteOuterWhitespace := True;
  399. end;
  400. // When the program runs for the first time, the data file does not yet exist.
  401. // We must create the FieldDefs and create the dataset.
  402. if FileExists(CSVDataset.FileName) then
  403. CSVDataset.Open
  404. else
  405. with CSVDataset do
  406. begin
  407. FieldDefs.Add('FirstName', ftString, 20);
  408. FieldDefs.Add('LastName', ftstring, 20);
  409. FieldDefs.Add('City', ftString, 20);
  410. FieldDefs.Add('Address', ftString, 30);
  411. FieldDefs.Add('Birthdate', ftDate);
  412. CreateDataset;
  413. // Open the dataset...
  414. Open;
  415. // ... and add some dummy data:
  416. // Names from https://donatellanobatti.blogspot.de/
  417. Append;
  418. FieldByName('FirstName').AsString := 'Walter';
  419. FieldByName('LastName').AsString := 'Mellon';
  420. FieldByName('City').AsString := 'Oklahoma City';
  421. FieldByName('Address').AsString := '1261, Main Street';
  422. FieldbyName('Birthdate').AsDateTime := EncodeDate(1980, 1, 1);
  423. Post;
  424. Append;
  425. FieldByName('FirstName').AsString := 'Mario';
  426. FieldByName('LastName').AsString := 'Speedwagon';
  427. FieldByName('City').AsString := 'Hollywood';
  428. FieldByName('Address').AsString := '1500, Hollywood Blvd';
  429. FieldbyName('Birthdate').AsDateTime := EncodeDate(1982, 12, 17);
  430. Post;
  431. Append;
  432. FieldByName('FirstName').AsString := 'Anna';
  433. FieldByName('LastName').AsString := 'Mull';
  434. FieldByName('City').AsString := 'Los Angeles';
  435. FieldByName('Address').AsString := '2202, Capitol Square';
  436. FieldbyName('Birthdate').AsDateTime := EncodeDate(1982, 12, 17);
  437. Post;
  438. end;
  439. // Would be 4 if first line misinterpreted
  440. AssertEquals('RecordCount',3,CSVDataset.RecordCount);
  441. // This will write the file;
  442. CSVDataset.Close;
  443. end;
  444. procedure TTestCSVDataset.TestOpenCloseCycle1;
  445. begin
  446. if FileExists(FileName) then
  447. AssertTrue('Delete before',DeleteFile(FileName));
  448. try
  449. // This will create the file
  450. DoOpenClose(True);
  451. // Recreate to be sure
  452. FreeAndNil(FCSVDataset);
  453. FCSVDataset:=TCSVDataset.Create(Nil);
  454. FCSVDataset.Name:='DS';
  455. DoOpenClose(True);
  456. except
  457. On E : Exception do
  458. Fail('Failed using exception %s : %s',[E.ClassName,E.Message]);
  459. end;
  460. if FileExists(FileName) then
  461. AssertTrue('Delete after',DeleteFile(FileName));
  462. end;
  463. procedure TTestCSVDataset.TestOpenCloseCycle2;
  464. begin
  465. if FileExists(FileName) then
  466. AssertTrue('Delete before',DeleteFile(FileName));
  467. try
  468. // This will create the file
  469. DoOpenClose(False);
  470. // Recreate to be sure
  471. FreeAndNil(FCSVDataset);
  472. FCSVDataset:=TCSVDataset.Create(Nil);
  473. FCSVDataset.Name:='DS';
  474. DoOpenClose(False);
  475. except
  476. On E : Exception do
  477. Fail('Failed using exception %s : %s',[E.ClassName,E.Message]);
  478. end;
  479. if FileExists(FileName) then
  480. AssertTrue('Delete after',DeleteFile(FileName));
  481. end;
  482. procedure TTestCSVDataset.SetUp;
  483. begin
  484. FCSVDataset:=TCSVDataset.Create(Nil);
  485. FCSVDataset.Name:='DS';
  486. end;
  487. procedure TTestCSVDataset.TearDown;
  488. begin
  489. FreeAndNil(FCSVDataset);
  490. end;
  491. Initialization
  492. RegisterTest(TTestCSVDataset);
  493. end.