From: <sr...@us...> - 2006-05-02 23:44:02
|
Revision: 673 Author: srmitch Date: 2006-05-02 16:43:48 -0700 (Tue, 02 May 2006) ViewCVS: http://svn.sourceforge.net/instantobjects?rev=673&view=rev Log Message: ----------- Fix for bug #1479652 in SF BT "Problem with PrimeCross demo and InstantReference.Reset". Unit tests were also updated. Bug Symptom(s): An InstantPart or InstantReference attribute Reset does not cause the change to the object to be stored. Bug Cause: InstantPart and InstantReference attributes do not signal a change after a Reset. Fix affects: <<InstantPersistence.pas>> procedure TInstantPart.Reset; procedure TInstantReference.Reset; <<TestInstantPart.pas>> <<TestInstantReference.pas>> Modified Paths: -------------- trunk/Source/Core/InstantPersistence.pas trunk/Source/Tests/TestInstantPart.pas trunk/Source/Tests/TestInstantReference.pas Modified: trunk/Source/Core/InstantPersistence.pas =================================================================== --- trunk/Source/Core/InstantPersistence.pas 2006-05-02 19:09:06 UTC (rev 672) +++ trunk/Source/Core/InstantPersistence.pas 2006-05-02 23:43:48 UTC (rev 673) @@ -6229,7 +6229,11 @@ procedure TInstantPart.Reset; begin - DestroyObject; + if not IsDefault then + begin + DestroyObject; + Changed; + end; end; procedure TInstantPart.SetOwnerContext(AObject: TInstantObject); @@ -6470,7 +6474,11 @@ procedure TInstantReference.Reset; begin - DestroyObjectReference; + if not IsDefault then + begin + DestroyObjectReference; + Changed; + end; end; function TInstantReference.RetrieveObject: TInstantObject; Modified: trunk/Source/Tests/TestInstantPart.pas =================================================================== --- trunk/Source/Tests/TestInstantPart.pas 2006-05-02 19:09:06 UTC (rev 672) +++ trunk/Source/Tests/TestInstantPart.pas 2006-05-02 23:43:48 UTC (rev 673) @@ -174,12 +174,16 @@ var vPart: TAddress; begin - AssertFalse(FInstantPart.IsChanged); + AssertFalse('Initial IsChanged', FInstantPart.IsChanged); vPart := TAddress.Create(FConn); + FInstantPart.Value := vPart; + AssertTrue('IsChanged False after Value assignment', FInstantPart.IsChanged); + + FInstantPart.Unchanged; + AssertFalse(FInstantPart.IsChanged); vPart.Changed; - FInstantPart.Value := vPart; - AssertTrue(FInstantPart.IsChanged); + AssertTrue('IsChanged False after part changed', FInstantPart.IsChanged); end; procedure TestTInstantEmbPart.TestIsDefault; @@ -245,6 +249,11 @@ vFirstObj: TInstantObject; vSecondObj: TInstantObject; begin + AssertTrue(FInstantPart.IsDefault); + AssertFalse(FInstantPart.IsChanged); + FInstantPart.Reset; + AssertFalse('IsChanged True after initial Reset', FInstantPart.IsChanged); + AssertFalse('HasValue 1', FInstantPart.HasValue); AssertNotNull('AssertNotNull', FInstantPart.Value); AssertTrue('HasValue 2', FInstantPart.HasValue); @@ -255,9 +264,15 @@ FInstantPart.Value := vSecondObj; AssertEquals('Value.Id', 'PartId', FInstantPart.Value.Id); AssertNotSame('AssertNotSame', vFirstObj, FInstantPart.Value); + AssertTrue('IsChanged False after second Value assignment', + FInstantPart.IsChanged); + FInstantPart.Unchanged; + AssertFalse(FInstantPart.IsChanged); + FInstantPart.Reset; AssertFalse('HasValue 3', FInstantPart.HasValue); + AssertTrue('IsChanged False after Reset', FInstantPart.IsChanged); end; procedure TestTInstantExtPart.SetUp; Modified: trunk/Source/Tests/TestInstantReference.pas =================================================================== --- trunk/Source/Tests/TestInstantReference.pas 2006-05-02 19:09:06 UTC (rev 672) +++ trunk/Source/Tests/TestInstantReference.pas 2006-05-02 23:43:48 UTC (rev 673) @@ -50,6 +50,7 @@ procedure TestAttach_DetachObject; procedure TestDestroyObject_HasReference_HasValue; procedure TestHasValue; + procedure TestIsChanged; procedure TestLoadObjectFromStream; procedure TestObjectClass_ObjectClassName_ObjectId; procedure TestReferenceObject_Class; @@ -73,6 +74,7 @@ FOwner := TContact.Create(FConn); FInstantReference := FOwner._Category; + FInstantReference.UnChanged; end; procedure TestTInstantReference.TearDown; @@ -171,6 +173,28 @@ AssertFalse(FInstantReference.HasValue); end; +procedure TestTInstantReference.TestIsChanged; +var + vObject: TCategory; +begin + AssertFalse('Initial IsChanged', FInstantReference.IsChanged); + + vObject := TCategory.Create(FConn); + try + AssertNotNull('Create object is nil', vObject); + FInstantReference.Value := vObject; + AssertTrue('IsChanged False after Value assignment', FInstantReference.IsChanged); + + FInstantReference.Unchanged; + AssertFalse(FInstantReference.IsChanged); + vObject.Changed; + AssertFalse('IsChanged True after referenced object changed', + FInstantReference.IsChanged); + finally + vObject.Free; + end; +end; + procedure TestTInstantReference.TestLoadObjectFromStream; var vObject: TCategory; @@ -270,6 +294,12 @@ begin AssertTrue('Initial HasRef', FInstantReference.HasReference); AssertFalse('Initial HasVal', FInstantReference.HasValue); + AssertFalse('Initial IsChanged', FInstantReference.IsChanged); + AssertFalse('Initial IsDefault', FInstantReference.IsDefault); + FInstantReference.Reset; + AssertTrue('IsDefault after Reset', FInstantReference.IsDefault); + AssertTrue('IsChanged True after initial Reset', + FInstantReference.IsChanged); vObj := TCategory.Create(FConn); try @@ -277,10 +307,13 @@ AssertTrue(FInstantReference.HasReference); AssertTrue(FInstantReference.HasValue); AssertSame(vObj, FInstantReference.Value); + AssertTrue('IsChanged 2 is False!', FInstantReference.IsChanged); + FInstantReference.UnChanged; FInstantReference.Reset; AssertFalse('Final HasRef', FInstantReference.HasReference); AssertFalse('Final HasVal', FInstantReference.HasValue); + AssertTrue('Final IsChanged', FInstantReference.IsChanged); finally vObj.Free; end; |