* Test for CalculateFields

* Added cwstring unit on unix to avoid Widestring-issues

git-svn-id: trunk@10520 -
This commit is contained in:
joost 2008-03-21 14:28:34 +00:00
parent 805bcf1c1d
commit e0593d7e6a
2 changed files with 77 additions and 3 deletions

View File

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

View File

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