mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 23:39:31 +02:00
* Tester for XSD export
git-svn-id: trunk@18026 -
This commit is contained in:
parent
03133e4980
commit
f0bbea9319
3
.gitattributes
vendored
3
.gitattributes
vendored
@ -1973,6 +1973,8 @@ packages/fcl-db/src/sqlite/testds.pas svneol=native#text/plain
|
||||
packages/fcl-db/tests/Makefile -text
|
||||
packages/fcl-db/tests/Makefile.fpc -text
|
||||
packages/fcl-db/tests/README.txt svneol=native#text/plain
|
||||
packages/fcl-db/tests/XMLXSDExportTest.lpi svneol=native#text/plain
|
||||
packages/fcl-db/tests/XMLXSDExportTest.lpr svneol=native#text/plain
|
||||
packages/fcl-db/tests/database.ini.txt svneol=native#text/plain
|
||||
packages/fcl-db/tests/dbftoolsunit.pas svneol=native#text/plain
|
||||
packages/fcl-db/tests/dbtestframework.pas svneol=native#text/plain
|
||||
@ -1994,6 +1996,7 @@ packages/fcl-db/tests/testsqlscanner.lpi svneol=native#text/plain
|
||||
packages/fcl-db/tests/testsqlscanner.lpr svneol=native#text/plain
|
||||
packages/fcl-db/tests/testsqlscript.pas svneol=native#text/plain
|
||||
packages/fcl-db/tests/toolsunit.pas svneol=native#text/plain
|
||||
packages/fcl-db/tests/xmlxsdexporttestcase1.pas svneol=native#text/plain
|
||||
packages/fcl-extra/Makefile svneol=native#text/plain
|
||||
packages/fcl-extra/Makefile.fpc svneol=native#text/plain
|
||||
packages/fcl-extra/examples/Makefile svneol=native#text/plain
|
||||
|
101
packages/fcl-db/tests/XMLXSDExportTest.lpi
Normal file
101
packages/fcl-db/tests/XMLXSDExportTest.lpi
Normal file
@ -0,0 +1,101 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="9"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<SaveOnlyProjectUnits Value="True"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<VersionInfo>
|
||||
<StringTable ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<BuildModes Count="2">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
<Item2 Name="Debug">
|
||||
<CompilerOptions>
|
||||
<Version Value="10"/>
|
||||
<PathDelim Value="\"/>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="True"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<UseMsgFile Value="True"/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="\usr\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="FPCUnitConsoleRunner"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="FCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="XMLXSDExportTest.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="XMLXSDExportTest"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="xmlxsdexporttestcase1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="XMLXSDExportTestCase1"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="10"/>
|
||||
<PathDelim Value="\"/>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
</SearchPaths>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<UseMsgFile Value="True"/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
27
packages/fcl-db/tests/XMLXSDExportTest.lpr
Normal file
27
packages/fcl-db/tests/XMLXSDExportTest.lpr
Normal file
@ -0,0 +1,27 @@
|
||||
program XMLXSDExportTest;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
Classes,
|
||||
consoletestrunner,
|
||||
XMLXSDExportTestCase1;
|
||||
|
||||
type
|
||||
|
||||
{ TLazTestRunner }
|
||||
|
||||
TMyTestRunner = class(TTestRunner)
|
||||
protected
|
||||
// override the protected methods of TTestRunner to customize its behavior
|
||||
end;
|
||||
|
||||
var
|
||||
Application: TMyTestRunner;
|
||||
|
||||
begin
|
||||
Application := TMyTestRunner.Create(nil);
|
||||
Application.Initialize;
|
||||
Application.Run;
|
||||
Application.Free;
|
||||
end.
|
357
packages/fcl-db/tests/xmlxsdexporttestcase1.pas
Normal file
357
packages/fcl-db/tests/xmlxsdexporttestcase1.pas
Normal file
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user