|
@@ -0,0 +1,357 @@
|
|
|
+unit XMLXSDExportTestCase1;
|
|
|
+
|
|
|
+{$mode objfpc}{$H+}
|
|
|
+
|
|
|
+interface
|
|
|
+
|
|
|
+uses
|
|
|
+ Classes, SysUtils, Fpcunit, Testutils, Testregistry, DB, fpXMLXSDExport,
|
|
|
+ BufDataset, dateutils;
|
|
|
+
|
|
|
+type
|
|
|
+
|
|
|
+ Ttestxmlxsdexport1 = class(Ttestcase)
|
|
|
+ private
|
|
|
+ procedure FillTestData;
|
|
|
+ protected
|
|
|
+ FTestDataset: TBufDataset;
|
|
|
+ FExportTempDir: string; //where we store exported files in these tests
|
|
|
+ procedure Setup; override;
|
|
|
+ procedure Teardown; override;
|
|
|
+ published
|
|
|
+ procedure TestXSDExport_Access_NoXSD_Decimal;
|
|
|
+ procedure TestXSDExport_Access_NoXSD_NoDecimal;
|
|
|
+ procedure TestXSDExport_Access_XSD_Decimal;
|
|
|
+ procedure TestXSDExport_Access_XSD_NoDecimal;
|
|
|
+ procedure TestXSDExport_ADONET_NoXSD;
|
|
|
+ procedure TestXSDExport_ADONET_XSD;
|
|
|
+ procedure TestXSDExport_DelphiClientDataset;
|
|
|
+ procedure TestXSDExport_Excel;
|
|
|
+ end;
|
|
|
+
|
|
|
+implementation
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.TestXSDExport_Access_NoXSD_NoDecimal;
|
|
|
+
|
|
|
+var
|
|
|
+ Export: TXMLXSDExporter;
|
|
|
+ Settings: TXMLXSDFormatSettings;
|
|
|
+ NumberExported: integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ Export := TXMLXSDExporter.Create(nil);
|
|
|
+ Settings := TXMLXSDFormatSettings.Create(True);
|
|
|
+ try
|
|
|
+ //Don't override decimal separator
|
|
|
+ Settings.CreateXSD := False;
|
|
|
+ Settings.DecimalSeparator := Char(''); //Don't override decimalseparator
|
|
|
+ Settings.ExportFormat := AccessCompatible;
|
|
|
+ Export.Dataset := FTestDataset;
|
|
|
+ Export.FormatSettings := Settings;
|
|
|
+ Export.FileName := FExportTempDir + 'Access_NoXSD_NoDecimal.xml';
|
|
|
+ NumberExported := Export.Execute;
|
|
|
+ FTestDataset.Close;
|
|
|
+ AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
|
|
|
+ //we should have exported 2 records.
|
|
|
+ finally
|
|
|
+ Settings.Free;
|
|
|
+ { TODO 9 -oAnyone -cNice to have : When initial testing is complete, delete export files. }
|
|
|
+ //DeleteFile(Export.FileName); //todo: fix this for release
|
|
|
+ Export.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.TestXSDExport_Access_NoXSD_Decimal;
|
|
|
+var
|
|
|
+ Export: TXMLXSDExporter;
|
|
|
+ Settings: TXMLXSDFormatSettings;
|
|
|
+ NumberExported: integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ Export := TXMLXSDExporter.Create(nil);
|
|
|
+ Settings := TXMLXSDFormatSettings.Create(True);
|
|
|
+ try
|
|
|
+ Settings.DecimalSeparator := ',';
|
|
|
+ //Try to override decimal separator specified by fpXMLXSDExport
|
|
|
+ Settings.CreateXSD := False;
|
|
|
+ Settings.ExportFormat := AccessCompatible;
|
|
|
+ Export.Dataset := FTestDataset;
|
|
|
+ Export.FormatSettings := Settings;
|
|
|
+ Export.FileName := FExportTempDir + 'Access_NoXSD_Decimal.xml';
|
|
|
+ NumberExported := Export.Execute;
|
|
|
+ FTestDataset.Close;
|
|
|
+ AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
|
|
|
+ //we should have exported 2 records.
|
|
|
+ finally
|
|
|
+ Settings.Free;
|
|
|
+ //DeleteFile(Export.FileName); //todo: fix this for release
|
|
|
+ Export.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.TestXSDExport_Access_XSD_NoDecimal;
|
|
|
+var
|
|
|
+ Export: TXMLXSDExporter;
|
|
|
+ Settings: TXMLXSDFormatSettings;
|
|
|
+ NumberExported: integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ Export := TXMLXSDExporter.Create(nil);
|
|
|
+ Settings := TXMLXSDFormatSettings.Create(True);
|
|
|
+ try
|
|
|
+ //Settings.DecimalSeparator := ','; //Don't override decimal separator
|
|
|
+ Settings.CreateXSD := True;
|
|
|
+ Settings.ExportFormat := AccessCompatible;
|
|
|
+ Export.Dataset := FTestDataset;
|
|
|
+ Export.FormatSettings := Settings;
|
|
|
+ Export.FileName := FExportTempDir + 'Access_XSD_NoDecimal.xml';
|
|
|
+ NumberExported := Export.Execute;
|
|
|
+ FTestDataset.Close;
|
|
|
+ AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
|
|
|
+ //we should have exported 2 records.
|
|
|
+ finally
|
|
|
+ Settings.Free;
|
|
|
+ //DeleteFile(Export.FileName); //todo: fix this for release
|
|
|
+ Export.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.TestXSDExport_Access_XSD_Decimal;
|
|
|
+var
|
|
|
+ Export: TXMLXSDExporter;
|
|
|
+ Settings: TXMLXSDFormatSettings;
|
|
|
+ NumberExported: integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ Export := TXMLXSDExporter.Create(nil);
|
|
|
+ Settings := TXMLXSDFormatSettings.Create(True);
|
|
|
+ try
|
|
|
+ Settings.DecimalSeparator := ','; //Try to override decimal separator
|
|
|
+ Settings.CreateXSD := True;
|
|
|
+ Settings.ExportFormat := AccessCompatible;
|
|
|
+ Export.Dataset := FTestDataset;
|
|
|
+ Export.FormatSettings := Settings;
|
|
|
+ Export.FileName := FExportTempDir + 'Access_XSD_Decimal.xml';
|
|
|
+ NumberExported := Export.Execute;
|
|
|
+ FTestDataset.Close;
|
|
|
+ AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
|
|
|
+ //we should have exported 2 records.
|
|
|
+ finally
|
|
|
+ Settings.Free;
|
|
|
+ //DeleteFile(Export.FileName); //todo: fix this for release
|
|
|
+ Export.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.TestXSDExport_ADONET_NoXSD;
|
|
|
+var
|
|
|
+ Export: TXMLXSDExporter;
|
|
|
+ Settings: TXMLXSDFormatSettings;
|
|
|
+ NumberExported: integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ Export := TXMLXSDExporter.Create(nil);
|
|
|
+ Settings := TXMLXSDFormatSettings.Create(True);
|
|
|
+ try
|
|
|
+ Settings.CreateXSD := False;
|
|
|
+ Settings.ExportFormat := ADONETCompatible;
|
|
|
+ Export.Dataset := FTestDataset;
|
|
|
+ Export.FormatSettings := Settings;
|
|
|
+ Export.FileName := FExportTempDir + 'ADONET_NoXSD.xml';
|
|
|
+ NumberExported := Export.Execute;
|
|
|
+ FTestDataset.Close;
|
|
|
+ AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
|
|
|
+ //we should have exported 2 records.
|
|
|
+ finally
|
|
|
+ Settings.Free;
|
|
|
+ //DeleteFile(Export.FileName); //todo: fix this for release
|
|
|
+ Export.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.TestXSDExport_ADONET_XSD;
|
|
|
+var
|
|
|
+ Export: TXMLXSDExporter;
|
|
|
+ Settings: TXMLXSDFormatSettings;
|
|
|
+ NumberExported: integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ Export := TXMLXSDExporter.Create(nil);
|
|
|
+ Settings := TXMLXSDFormatSettings.Create(True);
|
|
|
+ try
|
|
|
+ Settings.CreateXSD := True;
|
|
|
+ Settings.ExportFormat := ADONETCompatible;
|
|
|
+ Export.Dataset := FTestDataset;
|
|
|
+ Export.FormatSettings := Settings;
|
|
|
+ Export.FileName := FExportTempDir + 'ADONET_XSD.xml';
|
|
|
+ NumberExported := Export.Execute;
|
|
|
+ FTestDataset.Close;
|
|
|
+ AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
|
|
|
+ //we should have exported 2 records.
|
|
|
+ finally
|
|
|
+ Settings.Free;
|
|
|
+ //DeleteFile(Export.FileName); //todo: fix this for release
|
|
|
+ Export.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.TestXSDExport_DelphiClientDataset;
|
|
|
+var
|
|
|
+ Export: TXMLXSDExporter;
|
|
|
+ Settings: TXMLXSDFormatSettings;
|
|
|
+ NumberExported: integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ Export := TXMLXSDExporter.Create(nil);
|
|
|
+ Settings := TXMLXSDFormatSettings.Create(True);
|
|
|
+ try
|
|
|
+ Settings.ExportFormat := DelphiClientDataset;
|
|
|
+ Export.Dataset := FTestDataset;
|
|
|
+ Export.FormatSettings := Settings;
|
|
|
+ Export.FileName := FExportTempDir + 'DelphiClientDataset.xml';
|
|
|
+ NumberExported := Export.Execute;
|
|
|
+ FTestDataset.Close;
|
|
|
+ AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
|
|
|
+ //we should have exported 2 records.
|
|
|
+ finally
|
|
|
+ Settings.Free;
|
|
|
+ //DeleteFile(Export.FileName); //todo: fix this for release
|
|
|
+ Export.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.TestXSDExport_Excel;
|
|
|
+var
|
|
|
+ Export: TXMLXSDExporter;
|
|
|
+ Settings: TXMLXSDFormatSettings;
|
|
|
+ NumberExported: integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ Export := TXMLXSDExporter.Create(nil);
|
|
|
+ Settings := TXMLXSDFormatSettings.Create(True);
|
|
|
+ try
|
|
|
+ Settings.ExportFormat := ExcelCompatible;
|
|
|
+ Export.Dataset := FTestDataset;
|
|
|
+ Export.FormatSettings := Settings;
|
|
|
+ Export.FileName := FExportTempDir + 'Excel.xml';
|
|
|
+ NumberExported := Export.Execute;
|
|
|
+ FTestDataset.Close;
|
|
|
+ AssertEquals('Number of records exported', NumberExported, FTestDataset.RecordCount);
|
|
|
+ //we should have exported 2 records.
|
|
|
+ finally
|
|
|
+ Settings.Free;
|
|
|
+ //DeleteFile(Export.FileName); //todo: fix this for release
|
|
|
+ Export.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.FillTestData;
|
|
|
+var
|
|
|
+ Utf8teststring: string;
|
|
|
+begin
|
|
|
+ FTestDataset.Close;
|
|
|
+ //for memds:
|
|
|
+ //FTestDataset.Clear(False); //memds: clear out any data
|
|
|
+ //FTestDataset.Fields.Clear; //bufds: clear out any data, but also FIELDDEFS: don't use
|
|
|
+ FTestDataset.Open;
|
|
|
+
|
|
|
+ // Fill some test data
|
|
|
+ // First row
|
|
|
+ FTestDataset.Append;
|
|
|
+ FTestDataset.FieldByName('IDINTEGER').AsInteger := 42;
|
|
|
+ FTestDataset.FieldByName('NAMESTRING').AsString := 'Douglas Adams';
|
|
|
+ FTestDataset.FieldByName('REMARKSMEMO').AsString :=
|
|
|
+ 'So long, and thanks for all the fish.';
|
|
|
+ FTestDataset.FieldByName('BIRTHDAYDATE').AsDateTime :=
|
|
|
+ ScanDateTime('yyyymmdd', '19520311', 1);
|
|
|
+ FTestDataset.FieldByName('CVBLOB').AsString :=
|
|
|
+ 'A very succesful and funny writer. He died some years ago.';
|
|
|
+ FTestDataset.FieldByName('POCKETMONEYCURRENCY').AsCurrency := 42.42;
|
|
|
+ FTestDataset.FieldByName('NAUGHTYBOOLEAN').AsBoolean := False;
|
|
|
+ FTestDataset.Post;
|
|
|
+
|
|
|
+ // Second row
|
|
|
+ FTestDataset.Append;
|
|
|
+ FTestDataset.FieldByName('IDINTEGER').AsInteger := 444;
|
|
|
+ FTestDataset.FieldByName('NAMESTRING').AsString := 'Captain Haddock';
|
|
|
+ UTF8TestString :=
|
|
|
+ 'Drinks rosé (ros, e accent aigu), водка (wodka cyrillic) and ούζο (ouzo Greek) but prefers Loch Lomond whiskey.';
|
|
|
+ FTestDataset.FieldByName('REMARKSMEMO').AsString := (UTF8TestString);
|
|
|
+ //examples of UTF8 code
|
|
|
+ FTestDataset.FieldByName('BIRTHDAYDATE').AsDateTime :=
|
|
|
+ ScanDateTime('yyyymmdd', '19401017', 1);
|
|
|
+ FTestDataset.FieldByName('CVBLOB').AsString := '';
|
|
|
+ FTestDataset.FieldByName('POCKETMONEYCURRENCY').AsCurrency := 12.4866666;
|
|
|
+ FTestDataset.FieldByName('NAUGHTYBOOLEAN').AsBoolean := True;
|
|
|
+ FTestDataset.Post;
|
|
|
+ FTestDataset.Last;
|
|
|
+ FTestDataset.First;
|
|
|
+ AssertEquals('Number of records in test dataset', 2, FTestDataset.RecordCount);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.Setup;
|
|
|
+var
|
|
|
+ FieldDef: TFieldDef;
|
|
|
+begin
|
|
|
+ FExportTempDir := GetTempDir(False);
|
|
|
+ FTestDataset := TBufDataset.Create(nil);
|
|
|
+ {for memds - or can we use the lines below, too?:
|
|
|
+ FTestDataset.FieldDefs.Add('IDINTEGER', ftInteger);
|
|
|
+ FTestDataset.FieldDefs.Add('NAMESTRING', ftString, 50);
|
|
|
+ //memds probably won't support memo
|
|
|
+ //TestDataset.FieldDefs.Add('REMARKSMEMO', ftMemo);
|
|
|
+ TestDataset.FieldDefs.Add('BIRTHDAYDATE', ftDate);
|
|
|
+ // No support for blobs in this dataset.
|
|
|
+ //TestDataset.FieldDefs.Add('CVBLOB', ftBlob); // A blob containing e.g. text
|
|
|
+ TestDataset.FieldDefs.Add('POCKETMONEYCURRENCY', ftCurrency);
|
|
|
+ }
|
|
|
+ //for Bufdataset:
|
|
|
+ FieldDef := FTestDataset.FieldDefs.AddFieldDef;
|
|
|
+ FieldDef.Name := 'IDINTEGER';
|
|
|
+ FieldDef.DataType := ftInteger;
|
|
|
+
|
|
|
+ FieldDef := FTestDataset.FieldDefs.AddFieldDef;
|
|
|
+ FieldDef.Name := 'NAMESTRING';
|
|
|
+ FieldDef.DataType := ftString;
|
|
|
+ FieldDef.Size := 50;
|
|
|
+
|
|
|
+ FieldDef := FTestDataset.FieldDefs.AddFieldDef;
|
|
|
+ FieldDef.Name := 'REMARKSMEMO';
|
|
|
+ FieldDef.DataType := ftMemo;
|
|
|
+
|
|
|
+ FieldDef := FTestDataset.FieldDefs.AddFieldDef;
|
|
|
+ FieldDef.Name := 'BIRTHDAYDATE';
|
|
|
+ FieldDef.DataType := ftDate;
|
|
|
+
|
|
|
+ FieldDef := FTestDataset.FieldDefs.AddFieldDef;
|
|
|
+ FieldDef.Name := 'CVBLOB';
|
|
|
+ FieldDef.DataType := ftBlob;
|
|
|
+ FieldDef.Size := 16384;//large but hopefully not too large for memory.
|
|
|
+
|
|
|
+ FieldDef := FTestDataset.FieldDefs.AddFieldDef;
|
|
|
+ FieldDef.Name := 'POCKETMONEYCURRENCY';
|
|
|
+ FieldDef.DataType := ftCurrency;
|
|
|
+
|
|
|
+ FieldDef := FTestDataset.FieldDefs.AddFieldDef;
|
|
|
+ FieldDef.Name := 'NAUGHTYBOOLEAN';
|
|
|
+ FieldDef.DataType := ftBoolean;
|
|
|
+
|
|
|
+ //Createtable is needed if you use a memds
|
|
|
+ //FTestDataset.CreateTable;
|
|
|
+ //CreateDataset is needed if you use a bufdataset
|
|
|
+ FTestDataset.CreateDataSet;
|
|
|
+
|
|
|
+ // Fill dataset with test data
|
|
|
+ FillTestData;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Ttestxmlxsdexport1.Teardown;
|
|
|
+begin
|
|
|
+ FTestDataset.Free;
|
|
|
+end;
|
|
|
+
|
|
|
+initialization
|
|
|
+ Registertest(Ttestxmlxsdexport1);
|
|
|
+end.
|
|
|
+
|