public async Task ConvertFrom_Test()
        {
            await Task.CompletedTask;

            var typeConverter = new TypeTypeConverter();

            // String (primitive type)
            var type = typeof(string);
            var text = type.FullName;

            Assert.AreEqual(type, typeConverter.ConvertFrom(text));

            text = $"{type.FullName}, {type.Assembly.GetName().Name}";
            Assert.AreEqual(type, typeConverter.ConvertFrom(text));

            text = type.AssemblyQualifiedName;
            Assert.AreEqual(type, typeConverter.ConvertFrom(text));

            // This type. Full name without assembly name will not work.
            type = this.GetType();

            text = $"{type.FullName}, {type.Assembly.GetName().Name}";
            Assert.AreEqual(type, typeConverter.ConvertFrom(text));

            text = type.AssemblyQualifiedName;
            Assert.AreEqual(type, typeConverter.ConvertFrom(text));
        }
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            TypeTypeConverter converter = new TypeTypeConverter();

            value = converter.ConvertFrom(context, CultureInfo.CurrentCulture, value);
            value = base.EditValue(context, provider, value);
            value = converter.ConvertTo(context, CultureInfo.CurrentCulture, value, typeof(string));

            return(value);
        }
示例#3
0
        public void TypeTypeConverterConvertFromInvariantString()
        {
            tlog.Debug(tag, $"TypeTypeConverterConvertFromInvariantString START");

            var testingTarget = new TypeTypeConverter();

            Assert.IsNotNull(testingTarget, "Can't create success object TypeTypeConverter.");
            Assert.IsInstanceOf <TypeTypeConverter>(testingTarget, "Should return TypeTypeConverter instance.");

            Assert.Throws <NotImplementedException>(() => testingTarget.ConvertFromInvariantString(null));

            tlog.Debug(tag, $"TypeTypeConverterConvertFromInvariantString END");
        }
        public void ConvertFromIdentifiableStringReturnsTheCorrectType()
        {
            var typeContextMock = new Mock<ITypeContext>();
            var typeRepoMock = new Mock<IXamlTypeRepository>();

            var typeLocator = "type locator";

            var xamlType = new XamlType(typeof (DummyClass), typeRepoMock.Object, new TypeFactoryDummy(), new TypeFeatureProviderDummy());
            typeContextMock.Setup(context => context.GetByQualifiedName(It.Is<string>(s => s.Equals(typeLocator))))
                .Returns(xamlType);

            var contextMock = new Mock<IXamlTypeConverterContext>();
            contextMock.Setup(context => context.TypeRepository).Returns(typeContextMock.Object);

            var sut = new TypeTypeConverter();
            var t = sut.ConvertFrom(contextMock.Object, CultureInfo.CurrentCulture, typeLocator);
            Assert.AreEqual(typeof(DummyClass), t);
        }
        public void ConvertFromIdentifiableStringReturnsTheCorrectType()
        {
            var typeContextMock = new Mock <ITypeContext>();
            var typeRepoMock    = new Mock <IXamlTypeRepository>();

            var typeLocator = "type locator";

            var xamlType = new XamlType(typeof(DummyClass), typeRepoMock.Object, new TypeFactoryDummy(), new TypeFeatureProviderDummy());

            typeContextMock.Setup(context => context.GetByQualifiedName(It.Is <string>(s => s.Equals(typeLocator))))
            .Returns(xamlType);

            var contextMock = new Mock <IXamlTypeConverterContext>();

            contextMock.Setup(context => context.TypeRepository).Returns(typeContextMock.Object);


            var sut = new TypeTypeConverter();
            var t   = sut.ConvertFrom(contextMock.Object, CultureInfo.CurrentCulture, typeLocator);

            Assert.AreEqual(typeof(DummyClass), t);
        }
示例#6
0
        private void InitializeWindow()
        {
            if (String.IsNullOrEmpty(_windowName))
            {
                return;
            }

            string name = null;

            if (_windowName.StartsWith("$"))
            {
                string[] nameParts = _windowName.Split('|');
                if ((nameParts.Length > 2) || String.IsNullOrEmpty(nameParts[0]))
                {
                    throw new InvalidOperationException("Invalid window name. Either the name must be a type name, or must be in the form $<WindowNameParam>|<DefaultName>.");
                }

                if (nameParts.Length == 2)
                {
                    name = nameParts[1];
                }
                if (_startupArguments != null)
                {
                    string selectedName;
                    string argName = nameParts[0].Substring(1);
                    if (_startupArguments.TryGetValue(argName, out selectedName))
                    {
                        name = selectedName;
                    }
                }
            }
            else
            {
                name = _windowName;
            }

            Window mainWindow = null;

            if (String.IsNullOrEmpty(name) == false)
            {
                try {
                    Type windowType = TypeTypeConverter.ParseTypeName(this, name);
                    if (windowType == null)
                    {
                        throw new InvalidOperationException("The window named '" + name + "' could not be found.");
                    }
                    if (typeof(UIElement).IsAssignableFrom(windowType) == false)
                    {
                        throw new InvalidOperationException("The window named '" + name + "' does not derive from UIElement.");
                    }

                    UIElement uiElement = (UIElement)Activator.CreateInstance(windowType);
                    mainWindow = uiElement as Window;

                    if (mainWindow == null)
                    {
                        mainWindow = new Window(uiElement);
                    }
                }
                catch (Exception e) {
                    if (e is TargetInvocationException)
                    {
                        e = e.InnerException;
                    }

                    TextBlock errorText = new TextBlock();
                    errorText.Inlines.Add(new Run()
                    {
                        Text       = "The window named '" + name + "' could not be instantiated.",
                        FontWeight = FontWeights.Bold,
                        Foreground = new SolidColorBrush(Colors.Red)
                    });
                    errorText.Inlines.Add(new LineBreak());
                    errorText.Inlines.Add(new Run()
                    {
                        Text = e.Message
                    });

                    mainWindow = new Window(errorText);
                    if (Debugger.IsAttached)
                    {
                        throw;
                    }
                }
            }

            if (mainWindow != null)
            {
                Run(mainWindow);
            }
        }