testdbexport.pas 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  1. unit TestDBExport;
  2. {
  3. Unit tests which are common to all datasets. Tests export to various formats.
  4. }
  5. {$IFDEF FPC}
  6. {$mode Delphi}{$H+}
  7. {$ENDIF}
  8. interface
  9. uses
  10. fpcunit, testregistry,
  11. Classes, SysUtils, db, ToolsUnit, bufdataset,
  12. fpDBExport,
  13. fpXMLXSDExport,
  14. fpdbfexport,
  15. fpcsvexport,
  16. fpfixedexport,
  17. fpSimpleXMLExport,
  18. fpsimplejsonexport,
  19. fpSQLExport,
  20. fptexexport,
  21. fprtfexport;
  22. type
  23. TDetailedExportFormats = (efDBaseIII, efDBaseIV, efDBaseVII, efCSV, efFixedLengthText, efFoxpro,
  24. efJSON, efRTF, efSQL, efTeX, efXML, efXMLXSDAccess, efXMLXSDADONet, efXMLXSDClientDataset, efXMLXSDExcel);
  25. const
  26. TDetailedExportExtensions: array [TDetailedExportFormats] of string[5] =
  27. ('.dbf','.dbf','.dbf','.csv','.txt','.dbf','.json','.rtf','.sql','.tex',
  28. '.xml','.xml','.xml','.xml','.xml'); //File extension for the corresponding TDetailedExportFormats
  29. type
  30. { TTestDBExport }
  31. TTestDBExport = class(TTestCase)
  32. private
  33. FExportTempDir: string; //directory where test files are placed
  34. FKeepFilesAfterTest: boolean; //remove files after testing?
  35. function FieldSupported(const FieldType: TFieldType;
  36. const ExportSubFormat: TDetailedExportFormats): boolean; //Checks if output dataset supports a certain field type
  37. procedure GenericExportTest(Exporter: TCustomDatasetExporter; ExportFormat: TDetailedExportFormats);
  38. function GetFileSize(const FileName: string): integer; //Gets a file's size
  39. protected
  40. procedure SetUp; override;
  41. procedure TearDown; override;
  42. published
  43. procedure TestDBFExport_DBaseIV;
  44. procedure TestDBFExport_DBaseVII;
  45. procedure TestDBFExport_FoxPro;
  46. procedure TestCSVExport; //tests csv export with default values
  47. procedure TestCSVExport_RFC4180WithHeader; //tests csv export with settings that match RFC4180
  48. procedure TestCSVExport_TweakSettingsSemicolon; //tests semicolon delimited, custom country values
  49. procedure TestFixedTextExport;
  50. procedure TestJSONExport;
  51. procedure TestRTFExport;
  52. procedure TestSQLExport;
  53. procedure TestTeXExport;
  54. procedure TestXMLExport; //tests simple xml export
  55. procedure TestXSDExport_Access_NoXSD_DecimalOverride; //tests xmlxsd export
  56. procedure TestXSDExport_Access_NoXSD_NoDecimalOverride; //tests xmlxsd export
  57. procedure TestXSDExport_Access_XSD_DecimalOverride; //tests xmlxsd export
  58. procedure TestXSDExport_Access_XSD_NoDecimalOverride; //tests xmlxsd export
  59. procedure TestXSDExport_ADONET_NoXSD; //tests xmlxsd export
  60. procedure TestXSDExport_ADONET_XSD; //tests xmlxsd export
  61. procedure TestXSDExport_DelphiClientDataset; //tests xmlxsd export
  62. procedure TestXSDExport_Excel; //tests xmlxsd export
  63. end;
  64. implementation
  65. function TTestDBExport.FieldSupported(const FieldType: TFieldType;
  66. const ExportSubFormat: TDetailedExportFormats): boolean;
  67. const
  68. // Alphabetically sorted for quick review:
  69. DBaseVIIUnsupported=[ftADT,ftArray,ftBCD,ftBytes,ftCurrency,ftCursor,ftDataSet,
  70. ftFixedWideChar,
  71. ftFMTBcd,ftFmtMemo,ftGraphic,ftGuid,ftIDispatch,ftInterface,ftOraBlob,
  72. ftOraClob,ftParadoxOle,ftReference,ftTime,ftTimeStamp,ftTypedBinary,
  73. ftUnknown,ftVarBytes,ftVariant,ftWidememo,ftWideString];
  74. FoxProUnsupported= [ftADT,ftArray, ftCursor,ftDataSet,
  75. ftFixedWideChar,
  76. ftFMTBcd,ftFmtMemo,ftGraphic,ftGuid,ftIDispatch,ftInterface,ftOraBlob,
  77. ftOraClob,ftParadoxOle,ftReference,ftTime,ftTimeStamp,ftTypedBinary,
  78. ftUnknown,ftVarBytes,ftVariant,ftWideMemo,ftWideString];
  79. begin
  80. result:=true;
  81. case ExportSubFormat of
  82. efDBaseIII: if FieldType in DBaseVIIUnsupported+[ftAutoInc] then result:=false;
  83. efDBaseIV: if FieldType in DBaseVIIUnsupported+[ftAutoInc] then result:=false;
  84. efDBaseVII: if FieldType in DBaseVIIUnsupported then result:=false;
  85. efCSV: result:=true;
  86. efFixedLengthText: result:=true; //todo: verify if all fields are really supported. Quick glance would indicate so
  87. efFoxpro: if FieldType in FoxProUnsupported then result:=false;
  88. efJSON: result:=true;
  89. efRTF: result:=true;
  90. efSQL: result:=true;
  91. efTeX: result:=true;
  92. efXML: result:=true;
  93. efXMLXSDAccess, efXMLXSDADONet, efXMLXSDClientDataset, efXMLXSDExcel: result:=true;
  94. else
  95. begin
  96. result:=false;
  97. Fail('Error in test code itself: FieldSupported unknown ExportSubFormat '+inttostr(ord(ExportSubFormat)));
  98. end;
  99. end;
  100. end;
  101. procedure TTestDBExport.GenericExportTest(Exporter: TCustomDatasetExporter; ExportFormat: TDetailedExportFormats);
  102. var
  103. FieldMapping: TExportFields;
  104. NumberExported: integer;
  105. i: integer;
  106. begin
  107. FieldMapping:=TExportFields.Create(Exporter.ExportFields.ItemClass);
  108. try
  109. Exporter.Dataset := DBConnector.GetFieldDataset;
  110. Exporter.Dataset.Open;
  111. Exporter.BuildDefaultFieldMap(FieldMapping);
  112. // Remove unsupported data types in export from the mapping.
  113. // Cannot use FieldMapping[i].Field.DataType as
  114. // the field hasn't been set by BindFields yet... assume the
  115. // order of original fields and their mapping match
  116. for i:=Exporter.Dataset.Fields.Count-1 downto 0 do
  117. begin
  118. if not FieldSupported(
  119. Exporter.Dataset.Fields[i].DataType,
  120. ExportFormat) then
  121. FieldMapping.Delete(i);
  122. end;
  123. for i:=0 to FieldMapping.Count-1 do
  124. begin
  125. Exporter.ExportFields.Add.Assign(FieldMapping[i]);
  126. end;
  127. NumberExported := Exporter.Execute;
  128. Exporter.Dataset.Last;
  129. Exporter.Dataset.First;
  130. AssertEquals('Number of records exported', NumberExported,
  131. Exporter.Dataset.RecordCount);
  132. Exporter.Dataset.Close;
  133. finally
  134. FieldMapping.Free;
  135. end;
  136. end;
  137. function TTestDBExport.GetFileSize(const FileName: string): integer;
  138. Var
  139. F : file of byte;
  140. begin
  141. result:=0;
  142. assign (F,FileName);
  143. try
  144. reset(F);
  145. result:=filesize(F);
  146. finally
  147. close(F);
  148. end;
  149. end;
  150. procedure TTestDBExport.SetUp;
  151. begin
  152. inherited SetUp;
  153. InitialiseDBConnector;
  154. DBConnector.StartTest; //is this needed?
  155. FExportTempDir:=IncludeTrailingPathDelimiter(ExpandFileName(''))+'exporttests'+PathDelim; //Store output in subdirectory
  156. ForceDirectories(FExportTempDir);
  157. FKeepFilesAfterTest:=true; //keep test files; consistent with other units right now
  158. end;
  159. procedure TTestDBExport.TearDown;
  160. begin
  161. inherited TearDown;
  162. DBConnector.StopTest; //is this needed?
  163. FreeDBConnector;
  164. end;
  165. procedure TTestDBExport.TestDBFExport_DBaseVII;
  166. var
  167. Exporter: TFPDBFExport;
  168. ExportFormat: TDetailedExportFormats;
  169. ExportSettings:TDBFExportFormatSettings;
  170. begin
  171. Exporter := TFPDBFExport.Create(nil);
  172. ExportSettings:=TDBFExportFormatSettings.Create(true);
  173. try
  174. ExportFormat:=efDBaseVII;
  175. ExportSettings.TableFormat:=tfDBaseVII;
  176. // Use export subtype position to differentiate output filenames:
  177. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  178. lowercase(rightstr(TestName,5)) +
  179. TDetailedExportExtensions[ExportFormat];
  180. Exporter.FormatSettings:=ExportSettings;
  181. GenericExportTest(Exporter, ExportFormat);
  182. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  183. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  184. finally
  185. if (FKeepFilesAfterTest = False) then
  186. DeleteFile(Exporter.FileName);
  187. ExportSettings.Free;
  188. Exporter.Free;
  189. end;
  190. end;
  191. procedure TTestDBExport.TestDBFExport_DBaseIV;
  192. var
  193. Exporter: TFPDBFExport;
  194. ExportFormat: TDetailedExportFormats;
  195. ExportSettings:TDBFExportFormatSettings;
  196. begin
  197. Exporter := TFPDBFExport.Create(nil);
  198. ExportSettings:=TDBFExportFormatSettings.Create(true);
  199. try
  200. ExportFormat:=efDBaseIV;
  201. ExportSettings.TableFormat:=tfDBaseIV;
  202. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  203. lowercase(rightstr(TestName,5)) +
  204. TDetailedExportExtensions[ExportFormat];
  205. Exporter.FormatSettings:=ExportSettings;
  206. GenericExportTest(Exporter, ExportFormat);
  207. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  208. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  209. finally
  210. if (FKeepFilesAfterTest = False) then
  211. DeleteFile(Exporter.FileName);
  212. ExportSettings.Free;
  213. Exporter.Free;
  214. end;
  215. end;
  216. procedure TTestDBExport.TestDBFExport_FoxPro;
  217. var
  218. Exporter: TFPDBFExport;
  219. ExportFormat: TDetailedExportFormats;
  220. ExportSettings:TDBFExportFormatSettings;
  221. begin
  222. Exporter := TFPDBFExport.Create(nil);
  223. ExportSettings:=TDBFExportFormatSettings.Create(true);
  224. try
  225. ExportFormat:=efFoxpro;
  226. ExportSettings.TableFormat:=tfFoxPro;
  227. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  228. lowercase(rightstr(TestName,5)) +
  229. TDetailedExportExtensions[ExportFormat];
  230. Exporter.FormatSettings:=ExportSettings;
  231. GenericExportTest(Exporter, ExportFormat);
  232. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  233. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  234. finally
  235. if (FKeepFilesAfterTest = False) then
  236. DeleteFile(Exporter.FileName);
  237. ExportSettings.Free;
  238. Exporter.Free;
  239. end;
  240. end;
  241. procedure TTestDBExport.TestXSDExport_Access_NoXSD_DecimalOverride;
  242. var
  243. Exporter: TXMLXSDExporter;
  244. ExportFormat: TDetailedExportFormats;
  245. ExportSettings:TXMLXSDFormatSettings;
  246. begin
  247. Exporter := TXMLXSDExporter.Create(nil);
  248. ExportSettings:=TXMLXSDFormatSettings.Create(true);
  249. try
  250. ExportSettings.ExportFormat:=AccessCompatible;
  251. ExportFormat:=efXMLXSDAccess;
  252. ExportSettings.CreateXSD:=false;
  253. ExportSettings.DecimalSeparator:='.'; //override
  254. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  255. lowercase(rightstr(TestName,5)) +
  256. TDetailedExportExtensions[ExportFormat];
  257. Exporter.FormatSettings:=ExportSettings;
  258. GenericExportTest(Exporter, ExportFormat);
  259. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  260. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  261. finally
  262. if (FKeepFilesAfterTest = False) then
  263. DeleteFile(Exporter.FileName);
  264. ExportSettings.Free;
  265. Exporter.Free;
  266. end;
  267. end;
  268. procedure TTestDBExport.TestXSDExport_Access_NoXSD_NoDecimalOverride;
  269. var
  270. Exporter: TXMLXSDExporter;
  271. ExportFormat: TDetailedExportFormats;
  272. ExportSettings:TXMLXSDFormatSettings;
  273. begin
  274. Exporter := TXMLXSDExporter.Create(nil);
  275. ExportSettings:=TXMLXSDFormatSettings.Create(true);
  276. try
  277. ExportSettings.ExportFormat:=AccessCompatible;
  278. ExportFormat:=efXMLXSDAccess;
  279. ExportSettings.CreateXSD:=false;
  280. ExportSettings.DecimalSeparator:=char(''); //don't override
  281. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  282. lowercase(rightstr(TestName,5)) +
  283. TDetailedExportExtensions[ExportFormat];
  284. Exporter.FormatSettings:=ExportSettings;
  285. GenericExportTest(Exporter, ExportFormat);
  286. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  287. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  288. finally
  289. if (FKeepFilesAfterTest = False) then
  290. DeleteFile(Exporter.FileName);
  291. ExportSettings.Free;
  292. Exporter.Free;
  293. end;
  294. end;
  295. procedure TTestDBExport.TestXSDExport_Access_XSD_DecimalOverride;
  296. var
  297. Exporter: TXMLXSDExporter;
  298. ExportFormat: TDetailedExportFormats;
  299. ExportSettings:TXMLXSDFormatSettings;
  300. begin
  301. Exporter := TXMLXSDExporter.Create(nil);
  302. ExportSettings:=TXMLXSDFormatSettings.Create(true);
  303. try
  304. ExportSettings.ExportFormat:=AccessCompatible;
  305. ExportFormat:=efXMLXSDAccess;
  306. ExportSettings.CreateXSD:=true;
  307. ExportSettings.DecimalSeparator:='.'; //override
  308. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  309. lowercase(rightstr(TestName,5)) +
  310. TDetailedExportExtensions[ExportFormat];
  311. Exporter.FormatSettings:=ExportSettings;
  312. GenericExportTest(Exporter, ExportFormat);
  313. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  314. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  315. finally
  316. if (FKeepFilesAfterTest = False) then
  317. DeleteFile(Exporter.FileName);
  318. ExportSettings.Free;
  319. Exporter.Free;
  320. end;
  321. end;
  322. procedure TTestDBExport.TestXSDExport_Access_XSD_NoDecimalOverride;
  323. var
  324. Exporter: TXMLXSDExporter;
  325. ExportFormat: TDetailedExportFormats;
  326. ExportSettings:TXMLXSDFormatSettings;
  327. begin
  328. Exporter := TXMLXSDExporter.Create(nil);
  329. ExportSettings:=TXMLXSDFormatSettings.Create(true);
  330. try
  331. ExportSettings.ExportFormat:=AccessCompatible;
  332. ExportFormat:=efXMLXSDAccess;
  333. ExportSettings.CreateXSD:=true;
  334. ExportSettings.DecimalSeparator:=char(''); //don't override
  335. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  336. lowercase(rightstr(TestName,5)) +
  337. TDetailedExportExtensions[ExportFormat];
  338. Exporter.FormatSettings:=ExportSettings;
  339. GenericExportTest(Exporter, ExportFormat);
  340. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  341. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  342. finally
  343. if (FKeepFilesAfterTest = False) then
  344. DeleteFile(Exporter.FileName);
  345. ExportSettings.Free;
  346. Exporter.Free;
  347. end;
  348. end;
  349. procedure TTestDBExport.TestXSDExport_ADONET_NoXSD;
  350. var
  351. Exporter: TXMLXSDExporter;
  352. ExportFormat: TDetailedExportFormats;
  353. ExportSettings:TXMLXSDFormatSettings;
  354. begin
  355. Exporter := TXMLXSDExporter.Create(nil);
  356. ExportSettings:=TXMLXSDFormatSettings.Create(true);
  357. try
  358. ExportSettings.ExportFormat:=ADONETCompatible;
  359. ExportFormat:=efXMLXSDADONet;
  360. ExportSettings.CreateXSD:=false;
  361. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  362. lowercase(rightstr(TestName,5)) +
  363. TDetailedExportExtensions[ExportFormat];
  364. Exporter.FormatSettings:=ExportSettings;
  365. GenericExportTest(Exporter, ExportFormat);
  366. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  367. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  368. finally
  369. if (FKeepFilesAfterTest = False) then
  370. DeleteFile(Exporter.FileName);
  371. ExportSettings.Free;
  372. Exporter.Free;
  373. end;
  374. end;
  375. procedure TTestDBExport.TestXSDExport_ADONET_XSD;
  376. var
  377. Exporter: TXMLXSDExporter;
  378. ExportFormat: TDetailedExportFormats;
  379. ExportSettings:TXMLXSDFormatSettings;
  380. begin
  381. Exporter := TXMLXSDExporter.Create(nil);
  382. ExportSettings:=TXMLXSDFormatSettings.Create(true);
  383. try
  384. ExportSettings.ExportFormat:=ADONETCompatible;
  385. ExportFormat:=efXMLXSDADONet;
  386. ExportSettings.CreateXSD:=true;
  387. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  388. lowercase(rightstr(TestName,5)) +
  389. TDetailedExportExtensions[ExportFormat];
  390. Exporter.FormatSettings:=ExportSettings;
  391. GenericExportTest(Exporter, ExportFormat);
  392. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  393. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  394. finally
  395. if (FKeepFilesAfterTest = False) then
  396. DeleteFile(Exporter.FileName);
  397. ExportSettings.Free;
  398. Exporter.Free;
  399. end;
  400. end;
  401. procedure TTestDBExport.TestCSVExport;
  402. var
  403. Exporter: TCSVExporter;
  404. ExportFormat: TDetailedExportFormats;
  405. ExportSettings: TCSVFormatSettings;
  406. begin
  407. Exporter := TCSVExporter.Create(nil);
  408. ExportSettings:=TCSVFormatSettings.Create(true);
  409. try
  410. ExportFormat:=efCSV;
  411. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  412. lowercase(rightstr(TestName,5)) +
  413. TDetailedExportExtensions[ExportFormat];
  414. Exporter.FormatSettings:=ExportSettings;
  415. GenericExportTest(Exporter, ExportFormat);
  416. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  417. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  418. finally
  419. if (FKeepFilesAfterTest = False) then
  420. DeleteFile(Exporter.FileName);
  421. ExportSettings.Free;
  422. Exporter.Free;
  423. end;
  424. end;
  425. procedure TTestDBExport.TestCSVExport_RFC4180WithHeader;
  426. var
  427. Exporter: TCSVExporter;
  428. ExportFormat: TDetailedExportFormats;
  429. ExportSettings: TCSVFormatSettings;
  430. begin
  431. Exporter := TCSVExporter.Create(nil);
  432. ExportSettings:=TCSVFormatSettings.Create(true);
  433. try
  434. ExportSettings.FieldDelimiter:=','; //RFC 4180 specified commas as delimiter
  435. ExportSettings.HeaderRow:=true; //...allows an optional header line
  436. ExportSettings.StringQuoteChar:='"'; //...requires quoting with " (if quoting)
  437. // Fields containing line breaks (CRLF), double quotes,
  438. // and commas should be enclosed in double-quotes.
  439. // => this probably won't get tested with this test set.
  440. ExportFormat:=efCSV;
  441. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  442. lowercase(rightstr(TestName,5)) +
  443. TDetailedExportExtensions[ExportFormat];
  444. Exporter.FormatSettings:=ExportSettings;
  445. GenericExportTest(Exporter, ExportFormat);
  446. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  447. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  448. finally
  449. if (FKeepFilesAfterTest = False) then
  450. DeleteFile(Exporter.FileName);
  451. ExportSettings.Free;
  452. Exporter.Free;
  453. end;
  454. end;
  455. procedure TTestDBExport.TestCSVExport_TweakSettingsSemicolon;
  456. var
  457. Exporter: TCSVExporter;
  458. ExportFormat: TDetailedExportFormats;
  459. ExportSettings: TCSVFormatSettings;
  460. begin
  461. Exporter := TCSVExporter.Create(nil);
  462. ExportSettings:=TCSVFormatSettings.Create(true);
  463. try
  464. ExportSettings.FieldDelimiter:=';';
  465. ExportSettings.QuoteStrings:=[qsAlways,qsSpace,qsDelimiter]; //quote everything we can
  466. ExportSettings.StringQuoteChar:='"'; //try explicit assignment
  467. ExportSettings.RowDelimiter:=#10; //Unix/Linux format
  468. ExportSettings.BooleanFalse:='onwaar'; //why not a Dutch output format?
  469. ExportSettings.BooleanTrue:='waar'; //why not a Dutch output format?
  470. ExportSettings.CurrencyDigits:=3;
  471. ExportSettings.CurrencySymbol:='€'; //euro sign
  472. ExportSettings.DateFormat:='d-mm-yyyy'; //Dutch setting
  473. ExportSettings.DateTimeFormat:='d-mm-yyyy hh:nn:ss'; //Dutch setting
  474. ExportSettings.DecimalSeparator:=','; //another Dutch setting
  475. ExportSettings.TimeFormat:='hh:nn:ss'; //Dutch setting
  476. ExportSettings.IntegerFormat:='0000';//Strange but nice ;)
  477. ExportFormat:=efCSV;
  478. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  479. lowercase(rightstr(TestName,5)) +
  480. TDetailedExportExtensions[ExportFormat];
  481. Exporter.FormatSettings:=ExportSettings;
  482. GenericExportTest(Exporter, ExportFormat);
  483. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  484. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  485. finally
  486. if (FKeepFilesAfterTest = False) then
  487. DeleteFile(Exporter.FileName);
  488. ExportSettings.Free;
  489. Exporter.Free;
  490. end;
  491. end;
  492. procedure TTestDBExport.TestFixedTextExport;
  493. var
  494. Exporter: TFixedLengthExporter;
  495. ExportFormat: TDetailedExportFormats;
  496. begin
  497. Exporter := TFixedLengthExporter.Create(nil);
  498. try
  499. ExportFormat:=efFixedLengthText;
  500. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  501. lowercase(rightstr(TestName,5)) +
  502. TDetailedExportExtensions[ExportFormat];
  503. GenericExportTest(Exporter, ExportFormat);
  504. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  505. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  506. finally
  507. if (FKeepFilesAfterTest = False) then
  508. DeleteFile(Exporter.FileName);
  509. Exporter.Free;
  510. end;
  511. end;
  512. procedure TTestDBExport.TestJSONExport;
  513. var
  514. Exporter: TSimpleJSONExporter;
  515. ExportFormat: TDetailedExportFormats;
  516. ExportSettings:TSimpleJSONFormatSettings;
  517. begin
  518. Exporter := TSimpleJSONExporter.Create(nil);
  519. ExportSettings:=TSimpleJSONFormatSettings.Create(true);
  520. try
  521. ExportFormat:=efJSON;
  522. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) + lowercase(rightstr(TestName,5))+
  523. inttostr(ord(ExportFormat))+
  524. TDetailedExportExtensions[ExportFormat]; Exporter.FormatSettings:=ExportSettings;
  525. GenericExportTest(Exporter, ExportFormat);
  526. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  527. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  528. finally
  529. if (FKeepFilesAfterTest = False) then
  530. DeleteFile(Exporter.FileName);
  531. ExportSettings.Free;
  532. Exporter.Free;
  533. end;
  534. end;
  535. procedure TTestDBExport.TestRTFExport;
  536. var
  537. Exporter: TRTFExporter;
  538. ExportFormat: TDetailedExportFormats;
  539. ExportSettings:TRTFExportFormatSettings;
  540. begin
  541. Exporter := TRTFExporter.Create(nil);
  542. ExportSettings:=TRTFExportFormatSettings.Create(true);
  543. try
  544. ExportFormat:=efRTF;
  545. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  546. lowercase(rightstr(TestName,5))+
  547. TDetailedExportExtensions[ExportFormat];
  548. Exporter.FormatSettings:=ExportSettings;
  549. GenericExportTest(Exporter, ExportFormat);
  550. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  551. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  552. finally
  553. if (FKeepFilesAfterTest = False) then
  554. DeleteFile(Exporter.FileName);
  555. ExportSettings.Free;
  556. Exporter.Free;
  557. end;
  558. end;
  559. procedure TTestDBExport.TestSQLExport;
  560. var
  561. Exporter: TSQLExporter;
  562. ExportFormat: TDetailedExportFormats;
  563. ExportSettings:TSQLFormatSettings;
  564. begin
  565. Exporter := TSQLExporter.Create(nil);
  566. ExportSettings:=TSQLFormatSettings.Create(true);
  567. try
  568. ExportSettings.TableName:='ATABLE'; //required for export to succeed
  569. ExportFormat:=efSQL;
  570. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  571. lowercase(rightstr(TestName,5))+
  572. TDetailedExportExtensions[ExportFormat];
  573. Exporter.FormatSettings:=ExportSettings;
  574. GenericExportTest(Exporter, ExportFormat);
  575. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  576. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  577. finally
  578. if (FKeepFilesAfterTest = False) then
  579. DeleteFile(Exporter.FileName);
  580. ExportSettings.Free;
  581. Exporter.Free;
  582. end;
  583. end;
  584. procedure TTestDBExport.TestTeXExport;
  585. var
  586. Exporter: TTexExporter;
  587. ExportFormat: TDetailedExportFormats;
  588. ExportSettings:TTeXExportFormatSettings;
  589. begin
  590. Exporter := TTexExporter.Create(nil);
  591. ExportSettings:=TTeXExportFormatSettings.Create(true);
  592. try
  593. ExportFormat:=efTeX;
  594. Exporter.FileName := FExportTempDir +
  595. inttostr(ord(ExportFormat)) + lowercase(rightstr(TestName,5))+
  596. TDetailedExportExtensions[ExportFormat];
  597. Exporter.FormatSettings:=ExportSettings;
  598. GenericExportTest(Exporter, ExportFormat);
  599. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  600. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  601. finally
  602. if (FKeepFilesAfterTest = False) then
  603. DeleteFile(Exporter.FileName);
  604. ExportSettings.Free;
  605. Exporter.Free;
  606. end;
  607. end;
  608. procedure TTestDBExport.TestXMLExport;
  609. var
  610. Exporter: TSimpleXMLExporter;
  611. ExportFormat: TDetailedExportFormats;
  612. ExportSettings:TSimpleXMLFormatSettings;
  613. begin
  614. Exporter := TSimpleXMLExporter.Create(nil);
  615. ExportSettings:=TSimpleXMLFormatSettings.Create(true);
  616. try
  617. ExportFormat:=efXML;
  618. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  619. lowercase(rightstr(TestName,5)) +
  620. TDetailedExportExtensions[ExportFormat];
  621. Exporter.FormatSettings:=ExportSettings;
  622. GenericExportTest(Exporter, ExportFormat);
  623. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  624. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  625. finally
  626. if (FKeepFilesAfterTest = False) then
  627. DeleteFile(Exporter.FileName);
  628. ExportSettings.Free;
  629. Exporter.Free;
  630. end;
  631. end;
  632. procedure TTestDBExport.TestXSDExport_DelphiClientDataset;
  633. var
  634. Exporter: TXMLXSDExporter;
  635. ExportFormat: TDetailedExportFormats;
  636. ExportSettings:TXMLXSDFormatSettings;
  637. begin
  638. Exporter := TXMLXSDExporter.Create(nil);
  639. ExportSettings:=TXMLXSDFormatSettings.Create(true);
  640. try
  641. ExportSettings.ExportFormat:=DelphiClientDataset;
  642. ExportFormat:=efXMLXSDClientDataset;
  643. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  644. lowercase(rightstr(TestName,5)) +
  645. TDetailedExportExtensions[ExportFormat];
  646. Exporter.FormatSettings:=ExportSettings;
  647. GenericExportTest(Exporter, ExportFormat);
  648. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  649. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  650. finally
  651. if (FKeepFilesAfterTest = False) then
  652. DeleteFile(Exporter.FileName);
  653. ExportSettings.Free;
  654. Exporter.Free;
  655. end;
  656. end;
  657. procedure TTestDBExport.TestXSDExport_Excel;
  658. var
  659. Exporter: TXMLXSDExporter;
  660. ExportFormat: TDetailedExportFormats;
  661. ExportSettings:TXMLXSDFormatSettings;
  662. begin
  663. Exporter := TXMLXSDExporter.Create(nil);
  664. ExportSettings:=TXMLXSDFormatSettings.Create(true);
  665. try
  666. ExportSettings.ExportFormat:=ExcelCompatible;
  667. ExportFormat:=efXMLXSDExcel;
  668. Exporter.FileName := FExportTempDir + inttostr(ord(ExportFormat)) +
  669. lowercase(rightstr(TestName,5)) +
  670. TDetailedExportExtensions[ExportFormat];
  671. Exporter.FormatSettings:=ExportSettings;
  672. GenericExportTest(Exporter, ExportFormat);
  673. AssertTrue('Output file must be created', FileExists(Exporter.FileName));
  674. AssertFalse('Output file must not be empty', (GetFileSize(Exporter.FileName) = 0));
  675. finally
  676. if (FKeepFilesAfterTest = False) then
  677. DeleteFile(Exporter.FileName);
  678. ExportSettings.Free;
  679. Exporter.Free;
  680. end;
  681. end;
  682. initialization
  683. RegisterTest(TTestDBExport);
  684. end.