* Additional tests for sqlite3dataset by Luis Americo (bug ID 323247)

git-svn-id: trunk@42945 -
This commit is contained in:
michael 2019-09-08 10:31:05 +00:00
parent 47dbaafa89
commit ff0887b9b3
5 changed files with 149 additions and 3 deletions

1
.gitattributes vendored
View File

@ -3429,6 +3429,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/testspecifictdbf.pas svneol=native#text/plain
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/testsqlfiles.lpi svneol=native#text/plain
packages/fcl-db/tests/testsqlfiles.lpr svneol=native#text/plain

View File

@ -17,6 +17,10 @@ uses
bufdatasettoolsunit,
memdstoolsunit,
SdfDSToolsUnit,
{$IFDEF TEST_SQLITE3DS}
Sqlite3DSToolsUnit,
TestSpecificTSqlite3Dataset,
{$ENDIF}
// Units wich contain the tests
tcsdfdata,
TestBasics,

View File

@ -26,6 +26,7 @@ uses
SdfDSToolsUnit,
{$IFDEF TEST_SQLITE3DS}
Sqlite3DSToolsUnit,
TestSpecificTSqlite3Dataset,
{$ENDIF}
// DB unittest
TestBasics,

View File

@ -119,8 +119,7 @@ begin
FieldByName('FMEMO').AsString := testStringValues[i];
Post;
end;
if not ApplyUpdates then
raise Exception.Create('Error in ApplyUpdates: ' + FieldDataset.ReturnString);
ApplyUpdates;
Destroy;
end;
except
@ -200,4 +199,4 @@ end;
initialization
RegisterClass(TSqlite3DSDBConnector);
end.
end.

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