testdbexport.pas 25 KB

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