mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 13:49:39 +02:00
* Merging revisions 42945 from trunk:
------------------------------------------------------------------------ r42945 | michael | 2019-09-08 12:31:05 +0200 (Sun, 08 Sep 2019) | 1 line * Additional tests for sqlite3dataset by Luis Americo (bug ID 323247) ------------------------------------------------------------------------ git-svn-id: branches/fixes_3_2@43235 -
This commit is contained in:
parent
eb0fe9ac13
commit
50275955bc
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -2288,6 +2288,7 @@ packages/fcl-db/tests/testleaks.sh svneol=native#text/plain
|
|||||||
packages/fcl-db/tests/testspecifictbufdataset.pas svneol=native#text/plain
|
packages/fcl-db/tests/testspecifictbufdataset.pas svneol=native#text/plain
|
||||||
packages/fcl-db/tests/testspecifictdbf.pas svneol=native#text/plain
|
packages/fcl-db/tests/testspecifictdbf.pas svneol=native#text/plain
|
||||||
packages/fcl-db/tests/testspecifictmemdataset.pas svneol=native#text/pascal
|
packages/fcl-db/tests/testspecifictmemdataset.pas svneol=native#text/pascal
|
||||||
|
packages/fcl-db/tests/testspecifictsqlite3dataset.pp svneol=native#text/plain
|
||||||
packages/fcl-db/tests/testsqldb.pas svneol=native#text/pascal
|
packages/fcl-db/tests/testsqldb.pas svneol=native#text/pascal
|
||||||
packages/fcl-db/tests/testsqlfiles.lpi svneol=native#text/plain
|
packages/fcl-db/tests/testsqlfiles.lpi svneol=native#text/plain
|
||||||
packages/fcl-db/tests/testsqlfiles.lpr svneol=native#text/plain
|
packages/fcl-db/tests/testsqlfiles.lpr svneol=native#text/plain
|
||||||
|
@ -17,6 +17,10 @@ uses
|
|||||||
bufdatasettoolsunit,
|
bufdatasettoolsunit,
|
||||||
memdstoolsunit,
|
memdstoolsunit,
|
||||||
SdfDSToolsUnit,
|
SdfDSToolsUnit,
|
||||||
|
{$IFDEF TEST_SQLITE3DS}
|
||||||
|
Sqlite3DSToolsUnit,
|
||||||
|
TestSpecificTSqlite3Dataset,
|
||||||
|
{$ENDIF}
|
||||||
// Units wich contain the tests
|
// Units wich contain the tests
|
||||||
tcsdfdata,
|
tcsdfdata,
|
||||||
TestBasics,
|
TestBasics,
|
||||||
|
@ -26,6 +26,7 @@ uses
|
|||||||
SdfDSToolsUnit,
|
SdfDSToolsUnit,
|
||||||
{$IFDEF TEST_SQLITE3DS}
|
{$IFDEF TEST_SQLITE3DS}
|
||||||
Sqlite3DSToolsUnit,
|
Sqlite3DSToolsUnit,
|
||||||
|
TestSpecificTSqlite3Dataset,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
// DB unittest
|
// DB unittest
|
||||||
TestBasics,
|
TestBasics,
|
||||||
|
@ -119,8 +119,7 @@ begin
|
|||||||
FieldByName('FMEMO').AsString := testStringValues[i];
|
FieldByName('FMEMO').AsString := testStringValues[i];
|
||||||
Post;
|
Post;
|
||||||
end;
|
end;
|
||||||
if not ApplyUpdates then
|
ApplyUpdates;
|
||||||
raise Exception.Create('Error in ApplyUpdates: ' + FieldDataset.ReturnString);
|
|
||||||
Destroy;
|
Destroy;
|
||||||
end;
|
end;
|
||||||
except
|
except
|
||||||
@ -200,4 +199,4 @@ end;
|
|||||||
|
|
||||||
initialization
|
initialization
|
||||||
RegisterClass(TSqlite3DSDBConnector);
|
RegisterClass(TSqlite3DSDBConnector);
|
||||||
end.
|
end.
|
||||||
|
141
packages/fcl-db/tests/testspecifictsqlite3dataset.pp
Normal file
141
packages/fcl-db/tests/testspecifictsqlite3dataset.pp
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
unit TestSpecificTSqlite3Dataset;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, ToolsUnit, Sqlite3DS;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TTestSpecificTSqlite3Dataset }
|
||||||
|
|
||||||
|
TTestSpecificTSqlite3Dataset = class(TDBBasicsTestCase)
|
||||||
|
private
|
||||||
|
function CreateMemoryDataset: TSqlite3Dataset;
|
||||||
|
protected
|
||||||
|
published
|
||||||
|
procedure TestApplyUpdates;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
testregistry;
|
||||||
|
|
||||||
|
|
||||||
|
{ TTestSpecificTSqlite3Dataset }
|
||||||
|
|
||||||
|
function TTestSpecificTSqlite3Dataset.CreateMemoryDataset: TSqlite3Dataset;
|
||||||
|
begin
|
||||||
|
Result := TSqlite3Dataset.Create(nil);
|
||||||
|
Result.FileName := ':memory:';
|
||||||
|
Result.TableName := 'Test';
|
||||||
|
Result.PrimaryKey := 'Id';
|
||||||
|
Result.ExecSQL('Create Table Test (Id INTEGER PRIMARY KEY, Name VARCHAR);');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestSpecificTSqlite3Dataset.TestApplyUpdates;
|
||||||
|
var
|
||||||
|
Dataset: TSqlite3Dataset;
|
||||||
|
ExceptionRaised: Boolean;
|
||||||
|
begin
|
||||||
|
Dataset := CreateMemoryDataset;
|
||||||
|
try
|
||||||
|
// insert
|
||||||
|
Dataset.Open;
|
||||||
|
CheckEquals(0, Dataset.RecordCount, 'Dataset should be empty');
|
||||||
|
Dataset.Append;
|
||||||
|
Dataset.FieldByName('Name').AsString := 'Luiz';
|
||||||
|
Dataset.Post;
|
||||||
|
Dataset.ApplyUpdates;
|
||||||
|
Dataset.Close;
|
||||||
|
Dataset.Open;
|
||||||
|
CheckEquals(1, Dataset.RecordCount, 'Record count should increase after apply insert updates');
|
||||||
|
CheckEquals('Luiz', Dataset.FieldByName('Name').AsString, 'Record field should be set');
|
||||||
|
// update
|
||||||
|
Dataset.Edit;
|
||||||
|
Dataset.FieldByName('Name').AsString := 'New';
|
||||||
|
Dataset.Post;
|
||||||
|
Dataset.ApplyUpdates;
|
||||||
|
Dataset.Close;
|
||||||
|
Dataset.Open;
|
||||||
|
CheckEquals(1, Dataset.RecordCount, 'Record count should not change after apply update updates');
|
||||||
|
CheckEquals('New', Dataset.FieldByName('Name').AsString, 'Record field should be updated');
|
||||||
|
//delete
|
||||||
|
Dataset.Delete;
|
||||||
|
Dataset.ApplyUpdates;
|
||||||
|
Dataset.Close;
|
||||||
|
Dataset.Open;
|
||||||
|
CheckEquals(0, Dataset.RecordCount, 'Record count should decrease after apply delete updates');
|
||||||
|
finally
|
||||||
|
Dataset.Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Dataset := CreateMemoryDataset;
|
||||||
|
try
|
||||||
|
Dataset.Open;
|
||||||
|
CheckEquals(0, Dataset.RecordCount, 'Dataset should be empty');
|
||||||
|
Dataset.Append;
|
||||||
|
Dataset.FieldByName('Name').AsString := 'Luiz';
|
||||||
|
Dataset.Post;
|
||||||
|
Dataset.TableName := 'NonExistentTable';
|
||||||
|
ExceptionRaised := False;
|
||||||
|
try
|
||||||
|
Dataset.ApplyUpdates;
|
||||||
|
except
|
||||||
|
ExceptionRaised := True;
|
||||||
|
end;
|
||||||
|
CheckTrue(ExceptionRaised, 'An exception should be raised if TableName is invalid');
|
||||||
|
finally
|
||||||
|
Dataset.Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Dataset := CreateMemoryDataset;
|
||||||
|
try
|
||||||
|
Dataset.Open;
|
||||||
|
Dataset.Append;
|
||||||
|
Dataset.FieldByName('Name').AsString := 'Luiz';
|
||||||
|
Dataset.Post;
|
||||||
|
Dataset.ApplyUpdates;
|
||||||
|
|
||||||
|
Dataset.Close;
|
||||||
|
Dataset.PrimaryKey := '';
|
||||||
|
Dataset.Open;
|
||||||
|
Dataset.Edit;
|
||||||
|
Dataset.FieldByName('Name').AsString := 'New';
|
||||||
|
Dataset.Post;
|
||||||
|
ExceptionRaised := False;
|
||||||
|
try
|
||||||
|
Dataset.ApplyUpdates;
|
||||||
|
except
|
||||||
|
ExceptionRaised := True;
|
||||||
|
end;
|
||||||
|
CheckTrue(ExceptionRaised, 'An exception should be raised if PrimaryKey is empty');
|
||||||
|
|
||||||
|
Dataset.Close;
|
||||||
|
Dataset.PrimaryKey := 'NonExistingKey';
|
||||||
|
Dataset.Open;
|
||||||
|
Dataset.Edit;
|
||||||
|
Dataset.FieldByName('Name').AsString := 'New';
|
||||||
|
Dataset.Post;
|
||||||
|
ExceptionRaised := False;
|
||||||
|
try
|
||||||
|
Dataset.ApplyUpdates;
|
||||||
|
except
|
||||||
|
ExceptionRaised := True;
|
||||||
|
end;
|
||||||
|
CheckTrue(ExceptionRaised, 'An exception should be raised if PrimaryKey is invalid');
|
||||||
|
finally
|
||||||
|
Dataset.Destroy;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
|
||||||
|
if UpperCase(dbconnectorname) = 'SQLITE3DS' then
|
||||||
|
RegisterTestDecorator(TDBBasicsTestSetup, TTestSpecificTSqlite3Dataset);
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user