/// <summary> /// Adds the asynchronous. /// </summary> /// <param name="value">The value.</param> /// <returns></returns> private async Task AddAsync(Action <T> value) { using (await _sync.AcquireAsync()) { var w = new EquatableWeakReference(value); _subscribers.Add(w); } }
public void GetHashCode_EquatableWeakReference_Equals_Target_HashCode() { // Arrange var target = new RevokeNotifierTestClass(); var wr = new EquatableWeakReference <RevokeNotifierTestClass>(target); // Act var result = wr.GetHashCode(); // Assert Assert.AreEqual(result, target.GetHashCode()); }
public void Equals_EquatableWeakReference_Are_Reference_Equal() { // Arrange var target = new RevokeNotifierTestClass(); var wr1 = new EquatableWeakReference <RevokeNotifierTestClass>(target); var wr2 = new EquatableWeakReference <RevokeNotifierTestClass>(target); // Act var result = wr1.Equals(wr2); // Assert Assert.True(result); }
public void Equals_EquatableWeakReference_Is_Not_Equal_Null() { // Arrange var wr = CreateEquatableWeakReference(true); EquatableWeakReference <RevokeNotifierTestClass> other = null; // Act var result = wr.Equals(other); // Assert Assert.IsNull(wr.Target); Assert.False(result); }
public void Test_Object_Is_Not_Collected() { //Arrange var target = new RevokeNotifierTestClass(); _anchor.Add(target); var wr = new EquatableWeakReference <RevokeNotifierTestClass>(target); //Act RevokeNotifierTestClass.CallGC(); //Assert Assert.NotNull(wr.Target); }
/// <summary> /// Indicates whether the current object is equal to another object of the same type. /// </summary> /// <param name="other">An object to compare with this object.</param> /// <returns> /// true if the current object is equal to the <paramref name="other">other</paramref> parameter; otherwise, false. /// </returns> public bool Equals(EquatableWeakReference other) { Action <T> target = this.Target; if (target == null) { return(false); } if (other.TryGetTarget(out var otherTarget)) { return(target.Equals(otherTarget)); } return(false); }
private EquatableWeakReference <RevokeNotifierTestClass> CreateEquatableWeakReference(bool collectObject = false) { EquatableWeakReference <RevokeNotifierTestClass> res = null; Action notRootByDebuger = () => { res = new EquatableWeakReference <RevokeNotifierTestClass>(new RevokeNotifierTestClass()); }; notRootByDebuger(); if (collectObject) { RevokeNotifierTestClass.CallGC(); } return(res); }
public void Equals_EquatableWeakReference_Are_Not_Equal_Even_If_HashCode_is_And_Target_collected() { // Arrange var wr = CreateEquatableWeakReference(true); var target = new RevokeNotifierTestClass(); var wr2 = new EquatableWeakReference <RevokeNotifierTestClass>(target); // Act var result1 = wr2.Equals(wr); // Assert Assert.Null(wr.Target); Assert.AreEqual(wr.GetHashCode(), wr2.GetHashCode()); Assert.AreNotEqual(wr, wr2); }