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");
            }
        }
Exemple #14
0
 public InstanceReference[] GetInstancesInContainer(string containerName)
 {
     return(_containerManager.GetInstancesInContainer(containerName));
 }