protected internal override void ApplyMetadata(UIComponentMetadata metadata) { base.ApplyMetadata(metadata); ValueTermOptions = new TermOptions(); InitValueTermOptions(ValueTermOptions, metadata); }
private static string[] GetIndividualEnumTerms(Enum value, TermOptions termOptions) { TermAttribute termAttribute = GetEnumTermAttribute(value); ITermSettings termSettings = GetTermSettings(value.GetType()); TermCase?termCase = termOptions.GetCaseOrNull(); string termFormat = termOptions.GetFormatOrNull(); if (termAttribute != null || termSettings != null) { string[] terms = GetIndividualEnumTerms(value, termAttribute, termSettings, termOptions.Culture); if (termCase.HasValue) { terms = terms.Select(x => ApplyCaseWithoutWordBreak(x, termCase.Value)).ToArray(); } return(terms.Select(x => FormatValue(x, termFormat, termOptions.Culture)).ToArray()); } else if (termCase == null && (termFormat != null && !termFormat.Contains("{0}"))) { return(new[] { FormatValue(value, termFormat, termOptions.Culture) }); } else { string term = TermCaseResolver.ApplyCase(value.ToString(), termCase ?? DefaultCase); return(new[] { FormatValue(term, termFormat, termOptions.Culture) }); } }
private static string[] GetIndividualEnumTerms(Enum value, TermOptions termOptions) { TermAttribute termAttribute = GetEnumTermAttribute(value); bool hasTermValue = termAttribute != null && termAttribute.Values != null && termAttribute.Values.Any(); string termFormat = termOptions.GetFormatOrNull() ?? termAttribute.GetFormatOrNull() ?? GetTermSettings(value.GetType()).GetFormatOrNull() ?? null; if (hasTermValue) { return(termAttribute.Values.Select(x => FormatValue(x, termFormat, termOptions.Culture)).ToArray()); } else { TermCase termCase = termOptions.GetCaseOrNull() ?? termAttribute.GetCaseOrNull() ?? GetTermSettings(value.GetType()).GetCaseOrNull() ?? DefaultFormat; if (termFormat == null || termFormat.Contains("{0}")) { string term = termCase.ApplyTo(value.ToString()); return(new[] { FormatValue(term, termFormat, termOptions.Culture) }); } else { return(new[] { FormatValue(value, termFormat, termOptions.Culture) }); } } }
public static string[] GetTerms(object value, TermOptions termOptions = null) { value.CheckNotNull(nameof(value)); termOptions = termOptions ?? new TermOptions(); TermConverter termConverter; if (value is string) { return new[] { FormatStringValue((string)value, termOptions) } } ; else if (value is Enum) { return(GetEnumTerms((Enum)value, termOptions)); } else if (TypeTermConverters.TryGetValue(value.GetType(), out termConverter) && termConverter.ToStringConverter != null) { return new[] { termConverter.ToStringConverter(value, termOptions) } } ; else { return new[] { FormatValue(value, termOptions.Format, termOptions.Culture) } }; }
public static string CreateXPathCondition(object value, TermOptions termOptions = null, string operand = ".") { string[] terms = GetTerms(value, termOptions); TermMatch match = GetMatch(value, termOptions); return(match.CreateXPathCondition(terms, operand)); }
/// <summary> /// Selects the data of each control using JavaScript path relative to element /// that is found using additional <paramref name="elementXPath"/>. /// </summary> /// <typeparam name="TData">The type of the data.</typeparam> /// <param name="elementXPath">The element XPath.</param> /// <param name="elementValueJSPath"> /// The JavaScript path to the element value, /// for example: <c>getAttribute('data-id')</c>. /// </param> /// <param name="dataProviderName">Name of the data provider to use in reporting.</param> /// <param name="valueTermOptions">The term options of value.</param> /// <returns>An instance of <see cref="DataProvider{TData, TOwner}"/>.</returns> public DataProvider <IEnumerable <TData>, TOwner> SelectDataByExtraXPath <TData>( string elementXPath, string elementValueJSPath, string dataProviderName = null, TermOptions valueTermOptions = null) { elementValueJSPath.CheckNotNullOrEmpty(nameof(elementValueJSPath)); if (dataProviderName == null) { StringBuilder nameBuilder = new StringBuilder(); if (elementXPath != null) { nameBuilder.Append($"XPath: '{elementXPath}', "); } nameBuilder.Append($"JSPath: '{elementValueJSPath}'"); dataProviderName = nameBuilder.ToString(); } return(Component.GetOrCreateDataProvider( $"\"{dataProviderName}\" of {ProviderName}", () => SelectElementValues <TData>(elementXPath, elementValueJSPath, valueTermOptions))); }
/// <summary> /// Selects the content of each control relative to element /// that is found using additional <paramref name="elementXPath"/>. /// </summary> /// <typeparam name="TData">The type of the data.</typeparam> /// <param name="elementXPath">The element XPath.</param> /// <param name="dataProviderName">Name of the data provider to use in reporting.</param> /// <param name="valueTermOptions">The term options of value.</param> /// <returns>An instance of <see cref="DataProvider{TData, TOwner}"/>.</returns> public DataProvider <IEnumerable <TData>, TOwner> SelectContentsByExtraXPath <TData>( string elementXPath, string dataProviderName = null, TermOptions valueTermOptions = null) { return(SelectDataByExtraXPath <TData>(elementXPath, "textContent", dataProviderName, valueTermOptions)); }
public static string[] GetEnumTerms(Enum value, TermOptions termOptions = null) { termOptions = termOptions ?? new TermOptions(); return(value.GetType().IsDefined(typeof(FlagsAttribute), false) ? GetFlagsEnumTerms(value, termOptions) : GetIndividualEnumTerms(value, termOptions)); }
private static string FormatStringValue(string value, TermOptions termOptions) { if (termOptions.GetCaseOrNull() != null) { value = termOptions.GetCaseOrNull().Value.ApplyTo(value); } return(FormatValue(value, termOptions.Format, termOptions.Culture)); }
protected override void InitValueTermOptions(TermOptions termOptions, UIComponentMetadata metadata) { base.InitValueTermOptions(termOptions, metadata); if (FindItemAttribute is IPropertySettings findItemAttributeAsSettings) { termOptions.MergeWith(findItemAttributeAsSettings); } }
protected IEnumerable <TData> SelectElementValues <TData>( string elementXPath, string elementValueJSPath, TermOptions valueTermOptions) { var elements = GetItemElements(extraXPath: elementXPath); return(GetElementTextValues(elements, elementValueJSPath). Select(x => TermResolver.FromString <TData>(x, valueTermOptions))); }
public static string ToString(object value, TermOptions termOptions = null) { if (value == null || Equals(value, string.Empty)) { return(null); } string[] terms = GetTerms(value, termOptions); return(string.Join("/", terms)); }
protected override void InitValueTermOptions(TermOptions termOptions, UIComponentMetadata metadata) { base.InitValueTermOptions(termOptions, metadata); IPropertySettings findItemAttributeAsSettings = metadata.Get <IFindItemAttribute>(AttributeLevels.Declared) as IPropertySettings; if (findItemAttributeAsSettings != null) { termOptions.MergeWith(findItemAttributeAsSettings); } }
public static string ToDisplayString(object value, TermOptions termOptions = null) { if (value is IEnumerable <object> ) { return(string.Join("/", ((IEnumerable <object>)value).Select(x => ToDisplayString(x, termOptions)))); } else { return(ToString(value, termOptions)); } }
public static object FromString(string value, Type destinationType, TermOptions termOptions = null) { object result = string.IsNullOrEmpty(value) ? null : RetrieveValueFromString(value, destinationType, termOptions ?? new TermOptions()); if (result == null && !destinationType.IsClassOrNullable()) { throw new ArgumentException( "Failed to find value of type '{0}' corresponding to '{1}'.".FormatWith(destinationType.FullName, value), nameof(value)); } else { return(result); } }
public override string GetXPathCondition(object parameter, TermOptions termOptions) { IWebElement scope = component.ScopeSource.GetScopeElement(component, SearchOptions.SafelyAtOnce()); IWebElement label = scope.Get( By.XPath($".//label[{TermResolver.CreateXPathCondition(parameter, termOptions)}]"). SafelyAtOnce(). Label(TermResolver.ToDisplayString(parameter))); if (label != null) { string elementId = label.GetAttribute("for"); if (!string.IsNullOrEmpty(elementId)) { return($"[@id='{elementId}']"); } } return($"[ancestor::label[{TermResolver.CreateXPathCondition(parameter, termOptions)}]]"); }
private static string FormatStringValue(string value, TermOptions termOptions) { string valueToFormat = termOptions.GetCaseOrNull()?.ApplyTo(value) ?? value; return(FormatValue(valueToFormat, termOptions.Format, termOptions.Culture)); }
public override string GetXPathCondition(object parameter, TermOptions termOptions) { return(CreateSimpleXPathCodition("[ancestor::label[{0}]]", parameter, termOptions, ".")); }
public override string GetXPathCondition(object parameter, TermOptions termOptions) { return CreateSimpleXPathCodition("[ancestor::label[{0}]]", parameter, termOptions, "."); }
public override string GetXPathCondition(object parameter, TermOptions termOptions) { return(CreateSimpleXPathCodition("[{0}]", parameter, termOptions, "@value")); }
/// <summary> /// Selects the data of each control using JavaScript path relative to control element. /// </summary> /// <typeparam name="TData">The type of the data.</typeparam> /// <param name="elementValueJSPath"> /// The JavaScript path to the element value, /// for example: <c>getAttribute('data-id')</c>. /// </param> /// <param name="dataProviderName">Name of the data provider to use in reporting.</param> /// <param name="valueTermOptions">The term options of value.</param> /// <returns>An instance of <see cref="DataProvider{TData, TOwner}"/>.</returns> public DataProvider <IEnumerable <TData>, TOwner> SelectData <TData>( string elementValueJSPath, string dataProviderName = null, TermOptions valueTermOptions = null) => SelectDataByExtraXPath <TData>(null, elementValueJSPath, dataProviderName, valueTermOptions);
public static object StringToEnum(string value, Type enumType, TermOptions termOptions = null) { return(enumType.GetIndividualEnumFlags(). FirstOrDefault(x => GetEnumMatch(x, termOptions).IsMatch(value, GetEnumTerms(x, termOptions)))); }
private static string[] GetFlagsEnumTerms(Enum value, TermOptions termOptions) { return(value.GetIndividualFlags().SelectMany(x => GetIndividualEnumTerms(x, termOptions)).ToArray()); }
public static string ToDisplayString(object value, TermOptions termOptions = null) { return(value is IEnumerable <object> enumerable ? string.Join("/", enumerable.Select(x => ToDisplayString(x, termOptions))) : ToString(value, termOptions)); }
private static object RetrieveValueFromString(string value, Type destinationType, TermOptions termOptions) { Type underlyingType = Nullable.GetUnderlyingType(destinationType) ?? destinationType; TermConverter termConverter; if (underlyingType.IsEnum) { return(StringToEnum(value, underlyingType, termOptions)); } else if (TypeTermConverters.TryGetValue(underlyingType, out termConverter)) { return(termConverter.FromStringConverter(value, termOptions)); } else { return(Convert.ChangeType(RetrieveValuePart(value, termOptions.Format), underlyingType, termOptions.Culture)); } }
public static T FromString <T>(string value, TermOptions termOptions = null) { object result = FromString(value, typeof(T), termOptions); return((T)result); }
public abstract string GetXPathCondition(object parameter, TermOptions termOptions);
public T GetParameter <T>(IWebElement element, TermOptions termOptions) { string value = GetParameterAsString(element); return(TermResolver.FromString <T>(value, termOptions)); }
protected string CreateSimpleXPathCodition(string locatorXPathFormat, object parameter, TermOptions termOptions, string operand) { string xPathCondition = TermResolver.CreateXPathCondition(parameter, termOptions, operand); return(locatorXPathFormat.FormatWith(xPathCondition)); }
public override string GetXPathCondition(object parameter, TermOptions termOptions) { return($"[{RelativeElementXPath}[{TermResolver.CreateXPathCondition(parameter, termOptions)}]]"); }
/// <summary> /// Initializes the value term options (culture, format, etc.). /// </summary> /// <param name="termOptions">The term options.</param> /// <param name="metadata">The component metadata.</param> protected virtual void InitValueTermOptions(TermOptions termOptions, UIComponentMetadata metadata) { termOptions.Culture = metadata.GetCulture(); termOptions.Format = metadata.GetFormat(); }
public override string GetXPathCondition(object parameter, TermOptions termOptions) { return CreateSimpleXPathCodition("[{0}]", parameter, termOptions, "@value"); }