mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-09 07:28:26 +02:00
* Test for CalculateFields
* Added cwstring unit on unix to avoid Widestring-issues git-svn-id: trunk@10520 -
This commit is contained in:
parent
805bcf1c1d
commit
e0593d7e6a
@ -33,6 +33,7 @@ type
|
||||
procedure RefreshInternalCalcFields(Buffer: PChar); override;
|
||||
procedure InternalInitFieldDefs; override;
|
||||
procedure CalculateFields(Buffer: PChar); override;
|
||||
procedure ClearCalcFields(Buffer: PChar); override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -188,6 +189,12 @@ begin
|
||||
inherited CalculateFields(Buffer);
|
||||
end;
|
||||
|
||||
procedure TDbfTraceDataset.ClearCalcFields(Buffer: PChar);
|
||||
begin
|
||||
DataEvents := DataEvents + 'ClearCalcFields' + ';';
|
||||
inherited ClearCalcFields(Buffer);
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterClass(TDBFDBConnector);
|
||||
end.
|
||||
|
@ -16,6 +16,7 @@ type
|
||||
TTestDatasources = class(TTestCase)
|
||||
private
|
||||
procedure FieldNotifyEvent(Sender: TField);
|
||||
procedure DatasetNotifyEvent(Dataset: TDataset);
|
||||
protected
|
||||
procedure SetUp; override;
|
||||
procedure TearDown; override;
|
||||
@ -31,11 +32,12 @@ type
|
||||
procedure TestDataEvent7;
|
||||
procedure TestCalcFirstRecord1;
|
||||
procedure TestRefreshLookupList;
|
||||
procedure TestCalculateFields;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses ToolsUnit, dbf, testregistry, variants;
|
||||
uses ToolsUnit, dbf, testregistry, variants{$IFDEF UNIX},cwstring {$ENDIF};
|
||||
|
||||
type THackDataset=class(TDataset);
|
||||
THackDataLink=class(TDatalink);
|
||||
@ -47,6 +49,11 @@ begin
|
||||
DataEvents := DataEvents + 'FieldNotifyEvent' + ';';
|
||||
end;
|
||||
|
||||
procedure TTestDatasources.DatasetNotifyEvent(Dataset: TDataset);
|
||||
begin
|
||||
DataEvents := DataEvents + 'DatasetNotifyEvent' + ';';
|
||||
end;
|
||||
|
||||
procedure TTestDatasources.SetUp;
|
||||
begin
|
||||
DBConnector.StartTest;
|
||||
@ -306,7 +313,7 @@ begin
|
||||
DataEvents := '';
|
||||
AutoCalcFields:=True;
|
||||
THackDataset(ds).DataEvent(deFieldChange,PtrInt(AFld));
|
||||
AssertEquals('CalculateFields;deFieldChange:ID;',DataEvents);
|
||||
AssertEquals('CalculateFields;ClearCalcFields;deFieldChange:ID;',DataEvents);
|
||||
|
||||
AFld := FieldByName('calcfld');
|
||||
DataEvents := '';
|
||||
@ -485,7 +492,6 @@ end;
|
||||
procedure TTestDatasources.TestRefreshLookupList;
|
||||
var ds, lkpDs : TDataset;
|
||||
AFld1, AFld2, AFld3 : Tfield;
|
||||
ExceptionOccured : boolean;
|
||||
Var1,Var2 : Variant;
|
||||
|
||||
procedure TestLookupList;
|
||||
@ -559,6 +565,67 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTestDatasources.TestCalculateFields;
|
||||
var ds, lkpDs : TDataset;
|
||||
AFld1, AFld2, AFld3 : Tfield;
|
||||
StoreValue : Variant;
|
||||
Buffer: pchar;
|
||||
begin
|
||||
ds := DBConnector.GetTraceDataset(False);
|
||||
lkpDs := DBConnector.GetNDataset(5);
|
||||
with ds do
|
||||
begin
|
||||
AFld1 := TIntegerField.Create(ds);
|
||||
AFld1.FieldName := 'ID';
|
||||
AFld1.DataSet := ds;
|
||||
|
||||
AFld2 := TStringField.Create(ds);
|
||||
AFld2.FieldName := 'NAME';
|
||||
AFld2.DataSet := ds;
|
||||
|
||||
AFld3 := TIntegerField.Create(ds);
|
||||
with AFld3 do
|
||||
begin
|
||||
FieldName := 'LookupFld';
|
||||
FieldKind := fkLookup;
|
||||
DataSet := ds;
|
||||
LookupDataSet := lkpDs;
|
||||
LookupKeyFields:='name';
|
||||
LookupResultField:='ID';
|
||||
KeyFields := 'name';
|
||||
end;
|
||||
ds.OnCalcFields:=DatasetNotifyEvent;
|
||||
lkpds.Open;
|
||||
open;
|
||||
Buffer:=ds.ActiveBuffer;
|
||||
|
||||
// If the state is dsInternalCalc, only the OnCalcField event should be called
|
||||
THackDataset(ds).SetState(dsInternalCalc);
|
||||
DataEvents:='';
|
||||
StoreValue:=AFld3.Value;
|
||||
THackDataset(ds).CalculateFields(Buffer);
|
||||
AssertEquals('CalculateFields;DatasetNotifyEvent;',DataEvents);
|
||||
AssertEquals(VarToStr(StoreValue),VarToSTr(AFld3.Value));
|
||||
THackDataset(ds).SetState(dsBrowse);
|
||||
|
||||
// Also if the dataset is Unidirectional, only the OnCalcField event should be called
|
||||
THackDataset(ds).SetUniDirectional(True);
|
||||
DataEvents:='';
|
||||
StoreValue:=AFld3.Value;
|
||||
THackDataset(ds).CalculateFields(Buffer);
|
||||
AssertEquals('CalculateFields;DatasetNotifyEvent;',DataEvents);
|
||||
AssertEquals(VarToStr(StoreValue),VarToSTr(AFld3.Value));
|
||||
THackDataset(ds).SetUniDirectional(False);
|
||||
|
||||
// Else, the value of all the lookup fields should get calculated
|
||||
DataEvents:='';
|
||||
THackDataset(ds).CalculateFields(Buffer);
|
||||
AssertEquals('CalculateFields;ClearCalcFields;DatasetNotifyEvent;',DataEvents);
|
||||
// This assertion fails because of bug 11027
|
||||
//AssertEquals('1',VarToStr(StoreValue));
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
if uppercase(dbconnectorname)='DBF' then RegisterTest(TTestDatasources);
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user