xmlxsdexporttestcase1.pas 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. unit XMLXSDExportTestCase1;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, Fpcunit, Testutils, Testregistry, DB, fpXMLXSDExport,
  6. BufDataset, dateutils;
  7. type
  8. Ttestxmlxsdexport1 = class(Ttestcase)
  9. private
  10. procedure FillTestData;
  11. protected
  12. FTestDataset: TBufDataset;
  13. FExportTempDir: string; //where we store exported files in these tests
  14. procedure Setup; override;
  15. procedure Teardown; override;
  16. published
  17. procedure TestXSDExport_Access_NoXSD_Decimal;
  18. procedure TestXSDExport_Access_NoXSD_NoDecimal;
  19. procedure TestXSDExport_Access_XSD_Decimal;
  20. procedure TestXSDExport_Access_XSD_NoDecimal;
  21. procedure TestXSDExport_ADONET_NoXSD;
  22. procedure TestXSDExport_ADONET_XSD;
  23. procedure TestXSDExport_DelphiClientDataset;
  24. procedure TestXSDExport_Excel;
  25. end;
  26. implementation
  27. procedure Ttestxmlxsdexport1.TestXSDExport_Access_NoXSD_NoDecimal;
  28. var
  29. Export: TXMLXSDExporter;
  30. Settings: TXMLXSDFormatSettings;
  31. NumberExported: integer;
  32. begin
  33. Export := TXMLXSDExporter.Create(nil);
  34. Settings := TXMLXSDFormatSettings.Create(True);
  35. try
  36. //Don't override decimal separator
  37. Settings.CreateXSD := False;
  38. Settings.DecimalSeparator := Char(''); //Don't override decimalseparator
  39. Settings.ExportFormat := AccessCompatible;
  40. Export.Dataset := FTestDataset;
  41. Export.FormatSettings := Settings;
  42. Export.FileName := FExportTempDir + 'Access_NoXSD_NoDecimal.xml';
  43. NumberExported := Export.Execute;
  44. FTestDataset.Close;
  45. AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
  46. //we should have exported 2 records.
  47. finally
  48. Settings.Free;
  49. { TODO 9 -oAnyone -cNice to have : When initial testing is complete, delete export files. }
  50. //DeleteFile(Export.FileName); //todo: fix this for release
  51. Export.Free;
  52. end;
  53. end;
  54. procedure Ttestxmlxsdexport1.TestXSDExport_Access_NoXSD_Decimal;
  55. var
  56. Export: TXMLXSDExporter;
  57. Settings: TXMLXSDFormatSettings;
  58. NumberExported: integer;
  59. begin
  60. Export := TXMLXSDExporter.Create(nil);
  61. Settings := TXMLXSDFormatSettings.Create(True);
  62. try
  63. Settings.DecimalSeparator := ',';
  64. //Try to override decimal separator specified by fpXMLXSDExport
  65. Settings.CreateXSD := False;
  66. Settings.ExportFormat := AccessCompatible;
  67. Export.Dataset := FTestDataset;
  68. Export.FormatSettings := Settings;
  69. Export.FileName := FExportTempDir + 'Access_NoXSD_Decimal.xml';
  70. NumberExported := Export.Execute;
  71. FTestDataset.Close;
  72. AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
  73. //we should have exported 2 records.
  74. finally
  75. Settings.Free;
  76. //DeleteFile(Export.FileName); //todo: fix this for release
  77. Export.Free;
  78. end;
  79. end;
  80. procedure Ttestxmlxsdexport1.TestXSDExport_Access_XSD_NoDecimal;
  81. var
  82. Export: TXMLXSDExporter;
  83. Settings: TXMLXSDFormatSettings;
  84. NumberExported: integer;
  85. begin
  86. Export := TXMLXSDExporter.Create(nil);
  87. Settings := TXMLXSDFormatSettings.Create(True);
  88. try
  89. //Settings.DecimalSeparator := ','; //Don't override decimal separator
  90. Settings.CreateXSD := True;
  91. Settings.ExportFormat := AccessCompatible;
  92. Export.Dataset := FTestDataset;
  93. Export.FormatSettings := Settings;
  94. Export.FileName := FExportTempDir + 'Access_XSD_NoDecimal.xml';
  95. NumberExported := Export.Execute;
  96. FTestDataset.Close;
  97. AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
  98. //we should have exported 2 records.
  99. finally
  100. Settings.Free;
  101. //DeleteFile(Export.FileName); //todo: fix this for release
  102. Export.Free;
  103. end;
  104. end;
  105. procedure Ttestxmlxsdexport1.TestXSDExport_Access_XSD_Decimal;
  106. var
  107. Export: TXMLXSDExporter;
  108. Settings: TXMLXSDFormatSettings;
  109. NumberExported: integer;
  110. begin
  111. Export := TXMLXSDExporter.Create(nil);
  112. Settings := TXMLXSDFormatSettings.Create(True);
  113. try
  114. Settings.DecimalSeparator := ','; //Try to override decimal separator
  115. Settings.CreateXSD := True;
  116. Settings.ExportFormat := AccessCompatible;
  117. Export.Dataset := FTestDataset;
  118. Export.FormatSettings := Settings;
  119. Export.FileName := FExportTempDir + 'Access_XSD_Decimal.xml';
  120. NumberExported := Export.Execute;
  121. FTestDataset.Close;
  122. AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
  123. //we should have exported 2 records.
  124. finally
  125. Settings.Free;
  126. //DeleteFile(Export.FileName); //todo: fix this for release
  127. Export.Free;
  128. end;
  129. end;
  130. procedure Ttestxmlxsdexport1.TestXSDExport_ADONET_NoXSD;
  131. var
  132. Export: TXMLXSDExporter;
  133. Settings: TXMLXSDFormatSettings;
  134. NumberExported: integer;
  135. begin
  136. Export := TXMLXSDExporter.Create(nil);
  137. Settings := TXMLXSDFormatSettings.Create(True);
  138. try
  139. Settings.CreateXSD := False;
  140. Settings.ExportFormat := ADONETCompatible;
  141. Export.Dataset := FTestDataset;
  142. Export.FormatSettings := Settings;
  143. Export.FileName := FExportTempDir + 'ADONET_NoXSD.xml';
  144. NumberExported := Export.Execute;
  145. FTestDataset.Close;
  146. AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
  147. //we should have exported 2 records.
  148. finally
  149. Settings.Free;
  150. //DeleteFile(Export.FileName); //todo: fix this for release
  151. Export.Free;
  152. end;
  153. end;
  154. procedure Ttestxmlxsdexport1.TestXSDExport_ADONET_XSD;
  155. var
  156. Export: TXMLXSDExporter;
  157. Settings: TXMLXSDFormatSettings;
  158. NumberExported: integer;
  159. begin
  160. Export := TXMLXSDExporter.Create(nil);
  161. Settings := TXMLXSDFormatSettings.Create(True);
  162. try
  163. Settings.CreateXSD := True;
  164. Settings.ExportFormat := ADONETCompatible;
  165. Export.Dataset := FTestDataset;
  166. Export.FormatSettings := Settings;
  167. Export.FileName := FExportTempDir + 'ADONET_XSD.xml';
  168. NumberExported := Export.Execute;
  169. FTestDataset.Close;
  170. AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
  171. //we should have exported 2 records.
  172. finally
  173. Settings.Free;
  174. //DeleteFile(Export.FileName); //todo: fix this for release
  175. Export.Free;
  176. end;
  177. end;
  178. procedure Ttestxmlxsdexport1.TestXSDExport_DelphiClientDataset;
  179. var
  180. Export: TXMLXSDExporter;
  181. Settings: TXMLXSDFormatSettings;
  182. NumberExported: integer;
  183. begin
  184. Export := TXMLXSDExporter.Create(nil);
  185. Settings := TXMLXSDFormatSettings.Create(True);
  186. try
  187. Settings.ExportFormat := DelphiClientDataset;
  188. Export.Dataset := FTestDataset;
  189. Export.FormatSettings := Settings;
  190. Export.FileName := FExportTempDir + 'DelphiClientDataset.xml';
  191. NumberExported := Export.Execute;
  192. FTestDataset.Close;
  193. AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
  194. //we should have exported 2 records.
  195. finally
  196. Settings.Free;
  197. //DeleteFile(Export.FileName); //todo: fix this for release
  198. Export.Free;
  199. end;
  200. end;
  201. procedure Ttestxmlxsdexport1.TestXSDExport_Excel;
  202. var
  203. Export: TXMLXSDExporter;
  204. Settings: TXMLXSDFormatSettings;
  205. NumberExported: integer;
  206. begin
  207. Export := TXMLXSDExporter.Create(nil);
  208. Settings := TXMLXSDFormatSettings.Create(True);
  209. try
  210. Settings.ExportFormat := ExcelCompatible;
  211. Export.Dataset := FTestDataset;
  212. Export.FormatSettings := Settings;
  213. Export.FileName := FExportTempDir + 'Excel.xml';
  214. NumberExported := Export.Execute;
  215. FTestDataset.Close;
  216. AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
  217. //we should have exported 2 records.
  218. finally
  219. Settings.Free;
  220. //DeleteFile(Export.FileName); //todo: fix this for release
  221. Export.Free;
  222. end;
  223. end;
  224. procedure Ttestxmlxsdexport1.FillTestData;
  225. var
  226. Utf8teststring: string;
  227. begin
  228. FTestDataset.Close;
  229. //for memds:
  230. //FTestDataset.Clear(False); //memds: clear out any data
  231. //FTestDataset.Fields.Clear; //bufds: clear out any data, but also FIELDDEFS: don't use
  232. FTestDataset.Open;
  233. // Fill some test data
  234. // First row
  235. FTestDataset.Append;
  236. FTestDataset.FieldByName('IDINTEGER').AsInteger := 42;
  237. FTestDataset.FieldByName('NAMESTRING').AsString := 'Douglas Adams';
  238. FTestDataset.FieldByName('REMARKSMEMO').AsString :=
  239. 'So long, and thanks for all the fish.';
  240. FTestDataset.FieldByName('BIRTHDAYDATE').AsDateTime :=
  241. ScanDateTime('yyyymmdd', '19520311', 1);
  242. FTestDataset.FieldByName('CVBLOB').AsString :=
  243. 'A very succesful and funny writer. He died some years ago.';
  244. FTestDataset.FieldByName('POCKETMONEYCURRENCY').AsCurrency := 42.42;
  245. FTestDataset.FieldByName('NAUGHTYBOOLEAN').AsBoolean := False;
  246. FTestDataset.Post;
  247. // Second row
  248. FTestDataset.Append;
  249. FTestDataset.FieldByName('IDINTEGER').AsInteger := 444;
  250. FTestDataset.FieldByName('NAMESTRING').AsString := 'Captain Haddock';
  251. UTF8TestString :=
  252. 'Drinks rosé (ros, e accent aigu), водка (wodka cyrillic) and ούζο (ouzo Greek) but prefers Loch Lomond whiskey.';
  253. FTestDataset.FieldByName('REMARKSMEMO').AsString := (UTF8TestString);
  254. //examples of UTF8 code
  255. FTestDataset.FieldByName('BIRTHDAYDATE').AsDateTime :=
  256. ScanDateTime('yyyymmdd', '19401017', 1);
  257. FTestDataset.FieldByName('CVBLOB').AsString := '';
  258. FTestDataset.FieldByName('POCKETMONEYCURRENCY').AsCurrency := 12.4866666;
  259. FTestDataset.FieldByName('NAUGHTYBOOLEAN').AsBoolean := True;
  260. FTestDataset.Post;
  261. FTestDataset.Last;
  262. FTestDataset.First;
  263. AssertEquals('Number of records in test dataset', 2, FTestDataset.RecordCount);
  264. end;
  265. procedure Ttestxmlxsdexport1.Setup;
  266. var
  267. FieldDef: TFieldDef;
  268. begin
  269. FExportTempDir := GetTempDir(False);
  270. FTestDataset := TBufDataset.Create(nil);
  271. {for memds - or can we use the lines below, too?:
  272. FTestDataset.FieldDefs.Add('IDINTEGER', ftInteger);
  273. FTestDataset.FieldDefs.Add('NAMESTRING', ftString, 50);
  274. //memds probably won't support memo
  275. //TestDataset.FieldDefs.Add('REMARKSMEMO', ftMemo);
  276. TestDataset.FieldDefs.Add('BIRTHDAYDATE', ftDate);
  277. // No support for blobs in this dataset.
  278. //TestDataset.FieldDefs.Add('CVBLOB', ftBlob); // A blob containing e.g. text
  279. TestDataset.FieldDefs.Add('POCKETMONEYCURRENCY', ftCurrency);
  280. }
  281. //for Bufdataset:
  282. FieldDef := FTestDataset.FieldDefs.AddFieldDef;
  283. FieldDef.Name := 'IDINTEGER';
  284. FieldDef.DataType := ftInteger;
  285. FieldDef := FTestDataset.FieldDefs.AddFieldDef;
  286. FieldDef.Name := 'NAMESTRING';
  287. FieldDef.DataType := ftString;
  288. FieldDef.Size := 50;
  289. FieldDef := FTestDataset.FieldDefs.AddFieldDef;
  290. FieldDef.Name := 'REMARKSMEMO';
  291. FieldDef.DataType := ftMemo;
  292. FieldDef := FTestDataset.FieldDefs.AddFieldDef;
  293. FieldDef.Name := 'BIRTHDAYDATE';
  294. FieldDef.DataType := ftDate;
  295. FieldDef := FTestDataset.FieldDefs.AddFieldDef;
  296. FieldDef.Name := 'CVBLOB';
  297. FieldDef.DataType := ftBlob;
  298. FieldDef.Size := 16384;//large but hopefully not too large for memory.
  299. FieldDef := FTestDataset.FieldDefs.AddFieldDef;
  300. FieldDef.Name := 'POCKETMONEYCURRENCY';
  301. FieldDef.DataType := ftCurrency;
  302. FieldDef := FTestDataset.FieldDefs.AddFieldDef;
  303. FieldDef.Name := 'NAUGHTYBOOLEAN';
  304. FieldDef.DataType := ftBoolean;
  305. //Createtable is needed if you use a memds
  306. //FTestDataset.CreateTable;
  307. //CreateDataset is needed if you use a bufdataset
  308. FTestDataset.CreateDataSet;
  309. // Fill dataset with test data
  310. FillTestData;
  311. end;
  312. procedure Ttestxmlxsdexport1.Teardown;
  313. begin
  314. FTestDataset.Free;
  315. end;
  316. initialization
  317. Registertest(Ttestxmlxsdexport1);
  318. end.