コード例 #1
0
 /// <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);
     }
 }
コード例 #2
0
        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());
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }