fcl-db: tests: Improve TestOldValue; tests also Blobs (which has special storage) and state of TField.OldValue after MergeChangeLog

git-svn-id: trunk@26667 -
This commit is contained in:
lacak 2014-02-03 13:51:28 +00:00
parent 9c1f917e3a
commit cdc5e9a73a

View File

@ -8,7 +8,7 @@ interface
uses uses
{$IFDEF FPC} {$IFDEF FPC}
fpcunit, testutils, testregistry, testdecorator, fpcunit, testregistry,
{$ELSE FPC} {$ELSE FPC}
TestFramework, TestFramework,
{$ENDIF FPC} {$ENDIF FPC}
@ -650,19 +650,24 @@ begin
end; end;
procedure TTestCursorDBBasics.TestOldValue; procedure TTestCursorDBBasics.TestOldValue;
var OldValue: string;
Fmemo: TField;
begin begin
with DBConnector.GetNDataset(1) as TDataset do with DBConnector.GetFieldDataset as TCustomBufDataset do
begin; begin;
Open; Open;
First; First;
CheckEquals('1', VarToStr(Fields[0].OldValue), 'Original value'); // unmodified original value Next;
OldValue := Fields[0].AsString;
CheckEquals(OldValue, VarToStr(Fields[0].OldValue), 'Original value'); // unmodified original value
CheckTrue(UpdateStatus=usUnmodified, 'Unmodified'); CheckTrue(UpdateStatus=usUnmodified, 'Unmodified');
Edit; Edit;
Fields[0].AsInteger := -1; Fields[0].AsInteger := -1;
CheckEquals('1', VarToStr(Fields[0].OldValue), 'Editing'); // dsEdit, there is no update-buffer yet CheckEquals(OldValue, VarToStr(Fields[0].OldValue), 'Editing'); // dsEdit, there is no update-buffer yet
Post; Post;
CheckEquals('1', VarToStr(Fields[0].OldValue), 'Edited'); // there is already update-buffer CheckEquals(OldValue, VarToStr(Fields[0].OldValue), 'Edited'); // there is already update-buffer
CheckTrue(UpdateStatus=usModified, 'Modified'); CheckTrue(UpdateStatus=usModified, 'Modified');
Append; Append;
@ -671,6 +676,22 @@ begin
Post; Post;
CheckTrue(VarIsNull(Fields[0].OldValue), 'Inserted'); // there is already update-buffer CheckTrue(VarIsNull(Fields[0].OldValue), 'Inserted'); // there is already update-buffer
CheckTrue(UpdateStatus=usInserted, 'Inserted'); CheckTrue(UpdateStatus=usInserted, 'Inserted');
// Blobs are stored in a special way
// Use TMemoField because it implements AsVariant as AsString
First;
Next;
Fmemo := FieldByName('F'+FieldTypeNames[ftMemo]);
OldValue := Fmemo.AsString;
CheckEquals(OldValue, Fmemo.OldValue, 'Memo.OldValue');
Edit;
Fmemo.AsString := 'Changed Memo value';
CheckEquals(OldValue, Fmemo.OldValue, 'Memo.OldValue before Post');
Post;
CheckEquals(OldValue, Fmemo.OldValue, 'Memo.OldValue after Post');
MergeChangeLog;
CheckEquals('Changed Memo value', Fmemo.OldValue, 'Memo.OldValue after MergeChangeLog');
end; end;
end; end;
@ -1676,7 +1697,7 @@ begin
i := fields[0].AsInteger; i := fields[0].AsInteger;
s := fields[1].AsString; s := fields[1].AsString;
fields[0].AsInteger:=64; fields[0].AsInteger:=64;
fields[1].AsString:='Changed'; fields[1].AsString:='Changed1';
Post; Post;
checkequals(fields[0].OldValue,i); checkequals(fields[0].OldValue,i);
checkequals(fields[1].OldValue,s); checkequals(fields[1].OldValue,s);
@ -1686,7 +1707,7 @@ begin
i := fields[0].AsInteger; i := fields[0].AsInteger;
s := fields[1].AsString; s := fields[1].AsString;
fields[0].AsInteger:=23; fields[0].AsInteger:=23;
fields[1].AsString:='hanged'; fields[1].AsString:='Changed2';
Post; Post;
checkequals(fields[0].OldValue,i); checkequals(fields[0].OldValue,i);
checkequals(fields[1].OldValue,s); checkequals(fields[1].OldValue,s);
@ -1694,7 +1715,7 @@ begin
MergeChangeLog; MergeChangeLog;
CheckEquals(ChangeCount,0); CheckEquals(ChangeCount,0);
checkequals(fields[0].OldValue,23); checkequals(fields[0].OldValue,23);
checkequals(fields[1].OldValue,'hanged'); checkequals(fields[1].OldValue,'Changed2');
end; end;
// Test handling of [Update]BlobBuffers in TBufDataset // Test handling of [Update]BlobBuffers in TBufDataset