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