public void IsViolated_EmptyExpectedSymbolUnknown_ReturnsFalse() { var expectedFragment = Fragment.CreateEmpty(); IPreCondition preCondition = new CustomInferencePreCondition(c_symbol, expectedFragment, _problemMetadata); var context = new SymbolTable(_blacklistManager); Assert.That(preCondition.IsViolated(context), Is.False); }
public void IsViolated_NamedExpectedNamedGiven_ReturnsFalse() { var expectedFragment = Fragment.CreateNamed(c_expectedType); IPreCondition preCondition = new CustomInferencePreCondition(c_symbol, expectedFragment, _problemMetadata); var context = new SymbolTable(_blacklistManager); context.MakeSafe(c_symbol, expectedFragment); Assert.That(preCondition.IsViolated(context), Is.False); }
public void IsViolated_LiteralExpectedEmptyGiven_ReturnsTrue() { var expectedFragment = Fragment.CreateLiteral(); var givenFragment = Fragment.CreateEmpty(); IPreCondition preCondition = new CustomInferencePreCondition(c_symbol, expectedFragment, _problemMetadata); var context = new SymbolTable(_blacklistManager); context.MakeSafe(c_symbol, givenFragment); Assert.That(preCondition.IsViolated(context), Is.True); }
public void HandleViolation_ProblemMetadataGivenButNoViolation_NoProblemAdded() { var expectedFragment = Fragment.CreateNamed(c_expectedType); var givenFragment = Fragment.CreateNamed(c_expectedType); IPreCondition preCondition = new CustomInferencePreCondition(c_symbol, expectedFragment, _problemMetadata); var context = new SymbolTable(_blacklistManager); context.MakeSafe(c_symbol, givenFragment); IProblemPipe problemPipe = MockRepository.GenerateMock <IProblemPipe>(); preCondition.HandleViolation(context, problemPipe); problemPipe.AssertWasNotCalled(pipe => pipe.AddProblem(Arg <ProblemMetadata> .Is.Anything)); }
public void HandleViolation_ViolationNotProvoked_KeepsSymbolFragment() { var expectedFragment = Fragment.CreateNamed(c_expectedType); var givenFragment = expectedFragment; IPreCondition preCondition = new CustomInferencePreCondition(c_symbol, expectedFragment, _problemMetadata); var context = new SymbolTable(_blacklistManager); context.MakeSafe(c_symbol, givenFragment); IProblemPipe problemPipe = MockRepository.GenerateMock <IProblemPipe>(); preCondition.HandleViolation(context, problemPipe); bool symbolFragmentKept = context.GetFragmentType(c_symbol) == expectedFragment; Assert.That(symbolFragmentKept, Is.True); }
public void Analyze(MethodCall methodCall, ISymbolTable context, List <IPreCondition> preConditions) { Method method = IntrospectionUtility.ExtractMethod(methodCall); if (Analyzes(method) && methodCall.Callee is MemberBinding) { MemberBinding memberBinding = (MemberBinding)methodCall.Callee; if (IsFragmentParameterInferenceMethod(method)) { string variableName; if (IntrospectionUtility.IsVariable(memberBinding.TargetObject, out variableName)) { Fragment parameterFragment = ParameterFragmentUtility.ParameterFragmentIntersection(methodCall, context); Fragment targetObjectFragment = context.GetFragmentType(variableName); if (targetObjectFragment == Fragment.CreateLiteral() || targetObjectFragment.Undefined) { context.MakeSafe(variableName, parameterFragment); } else { if (targetObjectFragment == Fragment.CreateEmpty() && parameterFragment != Fragment.CreateLiteral()) // && parameterFragment != Fragment.CreateEmpty() { ProblemMetadata problemMetadata = new ProblemMetadata(methodCall.UniqueKey, methodCall.SourceContext, parameterFragment, targetObjectFragment); IPreCondition precondition = new CustomInferencePreCondition(variableName, parameterFragment, problemMetadata); preConditions.Add(precondition); } else if (!FragmentUtility.FragmentTypesAssignable(parameterFragment, targetObjectFragment)) { context.MakeUnsafe(variableName); } } } } else if (!IsSafeMethod(method)) { string variableName; if (IntrospectionUtility.IsVariable(memberBinding.TargetObject, out variableName)) { context.MakeUnsafe(variableName); } } } }