예제 #1
0
파일: Field`2.cs 프로젝트: rputch/atata
        protected internal override void ApplyMetadata(UIComponentMetadata metadata)
        {
            base.ApplyMetadata(metadata);

            ValueTermOptions = new TermOptions();
            InitValueTermOptions(ValueTermOptions, metadata);
        }
예제 #2
0
        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) });
            }
        }
예제 #3
0
        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) });
                }
            }
        }
예제 #4
0
        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) }
            };
        }
예제 #5
0
        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));
        }
예제 #6
0
        /// <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)));
        }
예제 #7
0
 /// <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));
 }
예제 #8
0
        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));
        }
예제 #9
0
        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));
        }
예제 #10
0
        protected override void InitValueTermOptions(TermOptions termOptions, UIComponentMetadata metadata)
        {
            base.InitValueTermOptions(termOptions, metadata);

            if (FindItemAttribute is IPropertySettings findItemAttributeAsSettings)
            {
                termOptions.MergeWith(findItemAttributeAsSettings);
            }
        }
예제 #11
0
        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)));
        }
예제 #12
0
        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));
        }
예제 #13
0
        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);
            }
        }
예제 #14
0
 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));
     }
 }
예제 #15
0
        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);
            }
        }
예제 #16
0
        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)}]]");
        }
예제 #17
0
        private static string FormatStringValue(string value, TermOptions termOptions)
        {
            string valueToFormat = termOptions.GetCaseOrNull()?.ApplyTo(value) ?? value;

            return(FormatValue(valueToFormat, termOptions.Format, termOptions.Culture));
        }
예제 #18
0
 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, ".");
 }
예제 #20
0
 public override string GetXPathCondition(object parameter, TermOptions termOptions)
 {
     return(CreateSimpleXPathCodition("[{0}]", parameter, termOptions, "@value"));
 }
예제 #21
0
 /// <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);
예제 #22
0
 public static object StringToEnum(string value, Type enumType, TermOptions termOptions = null)
 {
     return(enumType.GetIndividualEnumFlags().
            FirstOrDefault(x => GetEnumMatch(x, termOptions).IsMatch(value, GetEnumTerms(x, termOptions))));
 }
예제 #23
0
 private static string[] GetFlagsEnumTerms(Enum value, TermOptions termOptions)
 {
     return(value.GetIndividualFlags().SelectMany(x => GetIndividualEnumTerms(x, termOptions)).ToArray());
 }
예제 #24
0
 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));
 }
예제 #25
0
        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));
            }
        }
예제 #26
0
        public static T FromString <T>(string value, TermOptions termOptions = null)
        {
            object result = FromString(value, typeof(T), termOptions);

            return((T)result);
        }
예제 #27
0
 public abstract string GetXPathCondition(object parameter, TermOptions termOptions);
예제 #28
0
        public T GetParameter <T>(IWebElement element, TermOptions termOptions)
        {
            string value = GetParameterAsString(element);

            return(TermResolver.FromString <T>(value, termOptions));
        }
예제 #29
0
        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)}]]");
 }
예제 #31
0
파일: Field`2.cs 프로젝트: rputch/atata
 /// <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");
 }