Browse Source

* Tester for XSD export

git-svn-id: trunk@18026 -
michael 14 years ago
parent
commit
f0bbea9319

+ 3 - 0
.gitattributes

@@ -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 - 0
packages/fcl-db/tests/XMLXSDExportTest.lpi

@@ -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 - 0
packages/fcl-db/tests/XMLXSDExportTest.lpr

@@ -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 - 0
packages/fcl-db/tests/xmlxsdexporttestcase1.pas

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