Exemplo n.º 1
0
            public ProgramState PushWithConstraint()
            {
                var refEquals       = new ReferenceEqualsSymbolicValue(this.valueLeft, this.valueRight);
                var newProgramState = this.programState.PushValue(refEquals);

                return(SetConstraint(refEquals, newProgramState));
            }
Exemplo n.º 2
0
            private ProgramState SetConstraint(ReferenceEqualsSymbolicValue refEquals, ProgramState programState)
            {
                if (AreBothArgumentsNull())
                {
                    return(programState.SetConstraint(refEquals, BoolConstraint.True));
                }

                if (IsAnyArgumentNonNullValueType() ||
                    ArgumentsHaveDifferentNullability())
                {
                    return(programState.SetConstraint(refEquals, BoolConstraint.False));
                }

                if (this.valueLeft == this.valueRight)
                {
                    return(programState.SetConstraint(refEquals, BoolConstraint.True));
                }

                return(programState);
            }
Exemplo n.º 3
0
        private ProgramState HandleStringNullOrEmptyCheckMethod()
        {
            var newProgramState = this.programState
                                  .PopValue(out var arg)
                                  .PopValue(out var isNullOrEmptySpaceMethod);

            var refEquals = new ReferenceEqualsSymbolicValue(arg, isNullOrEmptySpaceMethod);

            newProgramState = newProgramState.PushValue(refEquals);
            if (newProgramState.HasConstraint(arg, ObjectConstraint.Null) ||
                newProgramState.HasConstraint(arg, StringConstraint.EmptyString))
            {
                newProgramState = newProgramState.SetConstraint(refEquals, BoolConstraint.True);
            }
            else if (newProgramState.HasConstraint(arg, StringConstraint.FullString) ||
                     newProgramState.HasConstraint(arg, StringConstraint.WhiteSpaceString) ||
                     newProgramState.HasConstraint(arg, StringConstraint.FullNotWhiteSpaceString))
            {
                newProgramState = newProgramState.SetConstraint(refEquals, BoolConstraint.False);
            }
            return(newProgramState);
        }
Exemplo n.º 4
0
        private ProgramState HandleStringNullOrWhiteSpaceCheckMethod()
        {
            var newProgramState = this.programState
                                  .PopValue(out var arg)
                                  .PopValue(out var isNullOrWhiteSpaceMethod);

            var refEquals = new ReferenceEqualsSymbolicValue(arg, isNullOrWhiteSpaceMethod);

            newProgramState = newProgramState.PushValue(refEquals);
            if (newProgramState.HasConstraint(arg, ObjectConstraint.Null) ||
                newProgramState.HasConstraint(arg, StringConstraint.EmptyString) ||
                newProgramState.HasConstraint(arg, StringConstraint.WhiteSpaceString))
            {
                newProgramState = newProgramState.SetConstraint(refEquals, BoolConstraint.True);
            }
            else if (newProgramState.HasConstraint(arg, StringConstraint.FullNotWhiteSpaceString))
            {
                newProgramState = newProgramState.SetConstraint(refEquals, BoolConstraint.False);
            }
            // This is reached when we don't know the result of isNullOrWhiteSpaceMethod
            // for example when there is a FullOrNullString constraint
            return(newProgramState);
        }