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)); }
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"); } }
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)); }
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")); }
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)); }
private object ConvertTheStringToAnEnum(string value, Type enumType) { return(StepArgumentTypeConverter.ConvertToAnEnum(GetTheEnumType(enumType), PrepareValue(value))); }
private static object ConvertTheStringToAnEnum(string value, Type enumType) { return(StepArgumentTypeConverter.ConvertToAnEnum(GetTheEnumType(enumType), value)); }