コード例 #1
0
        public void GetStandardValues_IContainerNoValuesAllowed_ReturnsEmpty()
        {
            var component1 = new Component();
            var component2 = new TestComponent();
            var component3 = new TestComponent();

            var container = new Container();

            container.Add(component1);
            container.Add(component2);
            container.Add(component3);

            var converter = new SubReferenceConverter(typeof(TestComponent));
            var context   = new MockTypeDescriptorContext {
                Container = container
            };

            TypeConverter.StandardValuesCollection values1 = converter.GetStandardValues(context);
            Assert.Equal(new object[] { null }, values1.Cast <object>());
            Assert.Equal(new object[] { component2, component3 }, converter.DisallowedValues);

            // Call again to test caching behavior.
            TypeConverter.StandardValuesCollection values2 = converter.GetStandardValues(context);
            Assert.NotSame(values1, values2);
        }
コード例 #2
0
        public void GetStandardValues_IReferenceServiceNoValuesAllowed_ReturnsEmpty()
        {
            var converter = new SubReferenceConverter(typeof(TestComponent));

            var component1 = new Component();
            var component2 = new TestComponent();
            var component3 = new TestComponent();

            var referenceService = new MockReferenceService();

            referenceService.AddReference("reference name 1", component1);
            referenceService.AddReference("reference name 2", component2);
            referenceService.AddReference("reference name 3", component3);

            int callCount = 0;
            var context   = new MockTypeDescriptorContext
            {
                GetServiceAction = (serviceType) =>
                {
                    callCount++;
                    Assert.Equal(typeof(IReferenceService), serviceType);
                    return(referenceService);
                }
            };

            TypeConverter.StandardValuesCollection values1 = converter.GetStandardValues(context);
            Assert.Equal(1, callCount);
            Assert.Equal(new object[] { null }, values1.Cast <object>());
            Assert.Equal(new object[] { component2, component3 }, converter.DisallowedValues);

            // Call again to test caching behavior.
            TypeConverter.StandardValuesCollection values2 = converter.GetStandardValues(context);
            Assert.Equal(2, callCount);
            Assert.NotSame(values1, values2);
        }
コード例 #3
0
        public void GetStandardValues_NoReferenceCollectionOrIContainer_ReturnsEmpty()
        {
            var converter = new ReferenceConverter(typeof(TestComponent));
            var context   = new MockTypeDescriptorContext();

            TypeConverter.StandardValuesCollection values1 = converter.GetStandardValues(context);
            Assert.Equal(new object[] { null }, values1.Cast <object>());

            // Call again to test caching behavior.
            TypeConverter.StandardValuesCollection values2 = converter.GetStandardValues(context);
            Assert.NotSame(values1, values2);
        }
コード例 #4
0
        public void GetStandardValues_IReferenceServiceInvalid_ReturnsExpected(object referenceService)
        {
            var converter = new ReferenceConverter(typeof(TestComponent));
            int callCount = 0;
            var context   = new MockTypeDescriptorContext
            {
                GetServiceAction = (serviceType) =>
                {
                    callCount++;
                    Assert.Equal(typeof(IReferenceService), serviceType);
                    return(referenceService);
                }
            };

            TypeConverter.StandardValuesCollection values1 = converter.GetStandardValues(context);
            Assert.Equal(1, callCount);
            Assert.Equal(new object[] { null }, values1.Cast <object>());

            // Call again to test caching behavior.
            TypeConverter.StandardValuesCollection values2 = converter.GetStandardValues(context);
            Assert.Equal(2, callCount);
            Assert.NotSame(values1, values2);
        }
コード例 #5
0
        public void GetStandardValues_IContainerNullType_ReturnsExpected()
        {
            var component1 = new TestComponent();
            var component2 = new TestComponent();
            var component3 = new Component();

            var container = new Container();

            container.Add(component1);
            container.Add(component2);
            container.Add(component3);

            var converter = new ReferenceConverter(null);
            var context   = new MockTypeDescriptorContext {
                Container = container
            };

            TypeConverter.StandardValuesCollection values1 = converter.GetStandardValues(context);
            Assert.Equal(new object[] { null }, values1.Cast <object>());

            // Call again to test caching behavior.
            TypeConverter.StandardValuesCollection values2 = converter.GetStandardValues(context);
            Assert.NotSame(values1, values2);
        }
コード例 #6
0
        public override IEnumerable <ConvertTest> ConvertFromTestData()
        {
            // This does actually succeed despite CanConvertFrom returning false.
            ConvertTest noContext = ConvertTest.Valid("reference name", null).WithContext(null);

            noContext.CanConvert = false;
            yield return(noContext);

            // No IReferenceService or IContainer.
            yield return(ConvertTest.Valid(string.Empty, null));

            yield return(ConvertTest.Valid("   ", null));

            yield return(ConvertTest.Valid("(none)", null).WithInvariantRemoteInvokeCulture());

            yield return(ConvertTest.Valid("nothing", null));

            // IReferenceService.
            var nullReferenceServiceContext = new MockTypeDescriptorContext
            {
                GetServiceAction = (serviceType) =>
                {
                    Assert.Equal(typeof(IReferenceService), serviceType);
                    return(null);
                }
            };

            yield return(ConvertTest.Valid("reference name", null).WithContext(nullReferenceServiceContext));

            var invalidReferenceServiceContext = new MockTypeDescriptorContext
            {
                GetServiceAction = (serviceType) =>
                {
                    Assert.Equal(typeof(IReferenceService), serviceType);
                    return(new object());
                }
            };

            yield return(ConvertTest.Valid("reference name", null).WithContext(invalidReferenceServiceContext));

            var component1       = new TestComponent();
            var component2       = new TestComponent();
            var nonComponent     = new object();
            var referenceService = new MockReferenceService();

            referenceService.AddReference("reference name", component1);
            referenceService.AddReference(string.Empty, component2);
            referenceService.AddReference("non component", nonComponent);
            var validReferenceServiceContext = new MockTypeDescriptorContext
            {
                GetServiceAction = (serviceType) =>
                {
                    Assert.Equal(typeof(IReferenceService), serviceType);
                    return(referenceService);
                }
            };

            yield return(ConvertTest.Valid("reference name", component1).WithContext(validReferenceServiceContext));

            yield return(ConvertTest.Valid("  reference name  ", component1).WithContext(validReferenceServiceContext));

            yield return(ConvertTest.Valid(string.Empty, component2).WithContext(validReferenceServiceContext));

            yield return(ConvertTest.Valid("non component", nonComponent).WithContext(validReferenceServiceContext));

            yield return(ConvertTest.Valid("no such reference", null).WithContext(validReferenceServiceContext));

            // IContainer.
            var containerComponent1 = new TestComponent();
            var containerComponent2 = new TestComponent();
            var container           = new Container();

            container.Add(containerComponent1, "reference name");
            container.Add(containerComponent2, string.Empty);
            var contextWithContainer = new MockTypeDescriptorContext {
                Container = container
            };

            yield return(ConvertTest.Valid("reference name", containerComponent1).WithContext(contextWithContainer));

            yield return(ConvertTest.Valid(string.Empty, containerComponent2).WithContext(contextWithContainer));

            yield return(ConvertTest.Valid("no such reference", null).WithContext(contextWithContainer));

            yield return(ConvertTest.CantConvertFrom(1));

            yield return(ConvertTest.CantConvertFrom(new object()));
        }
コード例 #7
0
        public override IEnumerable <ConvertTest> ConvertToTestData()
        {
            var component1   = new TestComponent();
            var component2   = new TestComponent();
            var component3   = new TestComponent();
            var nonComponent = new object();

            // No Context.
            yield return(ConvertTest.Valid(null, "(none)").WithInvariantRemoteInvokeCulture());

            yield return(ConvertTest.Valid(null, "(none)").WithContext(null).WithInvariantRemoteInvokeCulture());

            yield return(ConvertTest.Valid(string.Empty, string.Empty).WithContext(null));

            // IReferenceCollection.
            var nullReferenceServiceContext = new MockTypeDescriptorContext
            {
                GetServiceAction = (serviceType) =>
                {
                    Assert.Equal(typeof(IReferenceService), serviceType);
                    return(null);
                }
            };

            yield return(ConvertTest.Valid(component1, string.Empty).WithContext(nullReferenceServiceContext));

            yield return(ConvertTest.Valid(new Component(), string.Empty).WithContext(nullReferenceServiceContext));

            var invalidReferenceServiceContext = new MockTypeDescriptorContext
            {
                GetServiceAction = (serviceType) =>
                {
                    Assert.Equal(typeof(IReferenceService), serviceType);
                    return(new object());
                }
            };

            yield return(ConvertTest.Valid(component1, string.Empty).WithContext(invalidReferenceServiceContext));

            yield return(ConvertTest.Valid(new Component(), string.Empty).WithContext(invalidReferenceServiceContext));

            var referenceService = new MockReferenceService();

            referenceService.AddReference("reference name", component1);
            referenceService.AddReference(string.Empty, component2);
            referenceService.AddReference(null, component3);
            referenceService.AddReference("non component", nonComponent);
            var validReferenceServiceContext = new MockTypeDescriptorContext
            {
                GetServiceAction = (serviceType) =>
                {
                    Assert.Equal(typeof(IReferenceService), serviceType);
                    return(referenceService);
                }
            };

            yield return(ConvertTest.Valid(component1, "reference name").WithContext(validReferenceServiceContext));

            yield return(ConvertTest.Valid(component2, string.Empty).WithContext(validReferenceServiceContext));

            yield return(ConvertTest.Valid(component3, string.Empty).WithContext(validReferenceServiceContext));

            yield return(ConvertTest.Valid(nonComponent, "non component").WithContext(validReferenceServiceContext));

            yield return(ConvertTest.Valid(new Component(), string.Empty).WithContext(validReferenceServiceContext));

            // IContainer.
            var containerComponent1 = new TestComponent();
            var containerComponent2 = new TestComponent();
            var container           = new Container();

            container.Add(containerComponent1, "reference name");
            container.Add(containerComponent2, string.Empty);
            var contextWithContainer = new MockTypeDescriptorContext {
                Container = container
            };

            yield return(ConvertTest.Valid(containerComponent1, "reference name").WithContext(contextWithContainer));

            yield return(ConvertTest.Valid(containerComponent2, string.Empty).WithContext(contextWithContainer));

            yield return(ConvertTest.Valid(new Component(), string.Empty).WithContext(contextWithContainer));

            yield return(ConvertTest.CantConvertTo(1, typeof(int)));
        }