/// <summary>
        /// Starts searching for windows by its title.
        /// </summary>
        /// <param name="title">The window title to search for.</param>
        /// <param name="comparison">The comparison kind how the window title will be compared.</param>
        /// <returns>A combinable Use to be able to append additional conditions.</returns>
        public new CombinableUse Title(string title, CompareKind comparison)
        {
            _conditions.Add(window => StringExtensions.Match(window.Title, title, comparison));
            _conditionDescriptions.Add(string.Format("StringExtensions.Match(window.Title, \"{0}\", CompareKind.{1})", title, comparison));

            return(this);
        }
        public static bool Match(string sourceString, string searchPattern, CompareKind compareKind)
        {
            if (sourceString == null || searchPattern == null)
            {
                return(false);
            }

            switch (compareKind)
            {
            case CompareKind.Contains:
                return(sourceString.Contains(searchPattern));

            case CompareKind.ContainsIgnoreCase:
                return(sourceString.ToLower().Contains(searchPattern.ToLower()));

            case CompareKind.EndsWith:
                return(sourceString.EndsWith(searchPattern));

            case CompareKind.EndsWithIgnoreCase:
                return(sourceString.ToLower().EndsWith(searchPattern.ToLower()));

            case CompareKind.Exact:
                return(sourceString.Equals(searchPattern));

            case CompareKind.ExactIgnoreCase:
                return(sourceString.ToLower().Equals(searchPattern.ToLower()));

            case CompareKind.StartsWith:
                return(sourceString.StartsWith(searchPattern));

            case CompareKind.StartsWithIgnoreCase:
                return(sourceString.ToLower().StartsWith(searchPattern.ToLower()));
            }
            return(false);
        }
Exemple #3
0
 public CompareIntriniscAttribute(
     CompareKind intrinsicKind,
     CompareFlags intrinsicFlags)
 {
     IntrinsicKind  = intrinsicKind;
     IntrinsicFlags = intrinsicFlags;
 }
Exemple #4
0
            public static String Sign(CompareKind pCompareKind)
            {
                switch (pCompareKind)
                {
                case CompareKind.None: return(" = ");

                case CompareKind.Equal: return(" = ");;

                case CompareKind.IsNULL: return(" IS NULL ");

                case CompareKind.Major: return(" > ");

                case CompareKind.Minor: return(" < ");

                case CompareKind.IsNotNULL: return("IS NOT NULL");

                case CompareKind.NotEqual: return(" <> ");

                case CompareKind.Like: return(" LIKE ");

                case CompareKind.In: return(" IN ");

                case CompareKind.MajorAndEqual: return(" >= ");

                case CompareKind.MinorAndEqual: return(" <= ");

                default: return(" = ");
                }
            }
        /// <summary>
        /// Starts the search for the UI element by the name.
        /// </summary>
        /// <param name="className">The class name to search for.</param>
        /// <param name="comparison">The comparison kind how the class name will be compared.</param>
        /// <returns>A combinable By to be able to append additional conditions.</returns>
        /// <exception cref="System.ArgumentException">className is null, empty or just whitespaces.</exception>
        /// <remarks>If CompareKind is not set to <see cref="DW.CodedUI.CompareKind.Exact" /> or <see cref="DW.CodedUI.CompareKind.ExactIgnoreCase" />, the whole search causes a memory leak in the target application.<br />
        /// The reason of this is that for custom conditions the TreeWalker needs to be used and this has the known issue.</remarks>
        public new CombinableBy ClassName(string className, CompareKind comparison)
        {
            if (string.IsNullOrWhiteSpace(className))
            {
                throw new ArgumentException("className is null, empty or just whitespaces.");
            }

            _conditions.Add(element =>
            {
                if (element == null)
                {
                    return(false);
                }
                return(StringExtensions.Match(element.Properties.ClassName, className, comparison));
            });
            _conditionDescriptions.Add(string.Format("StringExtensions.Match(element.Properties.ClassName, \"{0}\", CompareKind.{1})", className, comparison));

            if (CanBeRaw(comparison))
            {
                var propertyConditionFlags = ToPropertyConditionFlag(comparison);
                _rawConditions.Add(new PropertyCondition(AutomationElement.ClassNameProperty, className, propertyConditionFlags));
                _rawConditionDescriptions.Add(string.Format("new PropertyCondition(AutomationElement.ClassNameProperty, \"{0}\", {1}", className, propertyConditionFlags));
            }
            else
            {
                _rawConditions.Clear();
            }
            return(this);
        }
        /// <summary>
        /// Resolves a compare operation.
        /// </summary>
        /// <param name="kind">The compare kind.</param>
        /// <param name="flags">The compare flags.</param>
        /// <param name="type">The type to compare.</param>
        /// <returns>The resolved compare operation.</returns>
        public static string GetCompareOperation(
            CompareKind kind,
            CompareFlags flags,
            ArithmeticBasicValueType type)
        {
            var unorderedFloatComparison = type.IsFloat() &&
                                           flags.HasFlag(CompareFlags.UnsignedOrUnordered);

            if (unorderedFloatComparison)
            {
                if (CompareUnorderedFloatOperations.TryGetValue(
                        (kind, type),
                        out string operation))
                {
                    return(operation);
                }
            }
            else
            {
                if (CompareOperations.TryGetValue((kind, type), out string operation))
                {
                    return(operation);
                }
            }
            throw new NotSupportedIntrinsicException(kind.ToString());
        }
Exemple #7
0
		public ErrorRecordComparer(CompareKind kind)
		{

			//The compare kind determines which field to compare Error Records with.
			m_Kind = kind;

		}
Exemple #8
0
        /// <summary>
        /// Inverts the given compare kind.
        /// </summary>
        /// <param name="kind">The compare kind to invert.</param>
        /// <returns>The inverted compare kind.</returns>
        public static CompareKind Invert(CompareKind kind)
        {
            switch (kind)
            {
            case CompareKind.Equal:
                return(CompareKind.NotEqual);

            case CompareKind.NotEqual:
                return(CompareKind.Equal);

            case CompareKind.LessThan:
                return(CompareKind.GreaterEqual);

            case CompareKind.LessEqual:
                return(CompareKind.GreaterThan);

            case CompareKind.GreaterThan:
                return(CompareKind.LessEqual);

            case CompareKind.GreaterEqual:
                return(CompareKind.LessThan);

            default:
                throw new ArgumentOutOfRangeException(nameof(kind));
            }
        }
Exemple #9
0
        /// <summary>
        /// Realizes a compare instruction of the given type.
        /// </summary>
        /// <param name="compareKind">The comparison kind.</param>
        /// <param name="instructionFlags">The instruction flags.</param>
        private void MakeCompare(
            CompareKind compareKind,
            ILInstructionFlags instructionFlags)
        {
            var value = CreateCompare(compareKind, instructionFlags);

            Block.Push(value);
        }
Exemple #10
0
 /// <summary>
 /// Inverts the given compare kind if it is not commutative.
 /// </summary>
 /// <param name="kind">The compare kind to invert.</param>
 /// <returns>The inverted compare kind.</returns>
 public static CompareKind InvertIfNonCommutative(CompareKind kind)
 {
     if (IsCommutative(kind))
     {
         return(kind);
     }
     return(Invert(kind));
 }
Exemple #11
0
 /// <summary>
 /// Resolves a compare operation.
 /// </summary>
 /// <param name="kind">The compare kind.</param>
 /// <param name="type">The type to compare.</param>
 /// <returns>The resolved compare operation.</returns>
 public static string GetCompareOperation(CompareKind kind, ArithmeticBasicValueType type)
 {
     if (CompareOperations.TryGetValue((kind, type), out string operation))
     {
         return(operation);
     }
     throw new NotSupportedIntrinsicException(kind.ToString());
 }
        public void GetBytes_CompareInstruction(CompareKind compareKind)
        {
            var instruction   = new CompareInstruction(compareKind);
            var expectedBytes = InstructionByteBuilder.Create()
                                .Opcode(Opcode.Compare, compareKind)
                                .AsSpan();

            Assert.True(expectedBytes.SequenceEqual(instruction.GetBytes()));
        }
        public void Decode_CompareInstruction_FromBytesArray(CompareKind compareKind)
        {
            var bytes = InstructionByteBuilder.Create()
                        .Opcode(Opcode.Compare, compareKind)
                        .ToArray();
            var compareInstruction = AssertBytesDecodedAs <CompareInstruction>(bytes);

            Assert.Equal(compareKind, compareInstruction.CompareKind);
        }
Exemple #14
0
        /// <summary>
        /// Realizes a compare instruction of the given type.
        /// </summary>
        /// <param name="block">The current basic block.</param>
        /// <param name="builder">The current builder.</param>
        /// <param name="compareKind">The comparison kind.</param>
        /// <param name="instructionFlags">The instruction flags.</param>
        private static void MakeCompare(
            Block block,
            IRBuilder builder,
            CompareKind compareKind,
            ILInstructionFlags instructionFlags)
        {
            var value = CreateCompare(block, builder, compareKind, instructionFlags);

            block.Push(value);
        }
Exemple #15
0
        private PropertyConditionFlags ToPropertyConditionFlag(CompareKind comparison)
        {
            switch (comparison)
            {
            case CompareKind.ExactIgnoreCase:
                return(PropertyConditionFlags.IgnoreCase);

            default:
                return(PropertyConditionFlags.None);
            }
        }
Exemple #16
0
 /// <summary>
 /// Creates a compare operation.
 /// </summary>
 /// <param name="location">The current location.</param>
 /// <param name="left">The left operand.</param>
 /// <param name="right">The right operand.</param>
 /// <param name="kind">The operation kind.</param>
 /// <returns>A node that represents the compare operation.</returns>
 public ValueReference CreateCompare(
     Location location,
     Value left,
     Value right,
     CompareKind kind) =>
 CreateCompare(
     location,
     left,
     right,
     kind,
     CompareFlags.None);
Exemple #17
0
        /// <summary>
        /// Creates a compare instruction of the given type.
        /// </summary>
        /// <param name="block">The current basic block.</param>
        /// <param name="builder">The current builder.</param>
        /// <param name="compareKind">The comparison kind.</param>
        /// <param name="flags">The comparison flags.</param>
        private static Value CreateCompare(
            Block block,
            IRBuilder builder,
            CompareKind compareKind,
            CompareFlags flags)
        {
            var right = block.PopCompareValue(ConvertFlags.None);
            var left  = block.PopCompareValue(ConvertFlags.None);

            return(CreateCompare(builder, left, right, compareKind, flags));
        }
Exemple #18
0
        /// <summary>
        /// Creates a compare instruction of the given type.
        /// </summary>
        /// <param name="compareKind">The comparison kind.</param>
        /// <param name="flags">The comparison flags.</param>
        private Value CreateCompare(CompareKind compareKind, CompareFlags flags)
        {
            var right = Block.PopCompareValue(Location, ConvertFlags.None);
            var left  = Block.PopCompareValue(Location, ConvertFlags.None);

            return(CreateCompare(
                       left,
                       right,
                       compareKind,
                       flags));
        }
Exemple #19
0
 /// <summary>
 /// Adjusts the given compare kind and the associated flags for swapping the
 /// operands of a compare operation.
 /// </summary>
 /// <param name="kind">The compare kind to invert.</param>
 /// <param name="leftType">The basic value type of the left operand..</param>
 /// <param name="rightType">The basic value type of the right operand.</param>
 /// <param name="flags">The compare flags that might be adjusted.</param>
 /// <returns>The adjusted compare kind.</returns>
 public static CompareKind SwapOperands(
     CompareKind kind,
     BasicValueType leftType,
     BasicValueType rightType,
     ref CompareFlags flags) =>
 UpdateFlags(
     kind,
     Swapped[(int)kind],
     leftType,
     rightType,
     ref flags);
Exemple #20
0
 /// <summary>
 /// Inverts the given compare kind.
 /// </summary>
 /// <param name="kind">The compare kind to invert.</param>
 /// <param name="leftType">The basic value type of the left operand..</param>
 /// <param name="rightType">The basic value type of the right operand.</param>
 /// <param name="flags">The compare flags that might be adjusted.</param>
 /// <returns>The inverted compare kind.</returns>
 public static CompareKind Invert(
     CompareKind kind,
     BasicValueType leftType,
     BasicValueType rightType,
     ref CompareFlags flags) =>
 UpdateFlags(
     kind,
     Inverted[(int)kind],
     leftType,
     rightType,
     ref flags);
Exemple #21
0
        /// <summary>
        /// Realizes a conditional branch instruction.
        /// </summary>
        /// <param name="block">The current basic block.</param>
        /// <param name="builder">The current builder.</param>
        /// <param name="compareKind">The comparison type of the condition.</param>
        /// <param name="instructionFlags">The instruction flags.</param>
        private static void MakeBranch(
            Block block,
            IRBuilder builder,
            CompareKind compareKind,
            ILInstructionFlags instructionFlags)
        {
            var targets = block.GetBuilderTerminator(2);

            var condition = CreateCompare(block, builder, compareKind, instructionFlags);

            builder.CreateConditionalBranch(condition, targets[0], targets[1]);
        }
Exemple #22
0
        private bool CanBeRaw(CompareKind comparison)
        {
            switch (comparison)
            {
            case CompareKind.Exact:
            case CompareKind.ExactIgnoreCase:
                return(true);

            default:
                return(false);
            }
        }
Exemple #23
0
        /// <summary>
        /// Creates a compare instruction of the given type.
        /// </summary>
        /// <param name="compareKind">The comparison kind.</param>
        /// <param name="instructionFlags">The instruction flags.</param>
        private Value CreateCompare(
            CompareKind compareKind,
            ILInstructionFlags instructionFlags)
        {
            var compareFlags = CompareFlags.None;

            if (instructionFlags.HasFlags(ILInstructionFlags.Unsigned))
            {
                compareFlags |= CompareFlags.UnsignedOrUnordered;
            }
            return(CreateCompare(compareKind, compareFlags));
        }
Exemple #24
0
        /// <summary>
        /// Make an intrinsic branch.
        /// </summary>
        /// <param name="block">The current basic block.</param>
        /// <param name="builder">The current builder.</param>
        /// <param name="kind">The current compare kind.</param>
        private static void MakeIntrinsicBranch(
            Block block,
            IRBuilder builder,
            CompareKind kind)
        {
            var targets = block.GetBuilderTerminator(2);

            var comparisonValue = block.PopCompareValue(ConvertFlags.None);
            var rightValue      = builder.CreatePrimitiveValue(comparisonValue.BasicValueType, 0);

            var condition = CreateCompare(builder, comparisonValue, rightValue, kind, CompareFlags.None);

            builder.CreateConditionalBranch(condition, targets[0], targets[1]);
        }
Exemple #25
0
        /// <summary>
        /// Creates a compare instruction of the given type.
        /// </summary>
        /// <param name="block">The current basic block.</param>
        /// <param name="builder">The current builder.</param>
        /// <param name="compareKind">The comparison kind.</param>
        /// <param name="instructionFlags">The instruction flags.</param>
        private static Value CreateCompare(
            Block block,
            IRBuilder builder,
            CompareKind compareKind,
            ILInstructionFlags instructionFlags)
        {
            var compareFlags = CompareFlags.None;

            if (instructionFlags.HasFlags(ILInstructionFlags.Unsigned))
            {
                compareFlags |= CompareFlags.UnsignedOrUnordered;
            }
            return(CreateCompare(block, builder, compareKind, compareFlags));
        }
Exemple #26
0
        /// <summary>
        /// Constructs a new compare value.
        /// </summary>
        /// <param name="context">The parent IR context.</param>
        /// <param name="basicBlock">The parent basic block.</param>
        /// <param name="left">The left operand.</param>
        /// <param name="right">The right operand.</param>
        /// <param name="kind">The operation kind.</param>
        /// <param name="flags">The operation flags.</param>
        internal CompareValue(
            IRContext context,
            BasicBlock basicBlock,
            ValueReference left,
            ValueReference right,
            CompareKind kind,
            CompareFlags flags)
            : base(ValueKind.Compare, basicBlock, ComputeType(context))
        {
            Kind  = kind;
            Flags = flags;

            Seal(ImmutableArray.Create(left, right));
        }
Exemple #27
0
        /// <summary>
        /// Realizes a conditional branch instruction.
        /// </summary>
        /// <param name="compareKind">The comparison type of the condition.</param>
        /// <param name="instructionFlags">The instruction flags.</param>
        private void MakeBranch(
            CompareKind compareKind,
            ILInstructionFlags instructionFlags)
        {
            var targets = Block.GetBuilderTerminator(2);

            var condition = CreateCompare(compareKind, instructionFlags);

            Builder.CreateIfBranch(
                Location,
                condition,
                targets[0],
                targets[1]);
        }
Exemple #28
0
        /// <summary>
        /// Create a new parameter instance
        /// </summary>
        /// <param name="pParameterName">Parameter's name</param>
        /// <param name="pCompareKind">Compare operation</param>
        /// <param name="pValue">Parameter's value</param>
        /// <returns>Parameter</returns>
        protected RecordParameter CreateParameter(String pParameterName, CompareKind pCompareKind, object pValue)
        {
            if (ProviderFactory == null)
            {
                throw new RecordProviderFactoryNullException("Provider Factory is null");
            }

            DbParameter parameter = (DbParameter)ProviderFactory.CreateParameter();

            parameter.ParameterName = pParameterName;
            parameter.Value         = pValue != null ? pValue : String.Empty;
            RecordParameter rparameter = new RecordParameter(parameter, pCompareKind);

            return(rparameter);
        }
Exemple #29
0
 /// <summary>
 /// Updates the compare flags according to the potentially updated operation
 /// kind.
 /// </summary>
 /// <param name="kind">The current operation kind.</param>
 /// <param name="newKind">The new (potentially updated) operation kind.</param>
 /// <param name="leftType">The left basic value type.</param>
 /// <param name="rightType">The right basic value type.</param>
 /// <param name="flags">The current flags to be updated.</param>
 /// <returns>The value of <paramref name="newKind"/>.</returns>
 private static CompareKind UpdateFlags(
     CompareKind kind,
     CompareKind newKind,
     BasicValueType leftType,
     BasicValueType rightType,
     ref CompareFlags flags)
 {
     // If the comparison was swapped or inverted, and we are comparing floats,
     // toggle between ordered/unordered float comparisons
     if (kind != newKind && leftType.IsFloat() && rightType.IsFloat())
     {
         flags ^= CompareFlags.UnsignedOrUnordered;
     }
     return(newKind);
 }
Exemple #30
0
        /// <summary>
        /// Creates a compare instruction of the given type.
        /// </summary>
        /// <param name="left">The left operand.</param>
        /// <param name="right">The right operand.</param>
        /// <param name="builder">The current builder.</param>
        /// <param name="compareKind">The comparison kind.</param>
        /// <param name="flags">The comparison flags.</param>
        private static Value CreateCompare(
            IRBuilder builder,
            Value left,
            Value right,
            CompareKind compareKind,
            CompareFlags flags)
        {
            var convertFlags = ConvertFlags.None;

            if ((flags & CompareFlags.UnsignedOrUnordered) == CompareFlags.UnsignedOrUnordered)
            {
                convertFlags = ConvertFlags.SourceUnsigned;
            }
            right = CreateConversion(builder, right, left.Type, convertFlags);
            left  = CreateConversion(builder, left, right.Type, convertFlags);
            Debug.Assert(left.BasicValueType == right.BasicValueType);
            return(builder.CreateCompare(left, right, compareKind, flags));
        }