public void IsValid_Lambda()
        {
            var context = CreateContext();

            var descriptor = new BuilderPatternDescriptor <InvocationExpressionSyntax>(invocation => invocation != null);

            descriptor.IsValid(null).Should().BeFalse();
            descriptor.IsValid(context.Node as InvocationExpressionSyntax).Should().BeTrue();
        }
        public void IsValid_Literal()
        {
            var context = CreateContext();

            var trueDescriptor = new BuilderPatternDescriptor <InvocationExpressionSyntax>(true);

            trueDescriptor.IsValid(null).Should().BeTrue();
            trueDescriptor.IsValid(context.Node as InvocationExpressionSyntax).Should().BeTrue();

            var falseDescriptor = new BuilderPatternDescriptor <InvocationExpressionSyntax>(false);

            falseDescriptor.IsValid(null).Should().BeFalse();
            falseDescriptor.IsValid(context.Node as InvocationExpressionSyntax).Should().BeFalse();
        }
Exemple #3
0
        public void IsInvalidBuilderInitialization_CS()
        {
            var aaaInvalidator = new BuilderPatternDescriptor <CSharpSyntax.InvocationExpressionSyntax>(false, (context) => context.MethodName == "Aaa");
            var bbbValidator   = new BuilderPatternDescriptor <CSharpSyntax.InvocationExpressionSyntax>(true, (context) => context.MethodName == "Bbb");
            var cccInvalidator = new BuilderPatternDescriptor <CSharpSyntax.InvocationExpressionSyntax>(false, (context) => context.MethodName == "Ccc");

            var condition1 = new CSharpBuilderPatternCondition(false, bbbValidator);

            condition1.IsInvalidBuilderInitialization(context_CS).Should().BeFalse(); // Invalid constructor validated by method

            var condition2 = new CSharpBuilderPatternCondition(false, cccInvalidator);

            condition2.IsInvalidBuilderInitialization(context_CS).Should().BeTrue(); // Invalid constructor invalidated by method

            var condition3 = new CSharpBuilderPatternCondition(true, cccInvalidator);

            condition3.IsInvalidBuilderInitialization(context_CS).Should().BeTrue(); // Valid constructor invalidated by method

            var condition4 = new CSharpBuilderPatternCondition(true, bbbValidator);

            condition4.IsInvalidBuilderInitialization(context_CS).Should().BeFalse(); // Valid constructor validated by method

            var condition5 = new CSharpBuilderPatternCondition(false, aaaInvalidator, bbbValidator);

            condition5.IsInvalidBuilderInitialization(context_CS).Should().BeFalse();                // Invalid constructor, invalidated by Aaa, validated by Bbb

            var condition6 = new CSharpBuilderPatternCondition(false, bbbValidator, aaaInvalidator); // Configuration order has no effect

            condition6.IsInvalidBuilderInitialization(context_CS).Should().BeFalse();                // Invalid constructor, invalidated by Aaa, validated by Bbb

            var condition7 = new CSharpBuilderPatternCondition(true, bbbValidator, cccInvalidator);

            condition7.IsInvalidBuilderInitialization(context_CS).Should().BeTrue();                // Valid constructor, validated by Bbb, invalidated by Ccc

            var condition8 = new CSharpBuilderPatternCondition(true, cccInvalidator, bbbValidator); // Configuration order has no effect

            condition8.IsInvalidBuilderInitialization(context_CS).Should().BeTrue();                // Valid constructor, validated by Bbb, invalidated by Ccc

            var dddContext = new InvocationContext(FindMethodInvocation_CS(context_CS.Invocation.SyntaxTree, "Ddd"), "Ddd", context_CS.SemanticModel);
            var condition9 = new CSharpBuilderPatternCondition(false);

            condition9.IsInvalidBuilderInitialization(dddContext).Should().BeFalse(); // Invalid constructor is not tracked through array propagation
        }
        public void IsMatch()
        {
            var context = CreateContext();
            InvocationCondition trueCondition  = _ => true;
            InvocationCondition falseCondition = _ => false;
            BuilderPatternDescriptor <InvocationExpressionSyntax> descriptor;

            descriptor = new BuilderPatternDescriptor <InvocationExpressionSyntax>(true);
            descriptor.IsMatch(context).Should().BeTrue();

            descriptor = new BuilderPatternDescriptor <InvocationExpressionSyntax>(true, trueCondition);
            descriptor.IsMatch(context).Should().BeTrue();

            descriptor = new BuilderPatternDescriptor <InvocationExpressionSyntax>(true, trueCondition, trueCondition);
            descriptor.IsMatch(context).Should().BeTrue();

            descriptor = new BuilderPatternDescriptor <InvocationExpressionSyntax>(true, falseCondition);
            descriptor.IsMatch(context).Should().BeFalse();

            descriptor = new BuilderPatternDescriptor <InvocationExpressionSyntax>(true, trueCondition, falseCondition);
            descriptor.IsMatch(context).Should().BeFalse();
        }