fcl-db: tests: cosmetic (comments + grouping similar tests)

git-svn-id: trunk@27125 -
This commit is contained in:
lacak 2014-03-13 11:14:33 +00:00
parent f9bb91d722
commit 2d8c0942c7

View File

@ -24,6 +24,7 @@ type
procedure TestcalculatedField_OnCalcfields(DataSet: TDataSet);
published
// fields
procedure TestSetFieldValues;
procedure TestGetFieldValues;
@ -43,9 +44,12 @@ type
procedure TestSupportBlobFields;
procedure TestSupportMemoFields;
procedure TestCalculatedField;
procedure TestCanModifySpecialFields;
// dataset
procedure TestDoubleClose;
procedure TestFieldDefsUpdate;
procedure TestCalculatedField;
procedure TestAssignFieldftString;
procedure TestAssignFieldftFixedChar;
procedure TestSelectQueryBasics;
@ -53,13 +57,13 @@ type
procedure TestMove; // bug 5048
procedure TestActiveBufferWhenClosed;
procedure TestEOFBOFClosedDataset;
procedure TestRecordcountAfterReopen; // partly bug 8228
procedure TestExceptionLocateClosed; // bug 13938
procedure TestDetectionNonMatchingDataset;
// events
procedure TestLayoutChangedEvents;
procedure TestDataEventsResync;
procedure TestRecordcountAfterReopen; // partly bug 8228
procedure TestdeFieldListChange;
procedure TestExceptionLocateClosed; // bug 13938
procedure TestCanModifySpecialFields;
procedure TestDetectionNonMatchingDataset;
end;
{ TTestBufDatasetDBBasics }
@ -69,18 +73,17 @@ type
procedure FTestXMLDatasetDefinition(ADataset : TDataset);
procedure TestAddIndexFieldType(AFieldType : TFieldType; ActiveDS : boolean);
published
procedure TestClosedIndexFieldNames; // bug 16695
procedure TestFileNameProperty;
procedure TestClientDatasetAsMemDataset;
procedure TestSaveAsXML;
procedure TestIsEmpty;
procedure TestReadOnly;
// cached updates
procedure TestBufDatasetCancelUpd; //bug 6938
procedure TestBufDatasetCancelUpd1;
procedure TestMultipleDeleteUpdateBuffer;
procedure TestDoubleDelete;
procedure TestReadOnly;
procedure TestMergeChangeLog;
procedure TestEditedBlobBeforePost; //bug 15376
// index tests
procedure TestAddIndexInteger;
procedure TestAddIndexSmallInt;
@ -100,7 +103,8 @@ type
procedure TestAddIndexEditDS;
procedure TestIndexFieldNames;
procedure TestIndexFieldNamesAct;
procedure TestIndexFieldNamesActive;
procedure TestIndexFieldNamesClosed; // bug 16695
procedure TestIndexCurRecord;
@ -156,9 +160,11 @@ type
procedure TestBug7007;
procedure TestBug6893;
procedure TestRequired;
procedure TestOldValueObsolete;
procedure TestOldValue;
procedure TestModified;
// fields
procedure TestFieldOldValueObsolete;
procedure TestFieldOldValue;
procedure TestChangeBlobFieldBeforePost; //bug 15376
end;
@ -312,34 +318,6 @@ begin
end;
end;
procedure TTestDBBasics.TestdeFieldListChange;
var i,count : integer;
aDatasource : TDataSource;
aDatalink : TDataLink;
ds : TDataset;
begin
aDatasource := TDataSource.Create(nil);
aDatalink := TTestDataLink.Create;
aDatalink.DataSource := aDatasource;
ds := DBConnector.GetNDataset(1);
with ds do
begin
aDatasource.DataSet := ds;
DataEvents := '';
Open;
Fields.Add(TField.Create(ds));
CheckEquals('deUpdateState:0;deFieldListChange:0;',DataEvents);
DataEvents := '';
Fields.Clear;
CheckEquals('deFieldListChange:0;',DataEvents)
end;
aDatasource.Free;
aDatalink.Free;
end;
procedure TTestDBBasics.TestActiveBufferWhenClosed;
begin
with DBConnector.GetNDataset(0) do
@ -436,6 +414,33 @@ begin
end;
end;
procedure TTestDBBasics.TestdeFieldListChange;
var i,count : integer;
aDatasource : TDataSource;
aDatalink : TDataLink;
ds : TDataset;
begin
aDatasource := TDataSource.Create(nil);
aDatalink := TTestDataLink.Create;
aDatalink.DataSource := aDatasource;
ds := DBConnector.GetNDataset(1);
with ds do
begin
aDatasource.DataSet := ds;
DataEvents := '';
Open;
Fields.Add(TField.Create(ds));
CheckEquals('deUpdateState:0;deFieldListChange:0;',DataEvents);
DataEvents := '';
Fields.Clear;
CheckEquals('deFieldListChange:0;',DataEvents)
end;
aDatasource.Free;
aDatalink.Free;
end;
procedure TTestDBBasics.TestRecordcountAfterReopen;
var
datalink1: tdatalink;
@ -631,72 +636,6 @@ begin
end;
end;
procedure TTestCursorDBBasics.TestOldValueObsolete;
var v : variant;
bufds: TDataset;
begin
// this test was created as reaction to AV bug found in TCustomBufDataset.GetFieldData
// when retrieving OldValue (State=dsOldValue) of newly inserted or appended record.
// In this case was CurrBuff set to nil (and not checked),
// because OldValuesBuffer for just inserted record is nil. See rev.17704
// (So purpose of this test isn't test InsertRecord on empty dataset or so)
// Later was this test replaced by more complex TestOldValue (superset of old test),
// but next to it was restored back also original test.
// So now we have two tests which test same thing, where this 'old' one is subset of 'new' one
// Ideal solution would be remove this 'old' test as it does not test anything what is not tested elsewhere ...
bufds := DBConnector.GetNDataset(0) as TDataset;
bufds.Open;
bufds.InsertRecord([0,'name']);
v := VarToStr(bufds.fields[1].OldValue);
end;
procedure TTestCursorDBBasics.TestOldValue;
var OldValue: string;
Fmemo: TField;
begin
with DBConnector.GetFieldDataset as TCustomBufDataset do
begin;
Open;
First;
Next;
OldValue := Fields[0].AsString;
CheckEquals(OldValue, VarToStr(Fields[0].OldValue), 'Original value'); // unmodified original value
CheckTrue(UpdateStatus=usUnmodified, 'Unmodified');
Edit;
Fields[0].AsInteger := -1;
CheckEquals(OldValue, VarToStr(Fields[0].OldValue), 'Editing'); // dsEdit, there is no update-buffer yet
Post;
CheckEquals(OldValue, VarToStr(Fields[0].OldValue), 'Edited'); // there is already update-buffer
CheckTrue(UpdateStatus=usModified, 'Modified');
Append;
Fields[0].AsInteger := -2;
CheckTrue(VarIsNull(Fields[0].OldValue), 'Inserting'); // dsInsert, there is no update-buffer yet
Post;
CheckTrue(VarIsNull(Fields[0].OldValue), 'Inserted'); // there is already update-buffer
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;
procedure TTestCursorDBBasics.TestModified;
begin
// Tests TDataSet.Modified property
@ -723,58 +662,6 @@ begin
end;
end;
procedure TTestDBBasics.TestCanModifySpecialFields;
var ds : TDataset;
lds : TDataset;
fld : TField;
begin
lds := DBConnector.GetNDataset(10);
ds := DBConnector.GetNDataset(5);
with ds do
begin
Fld := TIntegerField.Create(ds);
Fld.FieldName:='ID';
Fld.DataSet:=ds;
Fld := TStringField.Create(ds);
Fld.FieldName:='LookupFld';
Fld.FieldKind:=fkLookup;
Fld.DataSet:=ds;
Fld.LookupDataSet:=lds;
Fld.LookupResultField:='NAME';
Fld.LookupKeyFields:='ID';
Fld.KeyFields:='ID';
lds.Open;
Open;
if IsUniDirectional then
// The CanModify property is always False for UniDirectional datasets
CheckFalse(FieldByName('ID').CanModify)
else
CheckTrue(FieldByName('ID').CanModify);
CheckFalse(FieldByName('LookupFld').CanModify);
CheckFalse(FieldByName('ID').ReadOnly);
CheckFalse(FieldByName('LookupFld').ReadOnly);
CheckEquals(1,FieldByName('ID').AsInteger);
if IsUniDirectional then
// Lookup fields are not supported by UniDirectional datasets
CheckTrue(FieldByName('LookupFld').IsNull)
else
CheckEquals('TestName1',FieldByName('LookupFld').AsString);
Next;
Next;
CheckEquals(3,FieldByName('ID').AsInteger);
if IsUniDirectional then
CheckTrue(FieldByName('LookupFld').IsNull)
else
CheckEquals('TestName3',FieldByName('LookupFld').AsString);
Close;
lds.Close;
end;
end;
procedure TTestDBBasics.TestDetectionNonMatchingDataset;
var
F: TField;
@ -1032,6 +919,96 @@ begin
end;
end;
procedure TTestCursorDBBasics.TestFieldOldValueObsolete;
var v : variant;
bufds: TDataset;
begin
// this test was created as reaction to AV bug found in TCustomBufDataset.GetFieldData
// when retrieving OldValue (State=dsOldValue) of newly inserted or appended record.
// In this case was CurrBuff set to nil (and not checked),
// because OldValuesBuffer for just inserted record is nil. See rev.17704
// (So purpose of this test isn't test InsertRecord on empty dataset or so)
// Later was this test replaced by more complex TestOldValue (superset of old test),
// but next to it was restored back also original test.
// So now we have two tests which test same thing, where this 'old' one is subset of 'new' one
// Ideal solution would be remove this 'old' test as it does not test anything what is not tested elsewhere ...
bufds := DBConnector.GetNDataset(0) as TDataset;
bufds.Open;
bufds.InsertRecord([0,'name']);
v := VarToStr(bufds.fields[1].OldValue);
end;
procedure TTestCursorDBBasics.TestFieldOldValue;
var OldValue: string;
Fmemo: TField;
begin
with DBConnector.GetFieldDataset as TCustomBufDataset do
begin;
Open;
First;
Next;
OldValue := Fields[0].AsString;
CheckEquals(OldValue, VarToStr(Fields[0].OldValue), 'Original value'); // unmodified original value
CheckTrue(UpdateStatus=usUnmodified, 'Unmodified');
Edit;
Fields[0].AsInteger := -1;
CheckEquals(OldValue, VarToStr(Fields[0].OldValue), 'Editing'); // dsEdit, there is no update-buffer yet
Post;
CheckEquals(OldValue, VarToStr(Fields[0].OldValue), 'Edited'); // there is already update-buffer
CheckTrue(UpdateStatus=usModified, 'Modified');
Append;
Fields[0].AsInteger := -2;
CheckTrue(VarIsNull(Fields[0].OldValue), 'Inserting'); // dsInsert, there is no update-buffer yet
Post;
CheckTrue(VarIsNull(Fields[0].OldValue), 'Inserted'); // there is already update-buffer
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;
procedure TTestCursorDBBasics.TestChangeBlobFieldBeforePost;
// Edit memo fields should read back new contents even before post
// Bug 15376
// See also TTestFieldTypes.TestChangeBlob
var
DS : TBufDataset;
begin
DS := TBufDataset.Create(nil);
DS.FieldDefs.Add('ID',ftInteger);
DS.FieldDefs.Add('NAME',ftString,50);
DS.FIeldDefs.Add('MEMO1',ftMemo);
DS.CreateDataset;
DS.Open;
with DS do
begin
Append;
FieldByName('ID').AsInteger:=1;
FieldByName('NAME').AsString:='NAME1';
FieldByName('MEMO1').AsString:='NAME1';
CheckEquals('NAME1',FieldByName('MEMO1').AsString,'Memo field must match before post');
Post;
end;
DS.Close;
end;
procedure TTestDBBasics.TestSetFieldValues;
var PassException : boolean;
begin
@ -1477,16 +1454,6 @@ begin
end;
end;
procedure TTestBufDatasetDBBasics.TestClosedIndexFieldNames;
var s : string;
bufds: TCustomBufDataset;
begin
bufds := DBConnector.GetNDataset(5) as TCustomBufDataset;
s := bufds.IndexFieldNames;
s := bufds.IndexName;
bufds.CompareBookmarks(nil,nil);
end;
procedure TTestBufDatasetDBBasics.TestSaveAsXML;
var ds : TDataset;
LoadDs: TCustomBufDataset;
@ -1742,30 +1709,6 @@ begin
end;
end;
procedure TTestBufDatasetDBBasics.TestEditedBlobBeforePost;
// Edit memo fields should read back new contents even before post
// Bug 15376
var
ds : TBufDataset;
begin
ds := TBufDataset.Create(nil);
DS.FieldDefs.Add('ID',ftInteger);
DS.FieldDefs.Add('NAME',ftString,50);
DS.FIeldDefs.Add('MEMO1',ftMemo);
DS.CreateDataset;
DS.Open;
with DS do
begin
Append;
FieldByName('ID').AsInteger:=1;
FieldByName('NAME').AsString:='NAME1';
FieldByName('MEMO1').AsString:='NAME1';
CheckEquals('NAME1',FieldByName('MEMO1').AsString,'Memo field must match before post');
Post;
end;
DS.Close;
end;
procedure TTestBufDatasetDBBasics.FTestXMLDatasetDefinition(ADataset: TDataset);
var i : integer;
begin
@ -2095,7 +2038,7 @@ begin
end;
end;
procedure TTestBufDatasetDBBasics.TestIndexFieldNamesAct;
procedure TTestBufDatasetDBBasics.TestIndexFieldNamesActive;
var ds : TCustomBufDataset;
AFieldType : TFieldType;
FList : TStringList;
@ -2393,70 +2336,18 @@ begin
end;
end;
procedure TTestBufDatasetDBBasics.TestIndexFieldNamesClosed;
var s : string;
bufds: TCustomBufDataset;
begin
bufds := DBConnector.GetNDataset(5) as TCustomBufDataset;
s := bufds.IndexFieldNames;
s := bufds.IndexName;
bufds.CompareBookmarks(nil,nil);
end;
{$endif fpc}
procedure TTestDBBasics.TestcalculatedField_OnCalcfields(DataSet: TDataSet);
begin
case dataset.fieldbyname('ID').asinteger of
1 : dataset.fieldbyname('CALCFLD').AsInteger := 5;
2 : dataset.fieldbyname('CALCFLD').AsInteger := 70000;
3 : dataset.fieldbyname('CALCFLD').Clear;
4 : dataset.fieldbyname('CALCFLD').AsInteger := 1234;
10 : dataset.fieldbyname('CALCFLD').Clear;
else
dataset.fieldbyname('CALCFLD').AsInteger := 1;
end;
CheckTrue(DataSet.State=dsCalcFields, 'State');
end;
procedure TTestDBBasics.TestCalculatedField;
var ds : TDataset;
AFld1, AFld2, AFld3 : Tfield;
begin
ds := 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);
AFld3.FieldName := 'CALCFLD';
AFld3.DataSet := ds;
Afld3.FieldKind := fkCalculated;
CheckEquals(3,FieldCount);
ds.OnCalcFields := TestcalculatedField_OnCalcfields;
open;
CheckEquals(1,FieldByName('ID').asinteger);
CheckEquals(5,FieldByName('CALCFLD').asinteger);
next;
CheckEquals(70000,FieldByName('CALCFLD').asinteger);
next;
CheckTrue(FieldByName('CALCFLD').IsNull, '#3 Null');
next;
CheckEquals(1234,FieldByName('CALCFLD').AsInteger);
if IsUniDirectional then
// The CanModify property is always False, so attempts to put the dataset into edit mode always fail
CheckException(Edit, EDatabaseError)
else
begin
Edit;
FieldByName('ID').AsInteger := 10;
Post;
CheckTrue(FieldByName('CALCFLD').IsNull, '#10 Null');
end;
close;
AFld1.Free;
AFld2.Free;
AFld3.Free;
end;
end;
procedure TTestCursorDBBasics.TestFirst;
var i : integer;
begin
@ -2785,6 +2676,120 @@ begin
ds.close;
end;
procedure TTestDBBasics.TestcalculatedField_OnCalcfields(DataSet: TDataSet);
begin
case dataset.fieldbyname('ID').asinteger of
1 : dataset.fieldbyname('CALCFLD').AsInteger := 5;
2 : dataset.fieldbyname('CALCFLD').AsInteger := 70000;
3 : dataset.fieldbyname('CALCFLD').Clear;
4 : dataset.fieldbyname('CALCFLD').AsInteger := 1234;
10 : dataset.fieldbyname('CALCFLD').Clear;
else
dataset.fieldbyname('CALCFLD').AsInteger := 1;
end;
CheckTrue(DataSet.State=dsCalcFields, 'State');
end;
procedure TTestDBBasics.TestCalculatedField;
var ds : TDataset;
AFld1, AFld2, AFld3 : Tfield;
begin
ds := 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);
AFld3.FieldName := 'CALCFLD';
AFld3.DataSet := ds;
Afld3.FieldKind := fkCalculated;
CheckEquals(3,FieldCount);
ds.OnCalcFields := TestcalculatedField_OnCalcfields;
open;
CheckEquals(1,FieldByName('ID').asinteger);
CheckEquals(5,FieldByName('CALCFLD').asinteger);
next;
CheckEquals(70000,FieldByName('CALCFLD').asinteger);
next;
CheckTrue(FieldByName('CALCFLD').IsNull, '#3 Null');
next;
CheckEquals(1234,FieldByName('CALCFLD').AsInteger);
if IsUniDirectional then
// The CanModify property is always False, so attempts to put the dataset into edit mode always fail
CheckException(Edit, EDatabaseError)
else
begin
Edit;
FieldByName('ID').AsInteger := 10;
Post;
CheckTrue(FieldByName('CALCFLD').IsNull, '#10 Null');
end;
close;
AFld1.Free;
AFld2.Free;
AFld3.Free;
end;
end;
procedure TTestDBBasics.TestCanModifySpecialFields;
var ds : TDataset;
lds : TDataset;
fld : TField;
begin
lds := DBConnector.GetNDataset(10);
ds := DBConnector.GetNDataset(5);
with ds do
begin
Fld := TIntegerField.Create(ds);
Fld.FieldName:='ID';
Fld.DataSet:=ds;
Fld := TStringField.Create(ds);
Fld.FieldName:='LookupFld';
Fld.FieldKind:=fkLookup;
Fld.DataSet:=ds;
Fld.LookupDataSet:=lds;
Fld.LookupResultField:='NAME';
Fld.LookupKeyFields:='ID';
Fld.KeyFields:='ID';
lds.Open;
Open;
if IsUniDirectional then
// The CanModify property is always False for UniDirectional datasets
CheckFalse(FieldByName('ID').CanModify)
else
CheckTrue(FieldByName('ID').CanModify);
CheckFalse(FieldByName('LookupFld').CanModify);
CheckFalse(FieldByName('ID').ReadOnly);
CheckFalse(FieldByName('LookupFld').ReadOnly);
CheckEquals(1,FieldByName('ID').AsInteger);
if IsUniDirectional then
// Lookup fields are not supported by UniDirectional datasets
CheckTrue(FieldByName('LookupFld').IsNull)
else
CheckEquals('TestName1',FieldByName('LookupFld').AsString);
Next;
Next;
CheckEquals(3,FieldByName('ID').AsInteger);
if IsUniDirectional then
CheckTrue(FieldByName('LookupFld').IsNull)
else
CheckEquals('TestName3',FieldByName('LookupFld').AsString);
Close;
lds.Close;
end;
end;
procedure TTestDBBasics.TestDoubleClose;
begin
with DBConnector.GetNDataset(1) do