* Tester for XSD export

git-svn-id: trunk@18026 -
This commit is contained in:
michael 2011-07-27 18:35:16 +00:00
parent 03133e4980
commit f0bbea9319
4 changed files with 488 additions and 0 deletions

3
.gitattributes vendored
View File

@ -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

View 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>

View 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.

View 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.