Example #1
0
    public string AddTest_normal_some()
    {
        var  chain  = new MethodChain <string>();
        bool result = false;
        var  list   = chain.GetProcessHolder();

        list.Add((str) =>
        {
            if (str != "test1")
            {
                return(false);
            }
            ;
            return(true);
        });
        list.Add((str) =>
        {
            if (str != "test2")
            {
                return(false);
            }
            ;
            result = true;
            return(true);
        });

        try {
            chain.Invoke("test2");
        } catch (System.Exception e) {
            return(Fail("追加した関数が正常に呼ばれていません" + e.ToString()));
        }
        return(result ? Pass() : Fail());
    }
Example #2
0
            internal MethodChain Add(M m)
            {
                Contract.Assume(!this.childrenM.ContainsKey(m));
                var chain = new MethodChain(m);

                this.childrenM.Add(m, chain);
                return(chain);
            }
Example #3
0
    public string DefaultErrorTest()
    {
        var chain = new MethodChain <string>();

        try {
            chain.Invoke("test");
        }catch (System.Exception) {
            return(Pass());
        }
        return(Fail("返されるべきエラー処理が失敗しています"));
    }
Example #4
0
    public string DefaultTest()
    {
        var  chain  = new MethodChain <string>();
        bool result = false;

        chain.SetDefault((str) =>
        {
            result = true;
            return(true);
        });

        try {
            chain.Invoke("test");
        }catch (System.Exception e) {
            return(Fail("デフォルト動作の上書きに失敗しています" + e.ToString()));
        }

        return(result ? Pass() : Fail("コールバックが正常に動作していません"));
    }
Example #5
0
    public string AddTest_error()
    {
        var chain = new MethodChain <string>();
        var list  = chain.GetProcessHolder();

        list.Add((str) =>
        {
            if (str != "tt")
            {
                return(false);
            }
            ;
            return(true);
        });
        try {
            chain.Invoke("test");
        } catch (System.Exception) {
            return(Pass());
        }
        return(Fail("追加した関数が正常に呼ばれていません"));
    }
Example #6
0
        private static void AnalyzeExpression(SyntaxNodeAnalysisContext context)
        {
            var expression = (ExpressionSyntax)context.Node;

            if (expression.IsParentKind(
                    SyntaxKind.ConditionalAccessExpression,
                    SyntaxKind.SimpleMemberAccessExpression,
                    SyntaxKind.ElementAccessExpression,
                    SyntaxKind.MemberBindingExpression,
                    SyntaxKind.InvocationExpression))
            {
                return;
            }

            MethodChain.Enumerator en = new MethodChain(expression).GetEnumerator();

            if (!en.MoveNext())
            {
                return;
            }

            TextLineCollection lines = null;
            int startLine            = -1;
            IndentationAnalysis indentationAnalysis = default;

            do
            {
                context.CancellationToken.ThrowIfCancellationRequested();

                SyntaxKind kind = en.Current.Kind();

                if (kind == SyntaxKind.SimpleMemberAccessExpression)
                {
                    var memberAccess = (MemberAccessExpressionSyntax)en.Current;

                    if (AnalyzeToken(memberAccess.OperatorToken))
                    {
                        return;
                    }
                }
                else if (en.Current.Kind() == SyntaxKind.MemberBindingExpression)
                {
                    var memberBinding = (MemberBindingExpressionSyntax)en.Current;

                    if (AnalyzeToken(memberBinding.OperatorToken))
                    {
                        return;
                    }
                }
            } while (en.MoveNext());

            bool AnalyzeToken(SyntaxToken token)
            {
                SyntaxTriviaList.Reversed.Enumerator en = token.LeadingTrivia.Reverse().GetEnumerator();

                if (!en.MoveNext())
                {
                    if (lines == null)
                    {
                        lines     = expression.SyntaxTree.GetText().Lines;
                        startLine = lines.IndexOf(expression.SpanStart);
                    }

                    int endLine = lines.IndexOf(token.SpanStart);

                    if (startLine != endLine)
                    {
                        ReportDiagnostic();
                    }

                    return(true);
                }

                switch (en.Current.Kind())
                {
                case SyntaxKind.WhitespaceTrivia:
                {
                    if (indentationAnalysis.IsDefault)
                    {
                        indentationAnalysis = AnalyzeIndentation(expression);
                    }

                    if (en.Current.Span.Length != indentationAnalysis.IncreasedIndentationLength)
                    {
                        if (!en.MoveNext() ||
                            en.Current.IsEndOfLineTrivia())
                        {
                            if (expression.FindTrivia(token.FullSpan.Start - 1).IsEndOfLineTrivia())
                            {
                                ReportDiagnostic();
                                return(true);
                            }
                        }

                        break;
                    }

                    break;
                }

                case SyntaxKind.EndOfLineTrivia:
                {
                    if (expression.FindTrivia(token.FullSpan.Start - 1).IsEndOfLineTrivia())
                    {
                        ReportDiagnostic();
                        return(true);
                    }

                    break;
                }
                }

                return(false);
            }

            void ReportDiagnostic()
            {
                DiagnosticHelpers.ReportDiagnostic(
                    context,
                    DiagnosticDescriptors.FixFormattingOfCallChain,
                    expression);
            }
        }