public void Can_Remove_Instance_From_Container() { var containerManager = new ContainerManager(); containerManager.AddObjectToContainer("container", this, "obj"); var instance = containerManager.GetInstancesInContainer("container").First(); containerManager.RemoveInstance(instance.InstanceId); var results = containerManager.GetInstancesInContainer("container"); results.Length.Should().Be(0); }
public void Can_Get_Details_For_Instance() { var containerManager = new ContainerManager(); var testObject = new TestClass { NumberProperty = 123, StringProperty = "abc" }; containerManager.AddObjectToContainer("container", testObject, "obj"); var reference = containerManager.GetInstancesInContainer("container") .Single(x => x.Name == "obj"); var details = containerManager.GetInstanceDetails(reference.InstanceId); details.Should().NotBeNull(); details.InstanceId.Should().Be(reference.InstanceId); details.Name.Should().Be(reference.Name); details.Properties.Should().NotBeNull(); details.Properties.Length.Should().Be(2); var stringProperty = details.Properties.Single(x => x.Name == nameof(TestClass.StringProperty)); stringProperty.TypeName.Should().Be(typeof(string).FullName); stringProperty.ValueAsString.Should().Be(testObject.StringProperty); var numberProperty = details.Properties.Single(x => x.Name == nameof(TestClass.NumberProperty)); numberProperty.TypeName.Should().Be(typeof(int).FullName); numberProperty.ValueAsString.Should().Be(testObject.NumberProperty.ToString()); }
public void Can_Tell_If_Properties_Are_Read_Or_Write_Only() { var containerManager = new ContainerManager(); var testObject = new ReadWriteOnlyTestClass { WriteOnlyProperty = 33 }; containerManager.AddObjectToContainer("container", testObject, "obj"); var reference = containerManager.GetInstancesInContainer("container") .Single(x => x.Name == "obj"); var details = containerManager.GetInstanceDetails(reference.InstanceId); details.Properties.Length.Should().Be(2); var readProperty = details.Properties.Single(x => x.Name == nameof(ReadWriteOnlyTestClass.ReadOnlyProperty)); readProperty.IsReadable.Should().BeTrue(); readProperty.IsWritable.Should().BeFalse(); readProperty.ValueAsString.Should().Be("33"); var writeProperty = details.Properties.Single(x => x.Name == nameof(ReadWriteOnlyTestClass.WriteOnlyProperty)); writeProperty.IsReadable.Should().BeFalse(); writeProperty.IsWritable.Should().BeTrue(); writeProperty.ValueAsString.Should().BeNull(); }
public void No_Instances_In_Empty_Container() { var containerManager = new ContainerManager(); var results = containerManager.GetInstancesInContainer("container"); results.Should().NotBeNull(); results.Length.Should().Be(0); }
public void Same_Object_In_Different_Containers_Has_Different_Instance_Id() { var containerManager = new ContainerManager(); var testObj1 = new TestClass(); containerManager.AddObjectToContainer("container1", testObj1, "obj"); containerManager.AddObjectToContainer("container2", testObj1, "obj"); var instance1 = containerManager.GetInstancesInContainer("container1") .Select(x => x.InstanceId) .FirstOrDefault(); var instance2 = containerManager.GetInstancesInContainer("container2") .Select(x => x.InstanceId) .FirstOrDefault(); instance1.Should().NotBeEmpty(); instance2.Should().NotBeEmpty(); instance1.Should().NotBe(instance2); }
public void Can_Set_Int_Value() { var containerManager = new ContainerManager(); var testObject = new TestClass(); containerManager.AddObjectToContainer("container", testObject, "obj"); var reference = containerManager.GetInstancesInContainer("container") .Single(x => x.Name == "obj"); containerManager.SetPropertyValue(reference.InstanceId, nameof(TestClass.IntProperty), "151"); testObject.IntProperty.Should().Be(151); }
public void Indexer_Properties_Are_Ignored() { var containerManager = new ContainerManager(); var testObject = new IndexerClass(); containerManager.AddObjectToContainer("container", testObject, "obj"); var reference = containerManager.GetInstancesInContainer("container") .Single(x => x.Name == "obj"); var details = containerManager.GetInstanceDetails(reference.InstanceId); details.Properties.Length.Should().Be(0); }
public void Can_Set_Reference_Type_To_Null() { var containerManager = new ContainerManager(); var testObject = new TestClass { UnknownClassProperty = new Unparseable() }; containerManager.AddObjectToContainer("container", testObject, "obj"); var reference = containerManager.GetInstancesInContainer("container") .Single(x => x.Name == "obj"); containerManager.SetPropertyValue(reference.InstanceId, nameof(TestClass.UnknownClassProperty), null); testObject.UnknownClassProperty.Should().BeNull(); }
public void Can_Add_Object_To_Container() { var containerManager = new ContainerManager(); var instanceId = containerManager.AddObjectToContainer("container", this, "obj"); var results = containerManager.GetInstancesInContainer("container"); results.Should().NotBeNull(); results.Length.Should().Be(1); results[0].InstanceId.Should().Be(instanceId); results[0].Should().NotBeNull(); results[0].Name.Should().Be("obj"); results[0].TypeName.Should().Be(this.GetType().FullName); results[0].InstanceId.Should().NotBe(Guid.Empty); }
public void Fields_Are_Included_In_Instance_Details() { var containerManager = new ContainerManager(); var testObject = new ClassWithField { IntField = 1 }; containerManager.AddObjectToContainer("container", testObject, "obj"); var reference = containerManager.GetInstancesInContainer("container") .Single(x => x.Name == "obj"); var details = containerManager.GetInstanceDetails(reference.InstanceId); details.Should().NotBeNull(); details.Properties.Length.Should().Be(1); details.Properties[0].Name.Should().Be(nameof(ClassWithField.IntField)); details.Properties[0].ValueAsString.Should().Be("1"); }
public void Exception_Thrown_When_Target_Type_Has_No_Known_Conversion_Method() { var containerManager = new ContainerManager(); var testObject = new TestClass(); containerManager.AddObjectToContainer("container", testObject, "obj"); var reference = containerManager.GetInstancesInContainer("container") .Single(x => x.Name == "obj"); try { containerManager.SetPropertyValue(reference.InstanceId, nameof(TestClass.UnknownClassProperty), "abc"); Assert.True(false, "Exception not thrown but expected"); } catch (NoKnownWayToParseToTypeException ex) { ex.DestinationType.Should().Be(typeof(Unparseable)); } }
public void Exception_When_Attempting_To_Set_Property_That_Doesnt_Exist() { var containerManager = new ContainerManager(); var testObject = new TestClass(); containerManager.AddObjectToContainer("container", testObject, "obj"); var reference = containerManager.GetInstancesInContainer("container") .Single(x => x.Name == "obj"); try { containerManager.SetPropertyValue(reference.InstanceId, "SomeInvalidProperty", "Test"); Assert.True(false, "No exception thrown"); } catch (PropertyDoesntExistException ex) { ex.InstanceType.Should().Be(typeof(TestClass)); ex.PropertyName.Should().Be("SomeInvalidProperty"); } }
public void Exception_Thrown_When_Value_Cant_Be_Converted() { var containerManager = new ContainerManager(); var testObject = new TestClass(); containerManager.AddObjectToContainer("container", testObject, "obj"); var reference = containerManager.GetInstancesInContainer("container") .Single(x => x.Name == "obj"); try { containerManager.SetPropertyValue(reference.InstanceId, nameof(TestClass.IntProperty), "abc"); Assert.True(false, "Exception not thrown but expected"); } catch (InvalidPropertyValueConversionException ex) { ex.InstanceType.Should().Be(typeof(TestClass)); ex.PropertyName.Should().Be(nameof(TestClass.IntProperty)); ex.PropertyType.Should().Be(typeof(int)); ex.AttemptedValue.Should().Be("abc"); } }
public InstanceReference[] GetInstancesInContainer(string containerName) { return(_containerManager.GetInstancesInContainer(containerName)); }