예제 #1
0
        public void ShouldUseStepArgumentTransformationToConvertTable()
        {
            ObjectContainer.ScenarioContext = new ScenarioContext(null);
            BindingRegistry bindingRegistry = new BindingRegistry();

            ObjectContainer.BindingRegistry = bindingRegistry;

            UserCreator stepTransformationInstance = new UserCreator();
            var         transformMethod            = stepTransformationInstance.GetType().GetMethod("CreateUsers");

            bindingRegistry.StepTransformations.Add(new StepTransformationBinding(@"", transformMethod));

            var stepArgumentTypeConverter = new StepArgumentTypeConverter();

            var table = new Table("Name");

            table.AddRow("Tom");
            table.AddRow("Dick");
            table.AddRow("Harry");

            var result = stepArgumentTypeConverter.Convert(table, typeof(IEnumerable <User>), new CultureInfo("en-US"));

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.InstanceOf <IEnumerable <User> >());
            Assert.That(((IEnumerable <User>)result).Count(), Is.EqualTo(3));
        }
예제 #2
0
        public object Retrieve(KeyValuePair <string, string> keyValuePair, Type targetType, Type propertyType)
        {
            var value = keyValuePair.Value;

            if (propertyType.IsEnum)
            {
                if (value == null)
                {
                    throw new InvalidOperationException("No enum with value {null} found");
                }

                if (value.Length == 0)
                {
                    throw new InvalidOperationException("No enum with value {empty} found");
                }
            }
            else
            {
                if (string.IsNullOrEmpty(value))
                {
                    return(null);
                }

                propertyType = propertyType.GetGenericArguments()[0];
            }

            try
            {
                return(StepArgumentTypeConverter.ConvertToAnEnum(propertyType, value));
            }
            catch
            {
                throw new InvalidOperationException($"No enum with value {value} found");
            }
        }
예제 #3
0
        internal static Enum ConvertToEnum(string value, Type enumType)
        {
            var enumTypeInternal = GetEnumTypeFromNullableEnum(enumType);

            switch (enumTypeInternal)
            {
            case var type when TryGetValueFromDisplayNameAttribute(value, type, out var result): return(result);

            default:
                return((Enum)StepArgumentTypeConverter.ConvertToAnEnum(enumTypeInternal, value));
            }
        }
            public bool CanConvert(object value, IBindingType typeToConvertTo, CultureInfo cultureInfo)
            {
                if (!(typeToConvertTo is RuntimeBindingType))
                {
                    Type systemType = Type.GetType(typeToConvertTo.FullName, false);
                    if (systemType == null)
                    {
                        return(false);
                    }
                    typeToConvertTo = new RuntimeBindingType(systemType);
                }

                return(StepArgumentTypeConverter.CanConvertSimple(typeToConvertTo, value, cultureInfo));
            }
예제 #5
0
        public void StepArgumentTypeConverterShouldUseUserConverterForConversion()
        {
            ObjectContainer.ScenarioContext = new ScenarioContext(null);
            BindingRegistry bindingRegistry = new BindingRegistry();

            ObjectContainer.BindingRegistry = bindingRegistry;

            UserCreator stepTransformationInstance = new UserCreator();
            var         transformMethod            = stepTransformationInstance.GetType().GetMethod("Create");

            bindingRegistry.StepTransformations.Add(new StepTransformationBinding(@"user (\w+)", transformMethod));

            var stepArgumentTypeConverter = new StepArgumentTypeConverter();

            var result = stepArgumentTypeConverter.Convert("user xyz", typeof(User), new CultureInfo("en-US"));

            Assert.That(result.GetType(), Is.EqualTo(typeof(User)));
            Assert.That(((User)result).Name, Is.EqualTo("xyz"));
        }
예제 #6
0
            public bool CanConvert(object value, IBindingType typeToConvertTo, CultureInfo cultureInfo)
            {
                if (!(typeToConvertTo is RuntimeBindingType))
                {
                    try
                    {
                        // in some special cases, Type.GetType throws exception
                        // one of such case, if a Dictionary<string,string> step parameter is specified, see issue #340
                        Type systemType = Type.GetType(typeToConvertTo.FullName, false);
                        if (systemType == null)
                        {
                            return(false);
                        }
                        typeToConvertTo = new RuntimeBindingType(systemType);
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex);
                        return(false);
                    }
                }

                return(StepArgumentTypeConverter.CanConvertSimple(typeToConvertTo, value, cultureInfo));
            }
예제 #7
0
 private object ConvertTheStringToAnEnum(string value, Type enumType)
 {
     return(StepArgumentTypeConverter.ConvertToAnEnum(GetTheEnumType(enumType), PrepareValue(value)));
 }
예제 #8
0
 private static object ConvertTheStringToAnEnum(string value, Type enumType)
 {
     return(StepArgumentTypeConverter.ConvertToAnEnum(GetTheEnumType(enumType), value));
 }