| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- unit TestDBBasics;
- {$IFDEF FPC}
- {$mode objfpc}{$H+}
- {$ENDIF}
- interface
- uses
- fpcunit, testutils, testregistry, testdecorator,
- Classes, SysUtils;
- type
- { TTestSQLMechanism }
- { TTestDBBasics }
- TTestDBBasics = class(TTestCase)
- private
- protected
- procedure SetUp; override;
- procedure TearDown; override;
- procedure RunTest; override;
- published
- procedure TestDoubleClose;
- procedure TestAssignFieldftString;
- procedure TestAssignFieldftFixedChar;
- procedure TestSelectQueryBasics;
- procedure TestPostOnlyInEditState;
- procedure TestMove; // bug 5048
- procedure TestActiveBufferWhenClosed;
- procedure TestEOFBOFClosedDataset;
- procedure TestdeFieldListChange;
- procedure TestLastAppendCancel; // bug 5058
- procedure TestRecNo; // bug 5061
- end;
- { TSQLTestSetup }
- TDBBasicsTestSetup = class(TTestSetup)
- protected
- procedure OneTimeSetup; override;
- procedure OneTimeTearDown; override;
- end;
- implementation
- uses db, toolsunit;
- procedure TTestDBBasics.TestSelectQueryBasics;
- var b : TFieldType;
- begin
- with DBConnector.GetNDataset(1) do
- begin
- Open;
- AssertEquals(1,RecNo);
- AssertEquals(1,RecordCount);
- AssertEquals(2,FieldCount);
- AssertEquals('ID',fields[0].FieldName);
- AssertEquals('ID',fields[0].DisplayName); // uitzoeken verschil displaylabel
- AssertTrue('The datatype of the field ''ID'' is incorrect, it should be ftInteger',ftInteger=fields[0].DataType);
- AssertEquals('NAME',fields[1].FieldName);
- AssertEquals('NAME',fields[1].DisplayName);
- AssertTrue(ftString=fields[1].DataType);
- AssertEquals(1,fields[0].Value);
- AssertEquals('TestName1',fields[1].Value);
- Close;
- end;
- end;
- procedure TTestDBBasics.TestPostOnlyInEditState;
- begin
- with DBConnector.GetNDataset(1) do
- begin
- open;
- {$IFDEF FPC}
- AssertException('Post was called in a non-edit state',EDatabaseError,@Post);
- {$ELSE}
- AssertException('Post was called in a non-edit state',EDatabaseError,Post);
- {$ENDIF}
- end;
- end;
- procedure TTestDBBasics.TestMove;
- var i,count : integer;
- aDatasource : TDataSource;
- aDatalink : TDataLink;
- ABufferCount : Integer;
- begin
- aDatasource := TDataSource.Create(nil);
- aDatalink := TTestDataLink.Create;
- aDatalink.DataSource := aDatasource;
- ABufferCount := 11;
- aDatalink.BufferCount := ABufferCount;
- DataEvents := '';
- for count := 0 to 32 do with DBConnector.GetNDataset(count) do
- begin
- aDatasource.DataSet := DBConnector.GetNDataset(count);
- i := 1;
- Open;
- AssertEquals('deUpdateState:0;',DataEvents);
- DataEvents := '';
- while not EOF do
- begin
- AssertEquals(i,fields[0].AsInteger);
- AssertEquals('TestName'+inttostr(i),fields[1].AsString);
- inc(i);
- Next;
- if (i > ABufferCount) and not EOF then
- AssertEquals('deCheckBrowseMode:0;deDataSetScroll:-1;',DataEvents)
- else
- AssertEquals('deCheckBrowseMode:0;deDataSetScroll:0;',DataEvents);
- DataEvents := '';
- end;
- AssertEquals(count,i-1);
- close;
- AssertEquals('deUpdateState:0;',DataEvents);
- DataEvents := '';
- end;
- end;
- procedure TTestDBBasics.TestdeFieldListChange;
- var i,count : integer;
- aDatasource : TDataSource;
- aDatalink : TDataLink;
- begin
- aDatasource := TDataSource.Create(nil);
- aDatalink := TTestDataLink.Create;
- aDatalink.DataSource := aDatasource;
- with DBConnector.GetNDataset(1) do
- begin
- aDatasource.DataSet := DBConnector.GetNDataset(1);
- DataEvents := '';
- open;
- Fields.add(tfield.Create(DBConnector.GetNDataset(1)));
- AssertEquals('deUpdateState:0;deFieldListChange:0;',DataEvents);
- DataEvents := '';
- fields.Clear;
- AssertEquals('deFieldListChange:0;',DataEvents)
- end;
- aDatasource.Free;
- aDatalink.Free;
- end;
- procedure TTestDBBasics.TestActiveBufferWhenClosed;
- begin
- with DBConnector.GetNDataset(0) do
- begin
- {$IFDEF fpc}
- AssertNull(ActiveBuffer);
- {$ENDIF}
- open;
- AssertFalse('Activebuffer of an empty dataset shouldn''t be nil',ActiveBuffer = nil);
- end;
- end;
- procedure TTestDBBasics.TestEOFBOFClosedDataset;
- begin
- with DBConnector.GetNDataset(1) do
- begin
- AssertTrue(EOF);
- AssertTrue(BOF);
- open;
- close;
- AssertTrue(EOF);
- AssertTrue(BOF);
- end;
- end;
- procedure TTestDBBasics.TestLastAppendCancel;
- var count : integer;
- begin
- for count := 0 to 32 do with DBConnector.GetNDataset(count) do
- begin
- open;
- Last;
- Append;
- Cancel;
- AssertEquals(count,fields[0].asinteger);
- AssertEquals(count,RecordCount);
- Close;
- end;
-
- end;
- procedure TTestDBBasics.TestRecNo;
- begin
- with DBConnector.GetNDataset(0) do
- begin
- AssertEquals('Failed to get the RecNo from a closed dataset',0,RecNo);
- AssertEquals(0,RecordCount);
- Open;
- AssertEquals(0,RecordCount);
- AssertEquals(0,RecNo);
- first;
- AssertEquals(0,RecordCount);
- AssertEquals(0,RecNo);
- last;
- AssertEquals(0,RecordCount);
- AssertEquals(0,RecNo);
- append;
- AssertEquals(0,RecNo);
- AssertEquals(0,RecordCount);
- first;
- AssertEquals(0,RecNo);
- AssertEquals(0,RecordCount);
- append;
- FieldByName('id').AsInteger := 1;
- AssertEquals(0,RecNo);
- AssertEquals(0,RecordCount);
- first;
- AssertEquals(1,RecNo);
- AssertEquals(1,RecordCount);
- last;
- AssertEquals(1,RecNo);
- AssertEquals(1,RecordCount);
- append;
- FieldByName('id').AsInteger := 1;
- AssertEquals(0,RecNo);
- AssertEquals(1,RecordCount);
- Close;
- end;
- end;
- procedure TTestDBBasics.SetUp;
- begin
- DBConnector.InitialiseDatasets;
- end;
- procedure TTestDBBasics.TearDown;
- var count : integer;
- begin
- DBConnector.FreeDatasets;
- end;
- procedure TTestDBBasics.RunTest;
- begin
- inherited RunTest;
- // inherited RunTest;
- // inherited RunTest;
- end;
- procedure TTestDBBasics.TestDoubleClose;
- begin
- with DBConnector.GetNDataset(1) do
- begin
- close;
- close;
- open;
- close;
- close;
- end;
- end;
- procedure TTestDBBasics.TestAssignFieldftString;
- var AParam : TParam;
- AField : TField;
- begin
- AParam := TParam.Create(nil);
- with DBConnector.GetNDataset(1) do
- begin
- open;
- AField := fieldbyname('name');
- (AField as tstringfield).FixedChar := true;
- AParam.AssignField(AField);
- AssertTrue(ftFixedChar=AParam.DataType);
- close;
- end;
- AParam.Free;
- end;
- procedure TTestDBBasics.TestAssignFieldftFixedChar;
- var AParam : TParam;
- AField : TField;
- begin
- AParam := TParam.Create(nil);
- with DBConnector.GetNDataset(1) do
- begin
- open;
- AField := fieldbyname('name');
- (AField as tstringfield).FixedChar := true;
- AParam.AssignField(AField);
- AssertTrue(ftFixedChar=AParam.DataType);
- close;
- end;
- AParam.Free;
- end;
- { TSQLTestSetup }
- procedure TDBBasicsTestSetup.OneTimeSetup;
- begin
- InitialiseDBConnector;
- end;
- procedure TDBBasicsTestSetup.OneTimeTearDown;
- begin
- FreeAndNil(DBConnector);
- end;
- initialization
- RegisterTestDecorator(TDBBasicsTestSetup, TTestDBBasics);
- end.
|