Пример #1
0
        public void ValueTypesCannotBeCarrierObjects()
        {
            int carrier            = 13;
            var propertyDefinition = new PropertyConnector <object, int>();

            propertyDefinition.GetProperty(carrier);
        }
Пример #2
0
        public void ValueTypesCannotBeCarrierObjects_Try()
        {
            int carrier            = 13;
            var propertyDefinition = new PropertyConnector <object, int>();

            Assert.IsNull(propertyDefinition.TryGetProperty(carrier));
        }
Пример #3
0
        public void ConnectedPropertiesAreInitiallyDisconnected()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, int>();

            Assert.IsFalse(propertyDefinition.GetProperty(carrier).TryDisconnect());
        }
Пример #4
0
        public void ObjectCanBeCarrierObjects_Try()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, int>();

            Assert.IsNotNull(propertyDefinition.TryGetProperty(carrier));
        }
Пример #5
0
        public void StringsCannotBeCarrierObjects_Try()
        {
            string carrier            = "Hi";
            var    propertyDefinition = new PropertyConnector <string, int>();

            Assert.IsNull(propertyDefinition.TryGetProperty(carrier));
        }
Пример #6
0
        public void MyClassCanBeCarrierObjectsForConnectorOfInterfaceType()
        {
            MyClass carrier            = new MyClass();
            var     propertyDefinition = new PropertyConnector <IMyInterface, int>();

            Assert.IsNotNull(propertyDefinition.TryGetProperty(carrier));
        }
Пример #7
0
        public void MyStructCannotBeCarrierObjectsForConnectorOfInterfaceType()
        {
            MyStruct carrier            = new MyStruct();
            var      propertyDefinition = new PropertyConnector <IMyInterface, int>();

            Assert.IsNull(propertyDefinition.TryGetProperty(carrier));
        }
Пример #8
0
        public void GetWillThrowIfDisconnected()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, int>();

            propertyDefinition.GetProperty(carrier).Get();
        }
Пример #9
0
        public void StringsCannotBeCarrierObjects()
        {
            string carrier            = "Hi";
            var    propertyDefinition = new PropertyConnector <string, int>();

            propertyDefinition.GetProperty(carrier);
        }
Пример #10
0
        public void ConnectedReferencePropertyMayBeRead()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, string>();

            propertyDefinition.GetProperty(carrier).Set("A");
            Assert.AreEqual("A", propertyDefinition.GetProperty(carrier).Get());
        }
Пример #11
0
        public void ValueTypesWithoutValidationCanBeCarrierObjects_Try()
        {
            // Please note: this is an extremely dangerous example! Do not use in real-world code!
            int carrier            = 13;
            var propertyDefinition = new PropertyConnector <object, int>();

            Assert.IsNotNull(propertyDefinition.TryGetProperty(carrier, true));
        }
Пример #12
0
        public void ConnectedPropertyMayBeRead()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, int>();

            propertyDefinition.GetProperty(carrier).Set(13);
            Assert.AreEqual(13, propertyDefinition.GetProperty(carrier).Get());
        }
Пример #13
0
        public void StringsWithoutValidationCanBeCarrierObjects_Try()
        {
            // Please note: this is a highly dangerous example! Do not use in real-world code unless you know for-sure what you're doing!
            string carrier            = "Hi";
            var    propertyDefinition = new PropertyConnector <string, int>();

            Assert.IsNotNull(propertyDefinition.TryGetProperty(carrier, true));
        }
Пример #14
0
        public void MyStructWithoutValidationCanBeCarrierObjectForConnectorOfInterfaceType()
        {
            // Please note: this is an extremely dangerous example! Do not use in real-world code!
            MyStruct carrier            = new MyStruct();
            var      propertyDefinition = new PropertyConnector <IMyInterface, int>();

            Assert.IsNotNull(propertyDefinition.TryGetProperty(carrier, true));
        }
Пример #15
0
        public void GetOrConnectConnectsIfNecessary()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, int>();

            Assert.AreEqual(13, propertyDefinition.GetProperty(carrier).GetOrConnect(13));
            Assert.IsFalse(propertyDefinition.GetProperty(carrier).TryConnect(17));
            Assert.AreEqual(13, propertyDefinition.GetProperty(carrier).Get());
        }
Пример #16
0
        public void SetOverwritesIfConnected()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, int>();

            propertyDefinition.GetProperty(carrier).Set(17);
            propertyDefinition.GetProperty(carrier).Set(13);
            Assert.AreEqual(13, propertyDefinition.GetProperty(carrier).Get());
        }
Пример #17
0
        public void ConnectedReferencePropertiesAfterDisconnectAreDisconnected()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, string>();

            propertyDefinition.GetProperty(carrier).Set("A");
            propertyDefinition.GetProperty(carrier).Disconnect();
            Assert.IsFalse(propertyDefinition.GetProperty(carrier).TryDisconnect());
        }
Пример #18
0
        public void GetOrConnectConnectsReferenceIfNecessary()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, string>();

            Assert.AreEqual("A", propertyDefinition.GetProperty(carrier).GetOrConnect("A"));
            Assert.IsFalse(propertyDefinition.GetProperty(carrier).TryConnect("B"));
            Assert.AreEqual("A", propertyDefinition.GetProperty(carrier).Get());
        }
Пример #19
0
        public void GetOrConnectDoesNotOverwriteReferenceIfConnected()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, string>();

            propertyDefinition.GetProperty(carrier).Set("B");
            Assert.AreEqual("B", propertyDefinition.GetProperty(carrier).GetOrConnect("A"));
            Assert.IsFalse(propertyDefinition.GetProperty(carrier).TryConnect("C"));
        }
Пример #20
0
        public void SetOverwritesReferenceIfConnected()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, string>();

            propertyDefinition.GetProperty(carrier).Set("B");
            propertyDefinition.GetProperty(carrier).Set("A");
            Assert.AreEqual("A", propertyDefinition.GetProperty(carrier).Get());
        }
Пример #21
0
        public void ConnectedPropertiesAfterSetAreConnected()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, int>();

            propertyDefinition.GetProperty(carrier).Set(13);
            Assert.IsFalse(propertyDefinition.GetProperty(carrier).TryConnect(17));
            Assert.AreEqual(13, propertyDefinition.GetProperty(carrier).Get());
        }
Пример #22
0
        public void GetOrConnectDoesNotOverwriteIfConnected()
        {
            object carrier            = new object();
            var    propertyDefinition = new PropertyConnector <object, int>();

            propertyDefinition.GetProperty(carrier).Set(17);
            Assert.AreEqual(17, propertyDefinition.GetProperty(carrier).GetOrConnect(13));
            Assert.IsFalse(propertyDefinition.GetProperty(carrier).TryConnect(19));
        }
Пример #23
0
        public void Properties_WithSameTagsButDifferentConnectors_HaveIndependentValues()
        {
            var carrier = new object();
            var other   = new PropertyConnector();

            PropertyConnector.Default.Get <tag1>(carrier).Set(17);
            other.Get <tag1>(carrier).Set(13);
            Assert.AreEqual(17, PropertyConnector.Default.Get <tag1>(carrier).Get());
            Assert.AreEqual(13, other.Get <tag1>(carrier).Get());
        }
Пример #24
0
        public void DifferentConnectedReferencePropertiesAreIndependent()
        {
            object carrier             = new object();
            var    propertyDefinition1 = new PropertyConnector <object, string>();
            var    propertyDefinition2 = new PropertyConnector <object, string>();

            propertyDefinition1.GetProperty(carrier).Set("A");
            propertyDefinition2.GetProperty(carrier).Set("B");
            Assert.AreEqual("A", propertyDefinition1.GetProperty(carrier).Get());
            Assert.AreEqual("B", propertyDefinition2.GetProperty(carrier).Get());
        }
Пример #25
0
        public void Properties_WithSameNameButDifferentConnectors_HaveIndependentValues()
        {
            var carrier = new object();
            var name    = Guid.NewGuid().ToString("N");
            var other   = new PropertyConnector();

            PropertyConnector.Default.Get(carrier, name).Set(17);
            other.Get(carrier, name).Set(13);
            Assert.AreEqual(17, PropertyConnector.Default.Get(carrier, name).Get());
            Assert.AreEqual(13, other.Get(carrier, name).Get());
        }
Пример #26
0
        public void DifferentConnectedPropertiesAreIndependent()
        {
            object carrier             = new object();
            var    propertyDefinition1 = new PropertyConnector <object, int>();
            var    propertyDefinition2 = new PropertyConnector <object, int>();

            propertyDefinition1.GetProperty(carrier).Set(17);
            propertyDefinition2.GetProperty(carrier).Set(13);
            Assert.AreEqual(17, propertyDefinition1.GetProperty(carrier).Get());
            Assert.AreEqual(13, propertyDefinition2.GetProperty(carrier).Get());
        }
 public static string PreconditionViolationExceptionType()
 {
     try
     {
         var propertyDefinition = new PropertyConnector <object, dynamic>();
         propertyDefinition.GetProperty(null);
         return(string.Empty);
     }
     catch (Exception ex)
     {
         return(ex.GetType().ToString());
     }
 }
        public void Property_WhenConnectorIsCollected_IsCollected()
        {
            var name      = Guid.NewGuid().ToString("N");
            var connector = new PropertyConnector();
            var carrier   = new object();
            var value     = new object();
            var valueRef  = new WeakReference(value);

            connector.Get(carrier, name).Set(value);
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            Assert.IsFalse(valueRef.IsAlive);
            GC.KeepAlive(carrier);
        }
        public void Properties_CrossReferencingCarriersAcrossConnectors_WhenCarriersAreCollected_AreCollected()
        {
            var        name        = Guid.NewGuid().ToString("N");
            var        other       = new PropertyConnector();
            var        carrier1    = new object();
            var        carrierRef1 = new WeakReference(carrier1);
            var        carrier2    = new object();
            var        carrierRef2 = new WeakReference(carrier1);
            Func <int> value1      = carrier2.GetHashCode;
            var        valueRef1   = new WeakReference(value1);
            Func <int> value2      = carrier1.GetHashCode;
            var        valueRef2   = new WeakReference(value2);

            PropertyConnector.Default.Get(carrier1, name).Set(value1);
            other.Get(carrier2, name).Set(value2);
            GC.Collect();
            Assert.IsFalse(carrierRef1.IsAlive);
            Assert.IsFalse(valueRef1.IsAlive);
            Assert.IsFalse(carrierRef2.IsAlive);
            Assert.IsFalse(valueRef2.IsAlive);
        }
        public void Property_ReferencingConnector_ActsAsStrongReference()
        {
            var        name         = Guid.NewGuid().ToString("N");
            var        connector    = new PropertyConnector();
            var        connectorRef = new WeakReference(connector);
            var        carrier      = new object();
            Func <int> value        = connector.GetHashCode;
            var        valueRef     = new WeakReference(value);

            connector.Get(carrier, name).Set(value);
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            Assert.IsTrue(valueRef.IsAlive);
            Assert.IsTrue(connectorRef.IsAlive);
            GC.KeepAlive(carrier);

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            Assert.IsFalse(valueRef.IsAlive);
            Assert.IsFalse(connectorRef.IsAlive);
        }