Ejemplo n.º 1
0
        /// <summary>
        /// Transforms a Yarhl node using a chain of converters.
        /// </summary>
        /// <param name="node">The original node.</param>
        /// <param name="converters">Converters list.</param>
        /// <param name="parameters">Allowed parameters list.</param>
        public static void Transform(this Node node, List <ConverterInfo> converters, List <ParameterInfo> parameters)
        {
            var yarhlConverters = PluginManager.Instance.GetConverters().Select(x => x.Metadata).ToList();

            foreach (ConverterInfo converterInfo in converters)
            {
                ConverterMetadata metadata = yarhlConverters.Find(x => x.Name == converterInfo.TypeName);

                if (metadata == null)
                {
                    throw new UnknownConverterException($"Unknown converter: {converterInfo.TypeName}");
                }

                IConverter converter = (IConverter)Activator.CreateInstance(metadata.Type);

                System.Reflection.MethodInfo initializer = metadata.Type.GetMethod("Initialize");
                ParameterInfo parameter = parameters.Find(x => x.Id == converterInfo.ParameterId);
                if (initializer != null && parameter != null)
                {
                    _ = initializer.Invoke(converter, new object[] { parameter.Value });
                }

                node.ChangeFormat((IFormat)ConvertFormat.With(converter, node.Format));
            }
        }
Ejemplo n.º 2
0
        public void CanConvertReturnsFalseForDifferentTypes()
        {
            var metadata = new ConverterMetadata {
                InternalSources = new[] { typeof(string), typeof(int) },
            };

            Assert.That(metadata.CanConvert(typeof(DateTime)), Is.False);
        }
Ejemplo n.º 3
0
        public void CanConvertReturnsTrueForDerivedTypes()
        {
            var metadata = new ConverterMetadata {
                InternalSources = typeof(Base),
            };

            Assert.That(metadata.CanConvert(typeof(Derived)), Is.True);
        }
Ejemplo n.º 4
0
        public void CanConvertReturnsTrueForTypeInList()
        {
            var metadata = new ConverterMetadata {
                InternalSources = new[] { typeof(string), typeof(int) },
            };

            Assert.That(metadata.CanConvert(typeof(int)), Is.True);
        }
Ejemplo n.º 5
0
        public void CanConvertReturnsTrueForExactType()
        {
            var metadata = new ConverterMetadata {
                InternalSources = typeof(int),
            };

            Assert.That(metadata.CanConvert(typeof(int)), Is.True);
        }
Ejemplo n.º 6
0
        public void GetDestinationsReturnOneElementArrayForSingleSource()
        {
            var metadata = new ConverterMetadata {
                InternalDestinations = typeof(int),
            };

            Type[] dests = metadata.GetDestinations();
            Assert.That(dests.Length, Is.EqualTo(1));
            Assert.That(dests[0], Is.EqualTo(typeof(int)));
        }
Ejemplo n.º 7
0
        public void GetSourcesReturnOneElementArrayForSingleSource()
        {
            var metadata = new ConverterMetadata {
                InternalSources = typeof(int),
            };

            Type[] sources = metadata.GetSources();
            Assert.That(sources.Length, Is.EqualTo(1));
            Assert.That(sources[0], Is.EqualTo(typeof(int)));
        }
Ejemplo n.º 8
0
        public void CanConvertSourceThrowsExceptionIfNullArgument()
        {
            var metadata = new ConverterMetadata {
                InternalSources = new Type[] { typeof(int), typeof(string) },
            };

            Assert.That(
                () => metadata.CanConvert(null),
                Throws.ArgumentNullException);
        }
Ejemplo n.º 9
0
        public void GetDestinationsReturnTwoElementsArrayForListOfSources()
        {
            var metadata = new ConverterMetadata {
                InternalDestinations = new Type[] { typeof(int), typeof(string) },
            };

            Type[] dests = metadata.GetDestinations();
            Assert.That(dests.Length, Is.EqualTo(2));
            Assert.That(dests[0], Is.EqualTo(typeof(int)));
            Assert.That(dests[1], Is.EqualTo(typeof(string)));
        }
Ejemplo n.º 10
0
        public void GetAndSetProperties()
        {
            var metadata = new ConverterMetadata {
                Name                 = "test",
                Type                 = typeof(int),
                InternalSources      = typeof(string),
                InternalDestinations = typeof(DateTime),
            };

            Assert.That(metadata.Name, Is.EqualTo("test"));
            Assert.That(metadata.Type, Is.EqualTo(typeof(int)));
            Assert.That(metadata.InternalSources, Is.EqualTo(typeof(string)));
            Assert.That(metadata.InternalDestinations, Is.EqualTo(typeof(DateTime)));
        }
Ejemplo n.º 11
0
        public void CanConvertReturnsForSourceAndDestInSameOrderList()
        {
            var metadata = new ConverterMetadata {
                InternalSources      = new[] { typeof(int), typeof(DateTime) },
                InternalDestinations = new[] { typeof(string), typeof(sbyte) },
            };

            Assert.That(
                metadata.CanConvert(typeof(DateTime), typeof(sbyte)),
                Is.True);
            Assert.That(
                metadata.CanConvert(typeof(DateTime), typeof(string)),
                Is.False);
        }
Ejemplo n.º 12
0
        public void CanConvertReturnsForExactSourceAndDest()
        {
            var metadata = new ConverterMetadata {
                InternalSources      = typeof(int),
                InternalDestinations = typeof(string),
            };

            Assert.That(
                metadata.CanConvert(typeof(int), typeof(string)),
                Is.True);
            Assert.That(
                metadata.CanConvert(typeof(string), typeof(string)),
                Is.False);
            Assert.That(
                metadata.CanConvert(typeof(int), typeof(int)),
                Is.False);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Calls a translator converter.
        /// </summary>
        /// <param name="node">The original node.</param>
        /// <param name="translation">The node with the translation.</param>
        /// <param name="translator">The translator converter.</param>
        public static void Translate(this Node node, Node translation, string translator)
        {
            var yarhlConverters        = PluginManager.Instance.GetConverters().Select(x => x.Metadata).ToList();
            ConverterMetadata metadata = yarhlConverters.Find(x => x.Name == translator);

            if (metadata == null)
            {
                throw new UnknownConverterException($"Unknown converter: {translator}");
            }

            IConverter converter = (IConverter)Activator.CreateInstance(metadata.Type);

            System.Reflection.MethodInfo initializer = metadata.Type.GetMethod("Initialize");

            if (initializer != null)
            {
                _ = initializer.Invoke(converter, new object[] { translation.Format });
            }

            node.ChangeFormat((IFormat)ConvertFormat.With(converter, node.Format));
        }
Ejemplo n.º 14
0
        public void CanConvertReturnsForSourceAndDestDerived()
        {
            var metadata = new ConverterMetadata {
                InternalSources      = new[] { typeof(Base) },
                InternalDestinations = new[] { typeof(Derived) },
            };

            Assert.That(
                metadata.CanConvert(typeof(Derived), typeof(Base)),
                Is.True);

            metadata = new ConverterMetadata {
                InternalSources      = new[] { typeof(Derived) },
                InternalDestinations = new[] { typeof(Base) },
            };
            Assert.That(
                metadata.CanConvert(typeof(Base), typeof(Base)),
                Is.False);
            Assert.That(
                metadata.CanConvert(typeof(Derived), typeof(Derived)),
                Is.False);
        }
Ejemplo n.º 15
0
        public void GetSourcesReturnEmptyArrayForDefaultValue()
        {
            var metadata = new ConverterMetadata();

            Assert.That(metadata.GetSources(), Is.Empty);
        }