public void ValueTypesCannotBeCarrierObjects() { int carrier = 13; var propertyDefinition = new PropertyConnector <object, int>(); propertyDefinition.GetProperty(carrier); }
public void ValueTypesCannotBeCarrierObjects_Try() { int carrier = 13; var propertyDefinition = new PropertyConnector <object, int>(); Assert.IsNull(propertyDefinition.TryGetProperty(carrier)); }
public void ConnectedPropertiesAreInitiallyDisconnected() { object carrier = new object(); var propertyDefinition = new PropertyConnector <object, int>(); Assert.IsFalse(propertyDefinition.GetProperty(carrier).TryDisconnect()); }
public void ObjectCanBeCarrierObjects_Try() { object carrier = new object(); var propertyDefinition = new PropertyConnector <object, int>(); Assert.IsNotNull(propertyDefinition.TryGetProperty(carrier)); }
public void StringsCannotBeCarrierObjects_Try() { string carrier = "Hi"; var propertyDefinition = new PropertyConnector <string, int>(); Assert.IsNull(propertyDefinition.TryGetProperty(carrier)); }
public void MyClassCanBeCarrierObjectsForConnectorOfInterfaceType() { MyClass carrier = new MyClass(); var propertyDefinition = new PropertyConnector <IMyInterface, int>(); Assert.IsNotNull(propertyDefinition.TryGetProperty(carrier)); }
public void MyStructCannotBeCarrierObjectsForConnectorOfInterfaceType() { MyStruct carrier = new MyStruct(); var propertyDefinition = new PropertyConnector <IMyInterface, int>(); Assert.IsNull(propertyDefinition.TryGetProperty(carrier)); }
public void GetWillThrowIfDisconnected() { object carrier = new object(); var propertyDefinition = new PropertyConnector <object, int>(); propertyDefinition.GetProperty(carrier).Get(); }
public void StringsCannotBeCarrierObjects() { string carrier = "Hi"; var propertyDefinition = new PropertyConnector <string, int>(); propertyDefinition.GetProperty(carrier); }
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()); }
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)); }
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()); }
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)); }
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)); }
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()); }
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()); }
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()); }
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()); }
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")); }
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()); }
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()); }
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)); }
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()); }
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()); }
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()); }
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); }